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