用Python计算矩阵的对角线之和

用Python计算矩阵的对角线之和

在这篇文章中,我们将学习一个Python程序来有效计算矩阵的对角线之和。

使用的方法

以下是完成这一任务的各种方法

  • 使用嵌套的For循环

  • 只使用单循环

在一个矩阵中,我们有两条对角线,即

  • 主对角线

  • 次对角线

例子

让我们来看看一个3×3的矩阵,如下图所示。

A00 A01 A02 
A10 A11 A12 
A20 A21 A22 

主对角线条件 – 行-列条件是行=列。主对角线是由3×3矩阵中的 A00、A11和A22 元素组成。

次要对角线条件 – 行-列条件是行=行数-列-1。主对角线是由3×3矩阵中的 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循环(Single Loop)返回一个输入矩阵的对角线之和。

# 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)时间复杂度)。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python 教程