def getMatrixMinor(m,i,j):
return [row[:j] + row[j+1:] for row in (m[:i]+m[i+1:])]
以下是我在Stack Overflow上找到的代码,用于查找矩阵的逆。然而,我对Python非常陌生。有人能解释一下使用此代码构建子矩阵的机制吗?
顺便说一句,我已经使用了这个代码,它可以工作,但我不明白它是如何工作的。
def getMatrixMinor(m,i,j):
return [row[:j] + row[j+1:] for row in (m[:i]+m[i+1:])]
让我们从矩阵的(i,j)次小矩阵的定义开始:
矩阵大小为
n
的(i,j)次小矩阵是一个大小为n-1
的较小矩阵,其中删除了第i
行和第j
列。
现在让我们看一下这个Python一行代码:
[row for row in (m[:i] + m[i+1:])]
m[:i]
给出矩阵 m
的前 i
行(请记住我们将矩阵表示为行的列表,并且在 Python 中,两个列表相加会得到一个更大的列表),现在让我们看另一个一行代码:
row[:j] + row[j+1:]
这给了我们一行中除了第j
个元素之外的所有元素(lst[a:b]
返回一个列表,其中包含lst
中在a
和b
之间的元素,不包括b
)
将上述两个组合起来,您将得到一个表达式,该表达式返回一个新矩阵,其中排除了第i行和第j列
:
def getMatrixMinor(m,i,j):
return [row[:j] + row[j+1:] for row in (m[:i]+m[i+1:])]
哪个是次要矩阵。
也许对某些人会有用,我想与你分享我的工作解决方案,欢迎任何建设性的批评。
def getMatrixMinor(arr,i,j):
c = arr[:]
c = np.delete(c, (i),axis=0)
return [np.delete(row, (j),axis=0) for row in (c)]
# Finding minors of a matrix and it's determinant
import numpy as np
from numpy import *
n = 4
arr = random.randint(0,10,(n,n))
print(arr)
def getMatrixMinor(arr,i,j):
c = arr[:]
c_r = np.delete(c, (i),axis=0) # deletes i-th row
c_c = np.delete(c_r, (j),axis=1) #deletes j-th column
return c_c
gmm = getMatrixMinor(arr,2,2)
print("gmm = \n",gmm)
d = linalg.det(gmm)
print("d =",d)
[[6 3 4 6]
[0 8 5 2]
[2 9 6 3]
[6 5 2 1]]
gmm =
[[6 3 6]
[0 8 2]
[6 5 1]]
d = -263.99999999999994,
Thanks GoAI, mine is a slight change from your answer.