我有一段代码,想要将其从Matlab翻译成Python,但是求和部分出现了问题:
a=np.arange(1,28).reshape(3,3,3)
print a
print np.sum(np.sum(a,axis=1),axis=2)
我遇到了数组下标越界错误
。根据下面的答案,我正在更新这个例子。以下是结果:
a=np.arange(1,28).reshape(3,3,3)
print a
print np.sum(np.sum(a,axis=1),axis=2)
is:
[[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]]
[[10 11 12]
[13 14 15]
[16 17 18]]
[[19 20 21]
[22 23 24]
[25 26 27]]]
[ 45 126 207]
但是在Matlab中相同的代码可以正常工作:
a=1:27
b=reshape(a,[3,3,3])
b(:,:,1)=b(:,:,1)';
b(:,:,2)=b(:,:,2)';
b(:,:,3)=b(:,:,3)';
b
sum(sum(b,2),3)
将输出以下结果: 问题是什么?
b(:,:,1) =
1 2 3
4 5 6
7 8 9
b(:,:,2) =
10 11 12
13 14 15
16 17 18
b(:,:,3) =
19 20 21
22 23 24
25 26 27
ans =
99
126
153
a
和b
的对齐方式不同。a[0,1,2] == 6
,但是b(1,2,3) == 20
。 - DSMa=1:27;b=reshape(a,[3,3,3])
,在numpy
中执行a=np.arange(1,28).reshape(3,3,3,order='F')
,我认为你会得到相同的数组。或者你可以使用permute
或.transpose
来修复它。这取决于你喜欢哪种索引约定。另外请注意,你可以同时对多个轴进行求和:a.sum((0,2))
。 - DSM