迭代矩阵,对某些行求和并将结果添加到另一个数组

ban*_*ing 2 python numpy matplotlib matrix

嗨,我有以下矩阵

 [[ 47  43  51  81  54  81  52  54  31  46]
  [ 35  21  30  16  37  11  35  30  39  37]
  [  8  17  11   2   5   4  11   9  17  10]
  [  5   9   4   0   1   1   0   3   9   3]
  [  2   7   2   0   0   0   0   1   2   1]
  [215 149 299 199 159 325 179 249 249 199]
  [ 27  49  24   4  21   8  35  15  45  25]
  [100 100 100 100 100 100 100 100 100 100]]
Run Code Online (Sandbox Code Playgroud)

我需要迭代矩阵求和行0,1,2,3,4中的所有元素,只有例子:我需要

  row_0_sum = 47+43+51+81....46
Run Code Online (Sandbox Code Playgroud)

此外,我需要将每个行sum存储在这样的数组中

 [row0_sum, row1_sum, row2_sum, row3_sum, row4_sum]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试过这段代码,但它没有完成这项工作:

  mu = np.zeros(shape=(1,6))

  #get an average 
  def standardize_ratings(matrix):
 sum = 0
 for i, eli in enumerate(matrix):
     for j, elj in enumerate(eli):
        if(i<5):
         sum = sum + matrix[i][j]
         if(j==elj.len -1):
           mu[i] = sum
           sum = 0
           print "mu[i]="
           print mu[i]
Run Code Online (Sandbox Code Playgroud)

这只是给了我一个Error: numpy.int32 object has no attribute 'len'

所以有人可以帮助我.什么是最好的方法,我应该使用哪种类型的数组来存储它.我是Python新手,但已完成编程....

Thannks

ely*_*ely 5

制作您的数据,matrix一个numpy.ndarray对象,而不是一个列表列表,然后就这样做matrix.sum(axis=1).

>>> matrix = np.asarray([[ 47,  43,  51,  81,  54,  81,  52,  54,  31,  46],
  [ 35,  21,  30,  16,  37,  11,  35,  30,  39,  37],
  [  8,  17,  11,   2,   5,   4,  11,   9,  17,  10],
  [  5,   9,   4,   0,   1,   1,   0,   3,   9,   3],
  [  2,   7,   2,   0,   0,   0,   0,   1,   2,   1],
  [215, 149, 299, 199, 159, 325, 179, 249, 249, 199],
  [ 27,  49,  24,   4,  21,   8,  35,  15,  45,  25],
  [100, 100, 100, 100, 100, 100, 100, 100, 100, 100]])

>>> print matrix.sum(axis=1)
[ 540  291   94   35   15 2222  253 1000]
Run Code Online (Sandbox Code Playgroud)

要从结果中获取前五行,您可以执行以下操作:

>>> row_sums = matrix.sum(axis=1)
>>> rows_0_through_4_sums = row_sums[:5]
>>> print rows_0_through_4_sums
[540 291  94  35  15]
Run Code Online (Sandbox Code Playgroud)

或者,您也可以仅选择那些开头的行,并仅将总和应用于它们:

>>> rows_0_through_4 = matrix[:5,:]
>>> print rows_0_through_4.sum(axis=1)
[540 291  94  35  15]
Run Code Online (Sandbox Code Playgroud)

一些有用的链接将是:

NumPy for Matlab用户,如果您熟悉Matlab/Octave中的这些内容

在NumPy中切片/索引