在python中找到次要矩阵

时间:2018-12-26 16:12:56

标签: python matrix

def getMatrixMinor(m,i,j):
    return [row[:j] + row[j+1:] for row in (m[:i]+m[i+1:])]

以上是我在堆栈溢出中找到的代码,用于查找矩阵的逆,但是,我真的是python的新手。有人可以解释使用此代码来构造未成年人矩阵的背后机制吗?

顺便说一句,我已经使用了这段代码并且可以正常工作,但是我只是不明白它是如何工作的。

4 个答案:

答案 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 comprehensionlist 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]给出了一个列表,其中包含lsta之间的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.