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