【问题标题】:How to print the sum of columns and rows in python?如何在python中打印列和行的总和?
【发布时间】:2020-05-28 01:13:35
【问题描述】:

我想打印一个二维数组的每一行的总和和每一列的总和,像这样:

  • sum row1 = 123(数字不是实数,只是举例)
  • 和行2 = 123
  • 总和第 3 行 = 123

列也是如此。我知道如何在java中做到这一点,但不知道如何在python中做到这一点。 这是我的代码(缺少行和列总和的代码,因为我不知道该怎么做):

from random import randint

dim1 = input("Insert first dimension: ")
dim1 = int(dim1)

dim2 = input("Insert second dimension: ")
dim2 = int(dim2)

table1d = []

for i in range(dim1):
    table2d = []
    for j in range(dim2):
        table2d.append(randint(1, 170))
    table1d.append(table2d)
print(table1d)

totalSum = sum(map(sum, table1d))
print(totalSum)

sumRows = 0
for i in range(0, len(table1d), 1):
    sumRows += table1d[i]

【问题讨论】:

  • sums_in_rows = list(map(sum, table1d))
  • 看起来最后一行是TypeError: unsupported operand type(s) for +: 'int' and 'list',因为sumRows 是一个int 而table1d[i] 是一个列表。这不是重点,因为@furas 是对的,sums_in_rows = map(sum, table1d) 是您对行求和的方式,并且您可以在简单地转置数据后以相同的方式对列求和。
  • 将其转换为numpy数组,您将拥有array.sum(axis=0)array.sum(axis=1)和总和array.sum()
  • 是的,我知道这是一个错误,因为我不知道该怎么做 :) 行和列是否相同,所以对于列我会这样做: sums_in_columns = lmap(sum , 表 2d)?如何将其转换为 numpy 数组?

标签: python arrays sum


【解决方案1】:

对于你只需要的行

sums_in_rows = list(map(sum, table1d))

print(sums_in_rows)

对于列,它需要更多

sums_in_columns = [0]*len(table1d[0])  # create list for all results

for row in table1d:
    for c, value in enumerate(row):
        sums_in_columns[c] += value

print(sums_in_columns)

你也可以把它转换成numpy数组然后你就有了

import numpy as np

arr = np.array(table1d)

print('rows:',  arr.sum(axis=1))
print('cols:',  arr.sum(axis=0))
print('total:', arr.sum())

from random import randint

dim1 = input("Insert first dimension: ")
dim1 = int(dim1)

dim2 = input("Insert second dimension: ")
dim2 = int(dim2)

table1d = []
#x = 0
for i in range(dim1):
    table2d = []
    for j in range(dim2):
        table2d.append(randint(1, 170))
        #table2d.append(x)
        #x += 1
    table1d.append(table2d)
print(table1d)

sums_in_rows = list(map(sum, table1d))
print(sums_in_rows)

sums_in_columns = [0]*len(table1d[0])
for row in table1d:
    for c, value in enumerate(row):
        sums_in_columns[c] += value
print(sums_in_columns)

import numpy as np

arr = np.array(table1d)
print(arr.sum(axis=1))
print(arr.sum(axis=0))
print(arr.sum())

【讨论】:

    【解决方案2】:
    import numpy as np
    

    列:

    np.array(table1d).sum(axis=0)
    

    行:

    np.array(table1d).sum(axis=1)
    

    【讨论】:

      【解决方案3】:

      您可以使用列表推导和 sum 函数来获得所需的结果:

      import random
      
      rowCount = 3
      colCount = 5
      
      matrix = [ [random.randint(10,99) for _ in range(colCount)] for _ in range(rowCount) ]
      
      for line in matrix:
          print(line)
      
      for row in range(rowCount):
          print(f"sum row{row} = ",sum(matrix[row]))
      
      for col in range(colCount):
          print(f"sum column{col} = ",sum(row[col] for row in matrix))
      
      
      [90, 62, 86, 19, 13]
      [33, 93, 38, 17, 29]
      [11, 96, 91, 66, 81]
      
      sum row0 =  270
      sum row1 =  210
      sum row2 =  345
      
      sum column0 =  134
      sum column1 =  251
      sum column2 =  215
      sum column3 =  102
      sum column4 =  123
      

      【讨论】:

        【解决方案4】:

        这是一个简单直接的双循环解决方案,如果您想同时计算两个总和。

        container = [[1, 2, 3, 4],
                     [3, 2, 1, 5],
                     [4, 5, 6, 6]]
        rowSum, colSum, i = [0]*len(container), [0]*len(container[0]), 0
        while i < len(container):
            j = 0
            while j < len(container[0]):
                rowSum[i] += container[i][j]
                colSum[j] += container[i][j]
                j += 1
            i += 1
        print(rowSum, colSum)
        

        希望对您有所帮助。 ✌

        【讨论】:

          猜你喜欢
          • 2012-07-20
          • 2017-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-10
          相关资源
          最近更新 更多