【问题标题】:Given two numpy arrays, find the item in array A with unique values in array B给定两个 numpy 数组,在数组 A 中找到数组 B 中具有唯一值的项
【发布时间】:2019-04-26 20:18:11
【问题描述】:

我正在尝试通过选择性质心选择来实现 K-means。我有两个 numpy 数组,一个称为“features”,它有一组 numpy 数组,其中每个数组是一个数据点,另一个 np 数组称为“labels”,它具有索引“i”处的数据点所属的类标签.我有与 4 个不同类相关的数据点。我想要做的是利用这两个 numpy 数组,并从每个类中随机选择一个数据点。你能帮我解决这个问题吗?另外,有没有办法将两个 numpy 数组压缩到字典中?

例如,我的特征数组为:

[[1,1,1],[1,2,3],[1,6,7],[1,4,6],[1,6,9],[1,4,2]] 我的标签数组是 [1,2,2,3,1,3]

对于标签 numpy 数组中唯一的每个值,我想要在 features 数组中随机选择一个对应的元素。一个示例答案是:

[1,1,1] from class 1
[1,6,7] from class 2
[1,4,2] from class 3

【问题讨论】:

  • 请举例说明您的问题以及您想要达到的结果。
  • 我用一个例子更新了我的问题。请检查

标签: python python-3.x numpy


【解决方案1】:

鉴于这是您问题中的设置:

import numpy as np
features = [[1,1,1],[1,2,3],[1,6,7],[1,4,6],[1,6,9],[1,4,2]]
labels = np.array([1,2,2,3,1,3])

这应该会从字典形式的每个标签中为您提供一个随机变量:

features_index = np.array(range(0, len(features)))
unique_labels = np.unique(labels)
rand = []
for n in unique_labels:
    rand.append(features[np.random.choice(features_index[labels == n])])
dict(zip(unique_labels, rand))

【讨论】:

    【解决方案2】:

    试试:

    import numpy as np
    
    features = np.array([[1,1,1],[1,2,3],[1,6,7],[1,4,6],[1,6,9],[1,4,2]])
    labels = np.array([1,2,2,3,1,3])
    
    res = {i: features[np.random.choice(np.where(labels == i)[0])] for i in set(labels)}
    

    输出

    {1: array([1, 1, 1]), 2: array([1, 2, 3]), 3: array([1, 4, 2])}
    

    【讨论】:

      【解决方案3】:

      您可以通过一些索引和numpy.unique 来完成此操作


      u = np.unique(labels)
      f = np.arange(features.shape[0])
      
      idx = np.random.choice(
          f, u.shape[0], replace=False
      )
      
      dict(zip(u, features[idx]))
      

      {1: array([1, 4, 2]), 2: array([1, 6, 9]), 3: array([1, 1, 1])}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-16
        相关资源
        最近更新 更多