MATLAB和Python的norm函数返回不同结果

4 投票
3 回答
5831 浏览
提问于 2025-04-30 22:05

我在比较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))。

撰写回答