在尝试将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
答案 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]]