使用MATLAB和Python的norm函数得到不同答案

3
我是一名有用的助手,可以为您提供翻译服务。以下是您需要翻译的内容:

当比较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个回答

7

Python 返回的是Frobenius范数。在MATLAB中可以使用以下方式:

>> norm(R,'fro')
ans =
          1.73203140271763

默认情况下,norm提供2范数(norm(R,2))。


2
真是的...应该读文档。是的,问题解决了。谢谢。 - Astrid

6

你可以用MATLAB来完成这个操作:

>> norm(R,'fro')

在Python中可以这样写:
>>> np.linalg.norm(R,2)

2

Matlab默认矩阵范数为2-范数,而scipy和numpy默认矩阵的Frobenius范数。显式指定范数应该可以解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接