python - 在 numpy 数组中加权平面的最佳方法是什么?

标签 python numpy array-broadcasting

我有以下代码,其中 w 是兼容维度的 1D numpy 数组,M 是 4D 数组,

i = 0
for weight in w:
    M[:, :, i, :] *= weight
    i += 1

有没有更好的方法达到同样的效果?

最佳答案

您正在使用 w 中的元素沿 axis=2 缩放 M,这是一个 1D 数组.因此,您需要使用 np.newaxis/Nonew 扩展为二维数组。 ,这将使 w 的扩展版本M 之间的轴对齐。然后,在这两个数组之间执行逐元素乘法,得到 broadcasting。对于矢量化解决方案,就像这样 -

M *= w[:,None]

如果Maxis=2的长度大于w中的元素个数,则需要选择范围在相乘之前沿 axis=2 in M,像这样 -

M[...,np.arange(w.size),:] *= w[:,None]

关于python - 在 numpy 数组中加权平面的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35268247/

相关文章:

numpy - Np.newaxis与Numba nopython

python - Django按距离排序

python - 将两列串联成一轮 float

c++ - 用于桌面应用程序的 Twitter API 库?

python - numpy.datetime64 : how to get weekday of numpy datetime64 and check if it's between time1 and time2

python - 将每一行乘以不同的旋转矩阵

python - 如何合并两个Python字典?

python - 如何矢量化此 python 代码以使其更高效? (速度)

python - 更新张量中的切片或列

python - 索引错误 : shape mismatch: indexing arrays could not be broadcast together with shapes