Hoo*_*ked 40 python numpy matrix scipy
我想用scipy 计算矩阵的数学等级.最明显的函数numpy.rank计算数组的维数(即标量有维度0,向量1,矩阵2等).我知道该numpy.linalg.lstsq模块具有此功能,但我想知道这样的基本操作是否内置于矩阵类中.
这是一个明确的例子:
from numpy import matrix, rank
A = matrix([[1,3,7],[2,8,3],[7,8,1]])
print rank(A)
Run Code Online (Sandbox Code Playgroud)
这给出2了维度,我正在寻找答案3.
Sim*_*mon 55
Numpy提供numpy.linalg.matrix_rank():
>>> import numpy
>>> numpy.__version__
'1.5.1'
>>> A = numpy.matrix([[1,3,7],[2,8,3],[7,8,1]])
>>> numpy.linalg.matrix_rank(A)
3
Run Code Online (Sandbox Code Playgroud)
Ste*_*alt 14
为需要在实践中完成此操作的人提供粗略的代码段.随意改进.
u, s, v = np.linalg.svd(A)
rank = np.sum(s > 1e-10)
Run Code Online (Sandbox Code Playgroud)
如果numpy没有提供等级设施,你为什么不自己编写?
计算秩的有效方法是通过奇异值分解 - 矩阵的秩等于非零奇异值的数量.
def rank(A, eps=1e-12):
u, s, vh = numpy.linalg.svd(A)
return len([x for x in s if abs(x) > eps])
Run Code Online (Sandbox Code Playgroud)
请注意,eps取决于您的应用程序 - 大多数人会同意1e-12对应于零,但即使对于eps = 1e-9,您也可能会看到数值不稳定.
使用您的示例,答案是三个.如果将第二行更改为[2, 6, 14](与第一行线性相关),则答案为2("零"特征值为4.9960E-16)