我想在python中计算矩阵的行和列总和;但是,由于信息安全要求,我无法使用任何外部库。因此,为了创建矩阵,我使用了一个列表列表,如下所示:
matrix = [[0 for x in range(5)] for y in range(5)]
for pos in range(5):
matrix[pos][pos]=1
matrix[2][2]= 0
现在我要做的是执行矩阵的rowum和column sum。我知道如何进行总和,这很容易:
sum(matrix[0])
但是如果我想进行列总和怎么办?除了通过for循环,la
强制强行实现之外,还有其他更优雅,更pythonic的方式来实现这一点sumval = 0
for pos in range(len(matrix[0])):
sumval = matrix[pos][0] + sumval
这可以工作,但根本不是pythonic。
有人可以帮我吗?
答案 0 :(得分:3)
colsum = sum(row[0] for row in matrix)
不过,对于其他关注此问题的人来说,这确实是numpy
最好的任务。但是,OP不允许使用外部库。
答案 1 :(得分:2)
我建议:
s = 0
for row in matrix:
s += row[0]
与您所做的相同,但可读性更高。
使用类似的东西
s = sum([row[0] for row in matrix])
也是可读的,但速度较慢,因为您需要执行一次传递来收集row [0]元素,然后进行第二次求和。
答案 2 :(得分:1)
您可以使用:
sum([matrix[i][0] for i in range(len(matrix[0]))])
答案 3 :(得分:0)
我可以建议定义一种按行计算总和的方法,该方法返回总和列表:
def sum_rows(matrix):
return [sum(row) for row in matrix]
然后定义一个在转置矩阵上调用sum_rows(matrix)的方法:
def sum_cols(matrix):
return sum_rows(map(list, zip(*matrix)))
用于转置矩阵:Transpose list of lists
替代的转置:
def sum_cols_alt(matrix):
return [ sum(row[i] for row in matrix) for i, _ in enumerate(matrix) ]