多维(4D)数组乘法问题

时间:2019-12-24 20:31:53

标签: python matlab numpy

在尝试将MATLAB代码转换为Python时,我遇到了多维(4D)数组乘法问题。

如何使用Python / NumPy获得与MATLAB相同的结果?

Python 3 NumPy代码和结果:

A = np.arange(1,25).reshape((2, 3, 2, 2))
B = np.array([1,10,100])
A * B[np.newaxis,:, np.newaxis, np.newaxis]

array([[[[   1,    2],
         [   3,    4]],
        [[  50,   60],
         [  70,   80]],
        [[ 900, 1000],
         [1100, 1200]]],
       [[[  13,   14],
         [  15,   16]],
        [[ 170,  180],
         [ 190,  200]],
        [[2100, 2200],
         [2300, 2400]]]])

MATLAB代码和结果:

A = reshape(1:24, 2,3,2,2)
B = [1 10 100]
A .* B

ans(:,:,1,1) =
     1    30   500
     2    40   600
ans(:,:,2,1) =
           7          90        1100
           8         100        1200
ans(:,:,1,2) =
          13         150        1700
          14         160        1800
ans(:,:,2,2) =
          19         210        2300
          20         220        2400

1 个答案:

答案 0 :(得分:3)

正如Divakar所说,Numpy具有主要行索引。此外,它从0开始索引。 因此,您可以执行以下操作:

import numpy as np

A = np.arange(1,25).reshape((2, 2, 3, 2))
B = np.array([1,10,100])
ans = A * B[np.newaxis, np.newaxis, :, np.newaxis]

ans = np.transpose(ans)

print(ans[:,:,0,0])
print(ans[:,:,1,0])
print(ans[:,:,0,1])
print(ans[:,:,1,1])

退出:

[[  1  30 500]
 [  2  40 600]]
[[   7   90 1100]
 [   8  100 1200]]
[[  13  150 1700]
 [  14  160 1800]]
[[  19  210 2300]
 [  20  220 2400]]