def getMatrixMinor(m,i,j):
return [row[:j] + row[j+1:] for row in (m[:i]+m[i+1:])]
以上是我在堆栈溢出中找到的代码,用于查找矩阵的逆,但是,我真的是python的新手。有人可以解释使用此代码来构造未成年人矩阵的背后机制吗?
顺便说一句,我已经使用了这段代码并且可以正常工作,但是我只是不明白它是如何工作的。
答案 0 :(得分:0)
该函数非常简单,用于计算第一个次要矩阵。假设您有一个大小为m x m
的平方矩阵,并且要计算位置(i,j)
处的第一个次要矩阵,该怎么办?您必须通过删除行(m-1) x (m-1)
-th 和列i
- th <,从原始矩阵中提取大小为j
的较小矩阵。 / em>,由功能完成。
具体来说,m[:i]+m[i+1:]
删除第i
- 行,并创建剩余行的新列表。对于此列表中的每一行,该函数都删除元素row[j]
。函数的输出是代表相应次要矩阵的列表(行)列表。
我建议您看看Python list comprehension和list slicing。
答案 1 :(得分:0)
让我们从(i,j)th
矩阵的次要矩阵的定义开始:
(i,j)th
尺寸为n
的矩阵的次要元素是尺寸为n-1
的较小矩阵,其中删除了i'th
行和j'th
列。
现在让我们来看一下这条python内衬:
[row for row in (m[:i] + m[i+1:])]
m[:i]
给出i
的前m
行(请记住,我们将矩阵表示为行列表,并且添加两个列表将在python中返回更大的列表),现在让我们看看另一种衬板:
row[:j] + row[j+1:]
这为我们提供了行中除j'th
元素以外的所有元素(lst [a:b]给出了一个列表,其中包含lst
和a
之间的b
元素,其中不包括b
)
将以上两个结合在一起,您将得到一个返回a new matrix with i'th row and j'th column excluded
的表达式:
def getMatrixMinor(m,i,j):
return [row[:j] + row[j+1:] for row in (m[:i]+m[i+1:])]
哪个是次要矩阵。
答案 2 :(得分:0)
也许它对某人有用,只是想与我的工作解决方案分享,任何建设性的批评都是可以接受的
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)]
答案 3 :(得分:-1)
# 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.