使用 Python 計算矩陣對角線之和


在本文中,我們將學習一個 Python 程式,以有效地計算矩陣對角線的和。

使用的方法

以下是完成此任務的各種方法 -

  • 使用巢狀 For 迴圈

  • 僅使用單個迴圈

在矩陣中,我們有兩個對角線 -

  • 主對角線

  • 副對角線

示例

讓我們以一個 3x3 矩陣為例,如下所示 -

A00 A01 A02 
A10 A11 A12 
A20 A21 A22 

主對角線條件 - 行列條件為行 = 列。在 3x3 矩陣中,主對角線由A00、A11 和 A22元素構成。

副對角線條件 - 行列條件為行 = 行數 – 列 -1。在 3x3 矩陣中,主對角線由A02、A11 和 A22元素構成。

方法 1:使用巢狀 For 迴圈

演算法(步驟)

以下是執行所需任務的演算法/步驟。-

  • 建立一個函式sumOfDiagonals(),透過接受輸入矩陣和行數作為引數來列印矩陣對角線的和。

  • 初始化一個變數為 0,以儲存主對角線之和。

  • 初始化另一個變數為 0,以儲存副對角線之和。

  • 使用for 迴圈遍歷矩陣的行。

  • 使用另一個巢狀 for 迴圈,遍歷當前行的所有列。

  • 使用if 條件語句檢查行號是否等於列號(主對角線條件),如果為真,則將矩陣元素值新增到主對角線之和。

  • 同樣地,使用if 條件語句檢查行號列號是否等於行數(副對角線條件),如果為真,則將矩陣元素值新增到副對角線之和。

  • 列印輸入矩陣對角線元素的最終和。

  • 列印輸入矩陣對角線元素的最終和。

  • 建立一個變數來儲存輸入矩陣。

  • 透過傳遞輸入矩陣和行數(維度)作為引數,呼叫上面定義的sumOfDiagonals()函式,以列印對角線的和。

示例

以下程式使用巢狀 for 迴圈返回輸入矩陣的對角線之和 -

# creating a function to print the sum of diagonals
# of a matrix by accepting input matrix, rows as arguments
def sumOfDiagonals(inputMatrix, rows):
   # Initializing with 0 to store the principal diagonal sum
      principal_diag = 0
   # Initializing with 0 to store the secondary diagonal sum
      secondary_diag = 0
   # Traversing through the rows of a matrix
      for p in range(0, rows):
         # Traversing through the columns of the current row
            for q in range(0, rows):
            # Principal diagonal condition
               if (p == q):
                  principal_diag += inputMatrix[p][q]
            # Secondary diagonal condition(row -1 because index starts from 0)
            if ((p + q) == (rows - 1)):
                  secondary_diag += inputMatrix[p][q]
      # Printing the sum of principal diagonal elements
      print("Sum of principal diagonal elements:", principal_diag)
      # Printing the sum of secondary diagonal elements
      print("Sum of secondary diagonal elements:", secondary_diag)
# input matrix(3x3 matrix)
inputMatrix = [[5, 1, 3],
               [9, 6, 8],
               [4, 2, 7]]
rows = 3
print("Given Matrix is:")
# traversing through the rows of a matrix
for p in range(rows):
   # Traversing through the columns of a current row
      for q in range(rows):
         # printing the corresponding element at the current row and column of the matrix
         print(inputMatrix[p][q], end=" ")
      # Printing a new line
      print()
# calling sumOfDiagonals() function by passing input matrix
# and no of rows(dimensions) to it
sumOfDiagonals(inputMatrix, rows)

輸出

執行上述程式後,將生成以下輸出 -

Given Matrix is:
5 1 3 
9 6 8 
4 2 7 
Sum of principal diagonal elements: 18
Sum of secondary diagonal elements: 13

時間複雜度 - O(N*N),因為我們使用了巢狀迴圈遍歷 N*N 次。

輔助空間 - O(1)。因為我們沒有使用任何額外的空間。

方法 2:僅使用單個迴圈

示例

以下程式僅使用一個 for 迴圈(單個迴圈)返回輸入矩陣的對角線之和 -

# Creating a function to print the sum of diagonals
# of a matrix by accepting input matrix, rows as arguments
def sumOfDiagonals(inputMatrix, rows):
   # Initializing with 0 to store the principal diagonal sum
      principal_diag = 0
   # Initializing with 0 to store the secondary diagonal sum
      secondary_diag = 0
   # Traversing the rows of a matrix
      for p in range(0, rows):
         # Adding the principal Diagonal element of the current row
         principal_diag += inputMatrix[p][p]
         # Adding the secondary Diagonal element of the current row
         secondary_diag += inputMatrix[p][rows - p - 1]
      # printing the sum of principal diagonal elements
      print("Sum of principal diagonal elements:", principal_diag)
   # printing the sum of secondary diagonal elements
      print("Sum of secondary diagonal elements:", secondary_diag)
# input matrix(3x3 matrix)
inputMatrix = [[5, 1, 3],
               [9, 6, 8],
               [4, 2, 7]]
rows = 3
print("The Given Matrix is:")
# traversing through the rows of a matrix
for p in range(rows):
   # Traversing through the columns of a current row
      for q in range(rows):
         # printing the corresponding element at the current row and column of the matrix
         print(inputMatrix[p][q], end=" ")
      # Printing a new line
      print()
# calling sumOfDiagonals() function by passing input matrix
# and no of rows(dimensions) to it
sumOfDiagonals(inputMatrix, rows)

輸出

執行上述程式後,將生成以下輸出 -

Given Matrix is:
5 1 3 
9 6 8 
4 2 7 
Sum of principal diagonal elements: 18
Sum of secondary diagonal elements: 13

時間複雜度 - O(N)。因為我們使用了迴圈遍歷 N 次。

輔助空間 - O(1)。因為我們沒有使用任何額外的空間。

結論

在本文中,我們學習了矩陣對角線以及計算矩陣對角線(主對角線和副對角線)之和的兩種不同方法。我們學習了一種有效的計算方法,該方法只需要遍歷一次矩陣(O(N) 時間複雜度)。

更新於: 2023年1月23日

2K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.