2016-02-07 94 views
8

我想要找出矩陣中對角線元素的總和。這裏,n是方陣的大小,a是矩陣。有人可以向我解釋這裏發生了什麼。矩陣中對角線元素的總和

n = 3 
a = [[11,2,4],[4,5,6],[10,8,-12]] 
sum_first_diagonal = sum(a[i][i] for i in range(n)) 
sum_second_diagonal = sum(a[n-i-1][n-i-1] for i in range(n)) 
print(str(sum_first_diagonal)+" "+str(sum_first_diagonal)) 
+0

您從頂部總結相同對角線兩次,一次是從左上到右下和然後反過來。我不相信這個代碼片段可以在任何Python安裝中打印「4 4」以外的任何東西。 –

回答

4

嘗試此總結您的第二傾斜:

sum(a[i][n-i-1] for i in range(n)) 

內環訪問這些條目:

>>> n = 3 
>>> [(i, n-i-1) for i in range(n)] 
[(0, 2), (1, 1), (2, 0)] 

這對角線爲您的樣品基體的總和值:

>>> n = 3 
>>> sum(a[i][n-i-1] for i in range(n)) 
19 

在你的代碼中的錯誤是使用相同的表達式爲兩個維度:

a[n-i-1][n-i-1] 

將按照相反的順序[(2, 2), (1, 1), (0, 0)]再次處理的第一對角給你兩次相同的總和。

6

使用numpy庫是強大的任何矩陣計算。對於您的特定情況:

import numpy as np 
a = [[11,2,4],[4,5,6],[10,8,-12]] 
b = np.asarray(a) 
print 'Diagonal (sum): ', np.trace(b) 
print 'Diagonal (elements): ', np.diagonal(b) 

您可以使用點或其他方式輕鬆安裝numpy,您可以在許多網站上找到它。

如果你想要所有的對角線,而不僅僅是主對角線,檢查this也使用numpy。

編輯

mhawke,如果要計算antidiagonal(次對角線),如wikipedia解釋,您可以翻轉的numpy的

import numpy as np 
a = [[11,2,4],[4,5,6],[10,8,-12]] 
b = np.asarray(a) 
b = np.fliplr(b) 
print 'Antidiagonal (sum): ', np.trace(b) 
print 'Antidiagonal (elements): ', np.diagonal(b) 
+0

我認爲OP無法使用'numpy',因爲他們將代碼提交給不允許'numpy'的在線裁判。第二對角線是如何計算的? – mhawke

0

矩陣試試這個:

n=3 
sum_second_diagonal=sum([a[i][j] for i in range(n) for j in range(n) if i+j==n-1]) 
0

由於您知道行i的對角線元素的位置,因此您可以將其寫成qui TE密集,如:

d = sum(row[i] + row[-1-i] for i, row in a) 

而且,以奇數矩陣,你不應該添加兩倍於中心元素:

if len(a)%2: 
    centre = len(a)//2 
    d -= a[centre][centre]