将三维阵列与numpy中的一维阵列相乘

2024-05-14 18:06:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个3D数组和三个1D数组,分别表示x轴、y轴和z轴的值。我想用一维数组乘以三维数组。使用以下方法可以获得正确的值:

   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阵列转换为3D阵列,因为我需要保持较低的内存使用率


Tags: 方法内存infornp数组arraysomething
1条回答
网友
1楼 · 发布于 2024-05-14 18:06:58

您可以沿每个阵列要相乘的尺寸扩展阵列:

>>> 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]]])

这与嵌套循环代码的答案相同,但要快得多

相关问题 更多 >

    热门问题