我正在寻找一种优化的方式来计算2d数组与3d数组的每个切片的元素明智乘法(使用numpy)。
例如:
w = np.array([[1,5], [4,9], [12,15]])
y = np.ones((3,2,3))
我想获得一个形状与y
相同的3d数组。
不允许使用*运算符进行广播。 就我而言,第三维很长,for循环不方便。
答案 0 :(得分:1)
给出数组
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)相同,也许花费的精力和开销更少。