3

试图在#6 创建的列表的#7 中对角求和。所以说列表是这样[[2,3,1],[1,1,1],[5,6,4]]的,总和是 2+1+4

#6

def randomlists(s):
    b=s
    list1 = []
    while s>0:
        sublist = []
        for x in range(0,b):
            sublist.append(randrange(-100,101))
        list1.append(sublist)
        s-=1
    return list1
#print(randomlists(5))
#7

def diagonalsum(x):
    a=randomlists(x)
    count=0
    print (a)
    for b in a:
        while count<x:
            d=a[0]
            b=a[1]
            c=a[2]
            print (a[(count)])
            count+=1
        return d+b+c
print (diagonalsum(3))
4

3 回答 3

6

假设矩阵是方形的,这是使用循环的标准解决方案:

def diagonalsum(m):
  count = 0
  for i in xrange(0, len(m)):
    count += m[i][i]
  return count

...通过使用生成器表达式和sum函数,可以以更简洁的方式编写:

def diagonalsum(m):
    return sum(m[i][i] for i in xrange(len(m)))
于 2013-04-12T20:36:14.083 回答
2

使用 numpy.trace:http ://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.trace.html 。它返回沿数组对角线的总和。

import numpy as np

M = np.array([[2,3,1],[1,1,1],[5,6,4]])

print(M.trace())

#7
于 2016-01-07T20:00:37.573 回答
0

要获得对角线元素,您需要第一行中的第一个,第二行中的第二个......第 n 行中的第 n 个。

def diagonalsum(x):
    a = randomlists(x)
    return sum(row[i] for i, row in enumerate(a))

使用普通for 循环读取的不太简洁的替代方案

def diagonalsum(x):
    a = randomlists(x)
    result=0
    for i, row in enumerate(a):
        result += row[i]
    return result
于 2013-04-12T20:13:13.167 回答