[英]multiply 3D array with 1D array in numpy
我有一個 3D 數組和三個一維數組,分別代表 x 軸、y 軸和 z 軸值。 我想將 3D 陣列與一維 arrays 相乘。 正確的值可以通過
array_x = np.array([1,2,3])
array_y = np.array([1,2,3])
array_z = np.array([1,2,3])
array3D = something
for ix, x in enumerate(array_x):
for iy, y in enumerate(array_y):
for iz, z in enumerate(array_z):
array3D[ix][iy][iz] *= x*y*z
在 python 中執行此操作的最快方法是什么? 我還想避免將三個 1D arrays 變成 3D arrays 因為我需要保持 ZCD69B4B671D71D9CZ 的使用率低361。
您可以沿要相乘的維度擴展每個數組:
>>> array3D = np.arange(27).reshape((3,3,3))
>>> (array3D*array_x)*array_y[:,None])*array_z[:, None, None]
# or using Einstein Summation convention (np.einsum)
# np.einsum('i, j, k, ijk -> ijk',array_x, array_y, array_z, array3D)
array([[[ 0, 2, 6],
[ 6, 16, 30],
[ 18, 42, 72]],
[[ 18, 40, 66],
[ 48, 104, 168],
[ 90, 192, 306]],
[[ 54, 114, 180],
[126, 264, 414],
[216, 450, 702]]])
這與您的嵌套循環代碼的答案相同,但要快得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.