我正在尝试通过选择性质心选择来实现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
答案 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])}