![](/img/trans.png)
[英]what's the difference between np.linalg.norm(a-x) and np.linalg.norm(a) - np.linalg.norm(x)?
[英]np.linalg.norm ord=2 not giving Euclidean norm
我正在尝试计算两个矩阵之间的欧几里得距离,我希望它由元素平方差的平方和的平方根给出。
在我看来,这正是 numpy 的linalg.norm function 计算的结果,但它似乎与我的预期结果不符。
例如,此代码返回不同的值( 5.385
vs 5.339
)
import numpy as np
a = np.arange(6).reshape(2, 3)
b = np.array([[1,2,3], [-1,1,4]])
print(np.sqrt(np.sum(np.square(a-b))))
print(np.linalg.norm(a-b, 2))
我是否误解了linalg.norm function? 为什么上述两种计算方法没有返回相同的值?
从我在 np.linalg.norm 的np.linalg.norm
中可以看到,对于 Dim>2 的 arrays 来说,它采用ord=2
的最大奇异值,这意味着np.linalg.norm(a, ord=2)
是与np.linalg.svd(a)[1].max()
相同。 所以在你的情况下,这将是:
print(np.sqrt(np.sum(np.square(a-b))))
print(np.linalg.norm(a-b, 2))
print(np.linalg.svd(a-b)[1].max())
这将返回5.385
、 5.339
、 5.339
。
Wikipedia 上给出了数学公式,其中区分了 2 范数(即ord=2
)和 Frobenius 范数( ord=None
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.