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
Xn
-矩阵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
我假设有一个直接的数学公式