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)]
这样可行,但我不想使用for循环。当我尝试
sumkma[site[j],j]
我收到此错误:
IndexError:形状不匹配:索引数组无法与形状一起广播(20,200)(20,)
如何修复错误?
答案 0 :(得分:5)
当访问具有整数类型的其他多维数组的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)
。