在比较MATLAB和Python函数时,关于简单矩阵规范,我得到了两个截然不同的答案。
让
R =
0.9940 0.0773 -0.0773
-0.0713 0.9945 0.0769
0.0828 -0.0709 0.9940
然后在MATLAB中:
>> norm(R)
ans =
1
但是在Python中
from scipy.linalg import norm
import numpy as np
print norm(R),np.linalg.norm(R)
1.73205080757 1.73205080757
,其中
print scipy.__version__,np.__version__
0.14.0 1.9.0
我是如何全面搞砸的呢?
答案 0 :(得分:5)
Python正在返回Frobenius规范。您可以在MATLAB中执行以下操作:
>> norm(R,'fro')
ans =
1.73203140271763
默认情况下,norm
给出2范数(norm(R,2)
)。
答案 1 :(得分:5)
要么在MATLAB中执行此操作:
>> norm(R,'fro')
或Python中的这个:
>>> np.linalg.norm(R,2)
答案 2 :(得分:2)
矩阵范数的Matlab默认值是2范数,而scipy和numpy默认为矩阵的Frobenius范数。明确指定规范应该为你解决