如何根据单独的numpy数组中的类标签选择numpy数据数组的行?

时间:2017-02-06 10:28:48

标签: python numpy

我有两个数组,它们在一个单独的数组中有2D矢量和类标签。

a = np.random.random_sample((10000,2))
labels = [0]*10000

我像这样使用它们

plot_data(a,np.matrix(np.asarray(labels)))

现在有三个类1,2和3,我打算从' a'中提取行。对应于每个类的向量并绘制它。 我无法完成它。我试过以下但是它没有用。

indices_0 = [k for k in range(0, X.shape[0]) if np.all(y == 1)]
indices_1 = [k for k in range(0, X.shape[0]) if np.all(y == 2)]
indices_2 = [k for k in range(0, X.shape[0]) if np.all(y == 3)]

如何选择行(如matlab中的FIND)?

1 个答案:

答案 0 :(得分:0)

您正在寻找的是NumPy的nonzero方法。

尝试使用:

indices_0 = a[np.nonzero(labels == 0)]
indices_1 = a[np.nonzero(labels == 1)]
indices_2 = a[np.nonzero(labels == 2)]

说明:

  • labels == 0为具有指定值的向量True的每个元素返回Falselabels数组,
  • np.nonzero(...)返回索引列表,其中向量具有True值,
  • indices[...]返回indices矩阵的行,这些矩阵按照nonzero提供的索引进行过滤。

顺便说一句:我推荐这个用于Matlab用户的备忘单:https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html