将 2d 数组与 3d 数组的每个切片相乘 - Numpy
Multiplying a 2d array with each slice of 3d array - Numpy
我正在寻找一种优化的方法来计算 2d 数组与 3d 数组的每个切片的元素明智的乘法(使用 numpy)。
例如:
w = np.array([[1,5], [4,9], [12,15]])
y = np.ones((3,2,3))
我想得到一个与 y
.
形状相同的 3d 数组结果
不允许使用 * 运算符进行广播。
就我而言,三维空间很长,for 循环不方便。
给定数组
import numpy as np
w = np.array([[1,5], [4,9], [12,15]])
print(w)
[[ 1 5]
[ 4 9]
[12 15]]
和
y = np.ones((3,2,3))
print(y)
[[[ 1. 1. 1.]
[ 1. 1. 1.]]
[[ 1. 1. 1.]
[ 1. 1. 1.]]
[[ 1. 1. 1.]
[ 1. 1. 1.]]]
我们可以直接对数组进行倍增,
z = ( y.transpose() * w.transpose() ).transpose()
print(z)
[[[ 1. 1. 1.]
[ 5. 5. 5.]]
[[ 4. 4. 4.]
[ 9. 9. 9.]]
[[ 12. 12. 12.]
[ 15. 15. 15.]]]
我们可能会注意到,这会产生与 np.einsum('ij,ijk->ijk',w,y) 相同的结果,也许工作量和开销会少一些。
我正在寻找一种优化的方法来计算 2d 数组与 3d 数组的每个切片的元素明智的乘法(使用 numpy)。
例如:
w = np.array([[1,5], [4,9], [12,15]])
y = np.ones((3,2,3))
我想得到一个与 y
.
不允许使用 * 运算符进行广播。 就我而言,三维空间很长,for 循环不方便。
给定数组
import numpy as np
w = np.array([[1,5], [4,9], [12,15]])
print(w)
[[ 1 5]
[ 4 9]
[12 15]]
和
y = np.ones((3,2,3))
print(y)
[[[ 1. 1. 1.]
[ 1. 1. 1.]]
[[ 1. 1. 1.]
[ 1. 1. 1.]]
[[ 1. 1. 1.]
[ 1. 1. 1.]]]
我们可以直接对数组进行倍增,
z = ( y.transpose() * w.transpose() ).transpose()
print(z)
[[[ 1. 1. 1.]
[ 5. 5. 5.]]
[[ 4. 4. 4.]
[ 9. 9. 9.]]
[[ 12. 12. 12.]
[ 15. 15. 15.]]]
我们可能会注意到,这会产生与 np.einsum('ij,ijk->ijk',w,y) 相同的结果,也许工作量和开销会少一些。