【发布时间】:2020-11-18 11:08:47
【问题描述】:
我想知道如何从一个数组中获取索引并与另一个数组相乘。我有两个 4d 数组和一个 2d 索引数组:
base = np.ones((2, 3, 5, 5))
to_multiply = np.arange(120).reshape(2, 3, 4, 5)
index = np.array([[0, 2, 4, 2], [0, 3, 3, 2]])
索引数组的行索引对应base和to_multiply的第1维,索引数组的值对应base的第3维。我想根据索引从base中取出切片并与to_multiply相乘。
使用 for 循环和 np.multiply.at(因为我可能有相同的索引)我可以通过以下方式实现它:
for i, x in enumerate(index):
np.multiply.at(base[i, :, :, :], np.s_[:, x, :], to_multiply[i, :, :, :])
上面的正确性可以通过以下方式验证:
to_multiply[0, 0, :, 0]
array([ 0, 5, 10, 15])
base[0, 0, :, 0]
array([ 0., 1., 75., 1., 10.])
但是,我想知道是否有使用 np.multiply.at 和 np.ix_ 的单行解决方案
我尝试使用 np.ix_ 但我对此感到非常困惑,因为在这种情况下它是多维的。
【问题讨论】:
标签: python numpy numpy-ndarray numpy-slicing numpy-ufunc