MATLAB和Python的norm函数返回不同结果
我在比较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
我到底是怎么把这个搞得这么糟糕的呢?
3 个回答
2
在Matlab中,默认的矩阵范数是2范数,而在scipy和numpy中,默认的是Frobenius范数。你可以明确指定你想要的范数,这样就能解决这个问题。
7
你可以在MATLAB里这样做:
>> norm(R,'fro')
或者在Python里这样做:
>>> np.linalg.norm(R,2)
8
Python 返回的是 Frobenius 范数。你可以在 MATLAB 中用以下方式做到这一点:
>> norm(R,'fro')
ans =
1.73203140271763
默认情况下,norm
函数会给出 2 范数(norm(R,2)
)。