Python程序 检查隐含矩阵
在这篇文章中,我们将学习一个Python程序来检查渐开线矩阵。
假设我们有一个 输入矩阵。 现在我们将使用下面的方法来检查输入矩阵是否是一个 隐式矩阵 。
使用的方法
以下是完成这一任务的各种方法
- 使用嵌套的For Loop
-
使用NumPy模块
什么是隐性矩阵?
如果一个矩阵与自己相乘,并给出了相同的矩阵,那么它被称为是一个渐开线矩阵。作为它的逆矩阵就是 渐开线矩阵。
如果 A * A = I, 矩阵A被称为离散矩阵。这里的I代表 单位矩阵。
方法1:使用嵌套的For循环
算法(步骤)
以下是执行所需任务时需要遵循的算法/步骤。-
- 创建一个变量来存储矩阵的行数。
-
创建一个函数 multiplyMatrix() ,通过接受输入矩阵来执行矩阵乘法。
-
执行矩阵乘法。
-
使用 return 语句来返回矩阵乘法的结果输出。
-
创建一个函数 checkInvolutoryMat() ,通过接受输入矩阵作为参数来检查输入矩阵是否为 非自愿 矩阵。
-
创建一个 行*行 大小的矩阵,所有元素都是0,并将其存储为 outputMatrix。
-
调用上述 multiplyMatrix() 函数来执行矩阵乘法,并将结果保存在上述outputMatrix变量中。
-
遍历outputMatrix的每个元素。
-
使用if条件语句检查对角线元素是否为1,如果为真,则返回False,即不是一个非自愿矩阵。
-
使用if条件语句检查非对角线元素是否为0,如果为真,则返回False,即不是非自愿矩阵。
-
创建一个变量来存储 输入矩阵。
-
使用if条件语句来检查上述定义的 checkInvolutoryMat() 函数是否以输入矩阵为参数返回真。
-
如果条件为真,则打印一个 非自愿矩阵 。
-
否则打印非非自愿矩阵
例子
下面的程序使用嵌套的for循环来检查输入矩阵是否为非自愿矩阵:
# input no of rows
rows = 3
# creating a function to perform matrix multiplication
def multiplyMatrix(inputMatrix, output):
# traversing through the rows of a matrix
for p in range(rows):
# traversing through all the columns of a current row
for q in range(rows):
# assuming the current element is 0
output[p][q] = 0
for x in range(rows):
# performing matrix multiplication
output[p][q] += inputMatrix[p][x] * inputMatrix[x][q]
# returning the resultant matrix multiplication output
return output
# creating a function to check whether the input matrix
# is an involuntary matrix by accepting matrix as an argument
def checkInvolutoryMat(inputMatrix):
# Creating a rows*rows size matrix with all elements as 0
output = [[0 for p in range(rows)]
for q in range(rows)]
# calling the above multiplyMatrix() function
output = multiplyMatrix(inputMatrix, output)
# Iterating in the rows of the output matrix
for p in range(rows):
# Iterating in the diagonals of the output matrix
for q in range(rows):
# If it is a diagonal element and if it is not 1 then return False(Not Involuntary)
if (p == q and output[p][q] != 1):
return False
# If it is a non-diagonal element and if it is not 1 then return False(Not Involuntary)
if (p != q and output[p][q] != 0):
return False
# It is an involuntary matrix so return True
return True
# input matrix
inputMatrix = [[1, 0, 0], [0, -1, 0], [0, 0, -1]]
# checking whether the above checkInvolutoryMat() function returns true
# by passing the input matrix as an argument
if (checkInvolutoryMat(inputMatrix)):
# printing involuntary matrix if the condition is true
print("The input matrix is an Involutory matrix")
else:
# else printing NOT involuntary matrix
print("The input matrix is NOT an Involutory matrix")
输出
The input matrix is an Involutory matrix
时间复杂度 – O(N^3)
辅助空间 – O(N^2)
方法2:使用NumPy模块
利用numpy库是确定矩阵是否为渐进式的另一种方法。这可以通过使用 numpy.allclose() 函数将矩阵与它的逆向进行比较来实现。
算法(步骤)
以下是执行所需任务时需要遵循的算法/步骤。-
- 使用import关键字来导入 numpy 模块。
-
创建一个函数 checkInvolutoryMat() ,通过接受输入矩阵作为参数来检查输入矩阵是否为 非自愿 矩阵。
-
使用 numpy.linalg.inv() 函数(计算矩阵的逆值)来获得输入矩阵的逆值。
-
使用 numpy.allclose() 函数,通过传递输入矩阵和其逆矩阵作为参数,检查输入矩阵是否等于其逆矩阵,并返回结果。
-
如果两个数组的元素在一个 公差 范围内相等 , allclose() 函数将返回True。
-
容差值 是正的,并且经常有非常小的值。
例子
下面的程序使用numpy.linalg.inv(), numpy.allclose()函数检查输入矩阵是否为非自愿矩阵。
# using the numpy module
import numpy as np
# creating a function to check whether the input matrix
# is an involuntary matrix by accepting matrix as an argument
def checkInvolutoryMat(inputMatrix):
# Getting the inverse of an input matrix using the numpy linalg module
inverseMat = np.linalg.inv(inputMatrix)
# checking whether the input matrix is equal to its inverse matrix
# using the numpy.allclose() function and returning the result
return np.allclose(inputMatrix, inverseMat)
# input matrix
inputMatrix = [[1, 0, 0], [0, -1, 0], [0, 0, -1]]
# calling the checkInvolutoryMat() function by passing the input matrix as an argument
# The output True indicates an INVOLUNTARY matrix
print(checkInvolutoryMat(inputMatrix))
输出
True
在上面的例子中,输出 True 表示给定的输入矩阵是一个非自愿矩阵。
这种方法利用了numpy的优化 线性代数 例程,其优点是更短,更容易理解。这种方法的时间复杂度取决于矩阵逆向计算的复杂度,对于密集的矩阵,其复杂度通常为O(N^3)。空间复杂度为O(N^2)。
时间复杂度 – O(N^3)
空间复杂 度 – O(N^2)
总结
在这篇文章中,我们学习了如何使用两种不同的方法来确定一个给定的矩阵是否是非自愿的。我们学习了如何利用NumPy模块的linalg.inv()函数来获取一个给定矩阵的逆值。