2

您好,我有以下矩阵

 [[ 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]]

我需要遍历矩阵,将第 0、1、2、3、4 行中的所有元素相加,仅示例:我需要

  row_0_sum = 47+43+51+81....46

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

 [row0_sum, row1_sum, row2_sum, row3_sum, row4_sum]

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

  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]

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

所以有人可以帮助我。执行此操作的最佳方法是什么,以及我应该使用 Python 中的哪种类型的数组来存储它。我是 Python 新手,但已经完成了编程......

谢谢

4

1 回答 1

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]

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

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

或者,您也可以选择只选择那些开始的行,并且只对它们应用总和:

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

一些有用的链接将是:

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

NumPy 中的切片/索引

于 2012-10-24T13:37:11.733 回答