我有一个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),但返回第二列和第三列的副本。
答案 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
。它不会选择数组的行和列。