python中的线性代数(部分)求解



我有一个字典,元组作为键,结果作为值。我正在寻找一种";解决";尽可能多的键,即使不可能";解决";所有这些。

input : {(A, C):1,(A, B, C): 1}
output : {(A, C):1, (A, B, C): 1, B:0}

换句话说:

modified input : 
1*A + 0*B + 1*C = 1
1*A + 1*B + 1*C = 1
output :
A = ?
B = 0
C = ?

我只能使用numpy和scipy。

我试过这个,但它一定是正方形矩阵:

import numpy as np
a = np.array([[1, 0, 1], [1, 1, 1]])
b = np.array([1, 1])
from scipy import linalg
x = linalg.solve(a, b)
print(x)

你有我应该看的地方的想法吗?

这段代码很有用,但它不是很"干净"的

import numpy as np
A=np.array([[1, 0, 1], [1, 1, 1]])
B=np.array([1,1])
s = solutionNonSquare = np.linalg.lstsq(A, B)[0]
for i,val in enumerate(s):
if val < 0.0001:
print('x[',i,'] = 0')
else:
print('x[',i,'] = ?')
print(s)

非常感谢你的聪明

矩阵a是非平方矩阵,因此它不具有全秩。然而,我们可以使用np.linalg.pinv计算伪逆,然后我们可以计算x = np.matmul(a_psudo_inv, b)

import numpy as np
a = np.array([[1, 0, 1], [1, 1, 1]])
b = np.array([1, 1])
from numpy import linalg

a_psudo_inv = np.linalg.pinv(a)
print(a_psudo_inv)
print(a_psudo_inv.shape)
x = np.matmul(a_psudo_inv, b)
print(x)

溶液>> [5.00000000e-01 5.55111512e-16 5.00000000e-01]

最新更新