【问题标题】:sum matrix columns in pythonpython中的求和矩阵列
【发布时间】:2014-04-18 00:40:15
【问题描述】:

我可以对第零列中的项目求和。但是我在哪里更改代码以求和矩阵中的第 2 列、第 3 列或第 4 列? 我很容易被难住。

def main():
    matrix = []

    for i in range(2):
        s = input("Enter a 4-by-4 matrix row " + str(i) + ": ") 
        items = s.split() # Extracts items from the string
        list = [ eval(x) for x in items ] # Convert items to numbers   
        matrix.append(list)

    print("Sum of the elements in column 0 is", sumColumn(matrix))

def sumColumn(m):
    for column in range(len(m[0])):
        total = 0
        for row in range(len(m)):
            total += m[row][column]
        return total

main()

【问题讨论】:

    标签: python matrix sum


    【解决方案1】:
    import numpy as np
    np.sum(M,axis=1)
    

    其中 M 是矩阵

    【讨论】:

      【解决方案2】:

      单线:

      column_sums = [sum([row[i] for row in M]) for i in range(0,len(M[0]))]
      

      还有

      row_sums = [sum(row) for row in M]
      

      对于任何矩形非空矩阵(列表列表)M。例如

      >>> M = [[1,2,3],\
      >>>     [4,5,6],\
      >>>     [7,8,9]]
      >>>
      >>> [sum([row[i] for row in M]) for i in range(0,len(M[0]))]
      [12, 15, 18] 
      >>> [sum(row) for row in M]
      [6, 15, 24]
      

      【讨论】:

      • 尽管我很喜欢列表理解魔法,但 @inspectorG4dget 的基于 zip 的版本对于小型 (3x3) 矩阵来说要快约 2 倍。对于嵌套列表理解,zip 是每个循环 1.86 微秒与 3.7 微秒。老派list(map(sum,zip(*M))) 一样快(1.87 微秒)。
      【解决方案3】:

      numpy 可以很容易地为你做到这一点:

      def sumColumn(matrix):
          return numpy.sum(matrix, axis=1)  # axis=1 says "get the sum along the columns"
      

      当然,如果您想手动完成,我会按照以下方式修复您的代码:

      def sumColumn(m):
          answer = []
          for column in range(len(m[0])):
              t = 0
              for row in m:
                  t += row[column]
              answer.append(t)
          return answer
      

      不过,还有一种更简单的方法,使用 zip:

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

      【讨论】:

      • 我猜axis = 0 得到沿列的总和
      • 哦不,他是对的。如果您指定“axis = 1”,则对于矩阵中的每一行,列值将相加然后存储。结果将是一个包含所有总和的一维数组。
      • 根据文档,我们使用axis = 0的列和axis = 1的行。
      【解决方案4】:

      要获取矩阵中所有列的总和,您可以使用以下 python numpy 代码:

      matrixname.sum(axis=0)
      

      【讨论】:

      • 嗯,我认为它是 matrixname.sum(axis=1) 而不是 ... >>> b array([[1, 2], [3, 4]]) >>> b。 sum(axis=1) array([3, 7]) >>> b.sum(axis=0) array([4, 6])
      【解决方案5】:

      您的代码已更改为返回您指定的任何列的总和:

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

      【讨论】:

        【解决方案6】:

        如果将矩阵表示为平面数组,这会更容易:

        m = [
            1,2,3,4,
            10,11,12,13,
            100,101,102,103,
            1001,1002,1003,1004
        ]
        
        def sum_column(m, n):
            return sum(m[i] for i in range(n, 4 * 4, 4))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-30
          • 1970-01-01
          • 1970-01-01
          • 2018-07-28
          • 1970-01-01
          相关资源
          最近更新 更多