【问题标题】:Numpy array indexing with two dimensions具有二维的 Numpy 数组索引
【发布时间】:2019-01-09 03:44:59
【问题描述】:

我有一个二维的 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]])

有可能吗?谢谢!

【问题讨论】:

  • ..a[:,a[0]>2]?
  • 嗯,很简单,谢谢!你能解释一下为什么a[a[0]>2] 不起作用吗?
  • 是的,我以前看过,但不是很清楚,b[:,5] 的部分与我的情况不完全相同

标签: python-3.x numpy indexing


【解决方案1】:

逐步评估选项:

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(第二个暗淡)

所以我们需要将它应用到第二维。 2d 索引语法:x[i, j]x[:, j] 选择所有行,但选择列的子集:

In [79]: a[:,a[0]>2]
Out[79]: 
array([[3, 4, 5],
       [5, 8, 9]])

【讨论】:

  • 我在重读这个答案,你的意思是 but the boolean index (mask) has size 5 (2nd dim) 而不是 size 2 吗?
猜你喜欢
  • 2011-07-07
  • 2020-07-30
  • 2012-04-10
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多