Numpy 数组与其他数组索引会产生广播错误

Hab*_*bie 4 python arrays indexing numpy multidimensional-array

我有两个索引数组。

elim=range(130,240)
tlim=range(0,610)
Run Code Online (Sandbox Code Playgroud)

要索引的数组 的I原始形状为(299, 3800)

当我尝试按如下方式对其进行索引时

I[elim,tlim]
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息。

形状不匹配:索引数组无法与形状 (110,) (610,) 一起广播

我没想到会出现这样的错误。有人能解释一下这里发生了什么吗?

谢谢!

yat*_*atu 5

让我们用指定形状的随机数组重现该示例:

elim=range(0,610)
tlim=range(130,240)
a = np.random.rand(299, 3800)

a[tlim, elim]
Run Code Online (Sandbox Code Playgroud)

IndexError:形状不匹配:索引数组无法与形状 (110,) (610,) 一起广播

这会引发错误,因为您使用整数索引数组来索引数组,因此将应用高级索引规则。在这个例子中你应该使用切片

a[130:240,0:610].shape
# (110, 610)
Run Code Online (Sandbox Code Playgroud)

请参阅理解切片表示法(NumPy 索引,只是同一概念到 n 维数组的扩展。

对于您有一个索引列表(不一定可以表示为切片)的情况,您有np.ix_. 有关 numpy 索引的更多信息,可能会有所帮助

a[np.ix_(tlim, elim)].shape
# (110, 610)
Run Code Online (Sandbox Code Playgroud)