我有一个二维的numpy数组,例如:
a = np.array([[1,2,3,4,5],[4,6,5,8,9]])
我尝试做a = a[a[0]>2]
,但出现错误。我想获得:
array([[3, 4, 5],
[5, 8, 9]])
有可能吗?谢谢!
答案 0 :(得分:2)
逐步评估选项:
In [75]: a = np.array([[1,2,3,4,5],[4,6,5,8,9]])
第一行,一维数组
In [76]: a[0]
Out[76]: array([1, 2, 3, 4, 5])
其中第一行为> 2,即大小相同的一维布尔数组
In [77]: a[0]>2
Out[77]: array([False, False, True, True, True])
使用直接指令会产生错误:
In [78]: a[a[0]>2]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-78-631a57b67cdb> in <module>()
----> 1 a[a[0]>2]
IndexError: boolean index did not match indexed array along dimension 0; dimension is 2 but corresponding boolean dimension is 5
a
的第一维为2,但布尔值索引(掩码)的大小为2(第二暗)
因此我们需要将其应用于第二维。二维索引语法:x[i, j]
,x[:, j]
以选择所有行,但选择列的子集:
In [79]: a[:,a[0]>2]
Out[79]:
array([[3, 4, 5],
[5, 8, 9]])