如何从Numpy中提取列

时间:2014-11-07 16:07:47

标签: python numpy

我有一个numpy数组,有300行和5列

X[X[:,0]==1,[1,2]]
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-154-de5e74bc1a0b> in <module>()
----> 1 X[X[:,0]==1,[1,2]]

ValueError: shape mismatch: objects cannot be broadcast to a single shape 

如何使这项工作?我想过滤第一列(等于1),但返回第二列和第三列的副本。

1 个答案:

答案 0 :(得分:1)

将两个索引案例分开是最简单的。首先查看第一列,选择适当的行,然后从该数组中选择第1列和第2列:

>>> a = np.random.randint(0, 2, (3, 5))
>>> a
array([[0, 0, 0, 0, 1],
       [1, 0, 1, 0, 1],
       [0, 0, 1, 1, 0]])

>>> a[a[:,0] == 1][:,[1,2]]
array([[0, 1]])

问题中的代码a[a[:,0] == 1, [1,2]]在语法上看起来很相似,但却做了不同的事情。

例如a[a[:,0] == 0, [1,2]]a,相当于a[[0,2], [1,2]]。此索引会精确选出a中的两个元素:行0的元素,列1和行2的元素,列2。它不会选择数组的行和列。