簡體   English   中英

將 3D 數組與 numpy 中的一維數組相乘

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM