我有一个代码,我正在尝试将其从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
答案 0 :(得分:2)
我认为问题是np.sum(a, axis=1)
的结果是二维数组。如果你试图沿轴= 2求和,你会得到你看到的错误,因为2d数组只有轴0和1。
e.g:
>>> a = np.ones((3,3,3))
>>> np.sum(a, axis=1)
array([[ 3., 3., 3.],
[ 3., 3., 3.],
[ 3., 3., 3.]])
>>> np.sum(a, axis=1).shape
(3, 3)
>>> np.sum(np.sum(a, axis=1), axis=1)
array([ 9., 9., 9.])
答案 1 :(得分:2)
你的第一个总结是沿着列总结,我认为你不想要。
>>> np.sum(a,axis=1)
array([12, 15, 18],
[39, 42, 45],
[66, 69, 72]])
相反,更改第一个求和的轴。这将产生与您的matlab代码相同的答案:
>>> print np.sum(np.sum(a, axis=0), axis=1)
[99, 126, 153]