【问题标题】:Find the sum of a column in a python matrix?在python矩阵中找到一列的总和?
【发布时间】:2017-09-19 02:45:45
【问题描述】:

我知道如何做这样的行的总和:row = [sum(row) for row in Matrix],但是如何在 python 矩阵中找到列的总和?

如果我有这个矩阵:

Matrix =[[0, 2, 2],
         [0, 2, 2], 
         [0, 0, 2]]

它应该有 3 个值,它们是:046

【问题讨论】:

  • here同样的问题,很好的示例代码
  • @dirty_feri 在另一篇文章中,它显示了如何找到您指定的行的列,有没有办法自动找到所有这些的总和?
  • zip() 将转置您的列表列表。然后像您在示例中显示的那样求和。 cols = [sum(col) for col in zip(Matrix)]
  • ...cols = [sum(col) for col in zip(*Matrix)]

标签: python arrays python-2.7 matrix


【解决方案1】:
import numpy as np
a = np.array([[1, 2, 3],
              -1, 2, 6])

print(a.cumsum(axis = 0))

输出:

>>> np.array([[1, 2, 3],
              [0, 4, 9]])

最后一个字段是列的总和

如果你想得到字段的总和,只需在轴上输入“1”而不是“0”。

In [121]: a.cumsum(axis = 1)
Out[121]:
array([[ 1,  3,  6],
       [-1,  1,  7]], dtype=int32)

【讨论】:

    【解决方案2】:

    你可以用这种方式计算矩阵中的行总和。 我们创建简单的矩阵:

    import pandas as pd
    
    cc =[100, 0, 0, 0]
    aaa = [80, 9, 1, 1]
    fff = [10, 0, 8, 0]
    hhh = [10, 1, 1, 9]
    
    df = pd.DataFrame({'A': cc, 'B': aaa,'C': fff,'D': hhh})
    matrix = df.values
    matrix
    

    行的总和

    sumR = matrix.sum(axis=1) 
    sumR
    

    数组([200, 10, 10, 10])

    sumR = list(sumR.flatten())
    sumR
    

    [200, 10, 10, 10]

    列的总和

    sumC = matrix.sum(axis=0) 
    sumC
    

    数组([100, 91, 18, 21])

    sumC = list(sumC.flatten())
    sumC
    

    [100, 91, 18, 21]

    【讨论】:

      【解决方案3】:
      import numpy as np
      Matrix =[[0, 2, 2],
               [0, 2, 2], 
               [0, 0, 2]]
      np.asarray(Matrix).sum(axis=0)
      Out[66]: array([0, 4, 6])
      

      这是不言自明的,但有人要求评论代码。

      代码首先将矩阵转换为一个 numpy 数组,然后对数组列进行求和,这就是这个问题的意义所在。

      【讨论】:

      • 请编辑您的答案以包含一些解释。仅代码的答案对教育未来的 SO 读者几乎没有作用。您的答案因质量低劣而在审核队列中。
      【解决方案4】:

      here 同样的问题,很好的示例代码。看看

      def sumColumn(m, column):
          total = 0
          for row in range(len(m)):
              total += m[row][column]
          return total
      
      column = 1
      print("Sum of the elements in column", column, "is", sumColumn(matrix, column))
      

      您可以查看并每次将一个添加到索引中,以便查看下一列

      或者你可以使用 zip:

      def sumColumn(m):
          return [sum(col) for col in zip(*m)]
      

      或更简单的方式来自here

      sum(m[:,i]) for i in range(4)
      

      【讨论】:

        【解决方案5】:

        比其他一些答案更 Pythonic 的方式:

        [sum(row[i] for row in Matrix) for i in range(len(Matrix[0]))]
        

        这在缓存性能方面非常低效。所以尽量避免,如果需要对同一个矩阵多次执行这个操作,或者先转置矩阵。

        【讨论】:

          【解决方案6】:

          来自here

          试试这个,它按指定列对矩阵求和:

          def sumColumn(m, column):
          total = 0
          for row in range(len(m)):
              total += m[row][column]
          return total
          
          column = 1
          print("Sum of the elements in column", column, "is", sumColumn(matrix, column))
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-03-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-18
            • 1970-01-01
            • 1970-01-01
            • 2022-08-08
            相关资源
            最近更新 更多