我必须解决Ax = b。我相信python库在确定的系统/超定方程式下求解是不同的。 在python中是否有一个库函数,它将从矩阵中删除相关的行/列,以便从矩阵的秩中我可以适当地求解方程
答案 0 :(得分:2)
您可以使用A的pseudoinverse矩阵表示为A + 。当且仅当AA + b = b且所有解都由下式给出时,存在一种解决方案 x = A + b +(I - A + A)* u
这可以使用numpy.linalg
完成示例:
>>> A = np.array([[1, 2, 3], [4, 5, 6],[8, 10, 12]])
>>> b = np.array([22., 7., 14.])
>>> Ap = np.linalg.pinv(A)
# Check if a solution exist
>>> np.testing.assert_allclose(A.dot(Ap).dot(b),b,rtol=1e-5, atol=0)
>>> x = Ap.dot(b)
>>> print A.dot(x)
[ 22., 7., 14.]
或者你可以使用numpy.linalg.lstsq
示例:
>>> A = np.array([[1, 2, 3], [4, 5, 6],[8, 10, 12]])
>>> b = np.array([22., 7., 14.])
>>> x = np.linalg.lstsq(A,b)[0]
>>> print np.dot(A,x)
[ 22., 7., 14.]
答案 1 :(得分:1)
您可以使用numpy
进行科学计算。 E.g:
In [23]: import numpy as np
In [24]: a=np.arange(16).reshape((4,4))
In [25]: a
Out[25]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
In [26]: np.delete(a, 2, axis=1) #delete the 3rd column
Out[26]:
array([[ 0, 1, 3],
[ 4, 5, 7],
[ 8, 9, 11],
[12, 13, 15]])
In [27]: np.rank(a) #this returns the number of dimensions of an array,
#not the concept "rank" in linear algebra,
Out[27]: 2
In [40]: np.linalg.matrix_rank(a) #this returns matrix rank of array using SVD method
Out[40]: 2
在Windows上,您可以获得unofficial installer here。