我有一个2D numpy数组
weights = np.array(
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
)
我有两个一维numpy数组,我想用它们来索引权重
positions1 = np.array([2, 1, 0])
positions2 = np.array([1, 1, 0])
如果我想得到遍历数组的结果,并索引到矩阵中,我可以这样做
print(weights[positions1[...], positions2[...]])
然后得到[8 5 1]
但是现在我想索引到矩阵中所有可能的位置1和位置2的组合,这样我就得到了一个像这样的矩阵
[
[weights[2, 1], weights[2, 1], weights[2, 0]],
[weights[1, 1], weights[1, 1], weights[1, 0]],
[weights[0, 1], weights[0, 1], weights[0, 0]],
]
所以呢
[
[weights[pos1[0], pos2[0]], weights[pos1[0], pos2[1]], weights[pos1[0], pos2[2]]],
[weights[pos1[1], pos2[0]], weights[pos1[1], pos2[1]], weights[pos1[1], pos2[2]]],
[weights[pos1[2], pos2[0]], weights[pos1[2], pos2[1]], weights[pos1[2], pos2[2]]],
]
在numpy中做这件事的规范方法是什么?我知道这有点像外积,但我实际上并不想将数组中的值相乘,而是将它们的值作为元组索引到矩阵中。
2条答案
按热度按时间b0zn9rqh1#
您需要更改第一个索引器的形状:
或者用一个广义的版本,正如Chrysophylaxs所指出的:
输出:
w3nuxt5m2#
另一种可能的解决方案:
如果上面的方法在你的Python版本上不起作用,你可以使用@mozway的建议:
输出: