Numpy和Matlab的总​​和有何不同?

时间:2013-11-15 17:41:36

标签: python arrays matlab numpy

我有一个代码,我正在尝试将其从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

2 个答案:

答案 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]