形状不匹配:索引数组不能与形状一起广播

2024-10-05 15:26:39 发布

您现在位置:Python中文网/ 问答频道 /正文

j=np.arange(20,dtype=np.int)
site=np.ones((20,200),dtype=np.int)
sumkma=np.ones((100,20))

[sumkma[site[x],x] for x in range(20)]

这很有效,但我不想用于循环。当我试着

sumkma[site[j],j]

我得到这个错误:

IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (20,200) (20,)

如何修正错误?


Tags: infor错误nponessiterangeint
1条回答
网友
1楼 · 发布于 2024-10-05 15:26:39

当使用其他整数类型的多维数组访问numpy多维数组时,用于索引的数组需要具有相同的形状。

如果可能的话,Numpy会很高兴地广播,但是为了实现这一点,数组需要具有相同的维数,例如:

sumkma[site[j], j[:,np.newaxis]]

np.newaxis导致j[:,np.newaxis]是二维的(形状现在是(20,1),而j的形状是一维的(20,))。它现在有一个可以广播到site[j]形状的形状:

>>> j.shape
(20,)
>>> site[j].shape
(20,200)
>>> j[:,np.newaxis].shape
(20,1)

索引数组的相同维度允许numpy广播它们具有相同的形状(20,200)

https://docs.scipy.org/doc/numpy-1.13.0/user/basics.indexing.html#indexing-multi-dimensional-arrays

相关问题 更多 >