Numpy 行替换行列式的高效计算

Numpy 行替换行列式的高效计算,numpy,determinants,Numpy,Determinants,设M_i(X)为二次nXn-矩阵M,其中i-第四行替换为向量X。对于许多不同的X,我想用I=1..n有效地计算mi(X)的行列式。 det(M_i(X))的结果是X中的一个线性表达式,因此我只需要X中每个元素的因子就可以有效地计算出许多不同的X 利用莱布尼茨对行列式的展开,我得出了以下代码片段,它产生了预期的结果,但效率太低了result是每行i的因子矩阵 import math, numpy as np def permutations(n: int, items = None):

M_i(X)
为二次
n
X
n
-矩阵
M
,其中
i
-第四行替换为向量
X
。对于许多不同的
X
,我想用
I=1..n
有效地计算
mi(X)
的行列式。
det(M_i(X))
的结果是
X
中的一个线性表达式,因此我只需要
X
中每个元素的因子就可以有效地计算出许多不同的
X

利用莱布尼茨对行列式的展开,我得出了以下代码片段,它产生了预期的结果,但效率太低了
result
是每行
i
的因子矩阵

import math, numpy as np

def permutations(n: int, items = None):
    "generate all permutations using Heap's algorithm"
    if items == None:
        items = [i for i in range(n)]
    stack = [0] * n
    sign = 1
    yield items, sign
    i = 0
    while i < n:
        if stack[i] < i:
            j = stack[i] if i & 1 else 0
            items[i], items[j] = items[j], items[i]
            sign *= -1
            yield items, sign
            stack[i] += 1
            i = 0
        else:
            stack[i] = 0
            i += 1

n = 7
np.random.seed(1)
M = np.random.rand(n,n)
result = np.zeros((n,n))
for i in range(n):
    for p, sign in permutations(n):
        f = math.prod(M[k, j] for k,j in enumerate(p) if k != i)
        result[i,p[i]] += sign * f
print(result)
导入数学,numpy作为np
def排列(n:int,items=None):
“使用堆的算法生成所有排列”
如果项目==无:
项目=[i代表范围内的i(n)]
堆栈=[0]*n
符号=1
交出物品、签名
i=0
而i
我假设有一个直接的数学公式