给定两个numpy数组,在数组A中找到具有唯一值的数组B中的项

时间:2019-04-26 20:18:11

标签: python python-3.x numpy

我正在尝试通过选择性质心选择来实现K均值。我有两个numpy数组,一个称为“功能”,它具有一组numpy数组,其中每个数组都是一个数据点,另一个称为“标签”的np数组,其具有该类的标签是数据点在索引“ 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

3 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

尝试:

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])}

答案 2 :(得分:0)

您可以通过一些索引和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])}