【发布时间】:2013-11-15 17:41:36
【问题描述】:
我有一个代码,我正在尝试从 Matlab 转换为 Python,但是求和存在问题:
a=np.arange(1,28).reshape(3,3,3)
print a
print np.sum(np.sum(a,axis=1),axis=2)
给我axis index out of bound error。根据下面的答案,我正在更新这个例子。结果:
a=np.arange(1,28).reshape(3,3,3)
print a
print np.sum(np.sum(a,axis=1),axis=2)
是:
[[[ 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。 -
@DSM,谢谢,但我应该怎么做才能使它们对齐?
-
如果你在 Matlab 中使用
a=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))。 -
@Naji 如果对您有帮助,请不要忘记将答案标记为正确。
-
@CiananSims,我在这里没有看到正确的答案。每个答案都对我有一点指导。我主要使用 DSM 的评论。虽然你的答案是最接近的。
标签: python arrays matlab numpy