np.linalg.norm ord=2 不给出欧几里得范数

han*_*ist 6 python numpy

我正在尝试计算两个矩阵之间的欧几里得距离,我希望它由逐元素平方差之和的平方根给出。

在我看来,这正是由 numpy 的linalg.norm函数计算的计算,但它似乎与我的预期结果不符。

例如,此代码返回不同的值(5.385vs 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))
Run Code Online (Sandbox Code Playgroud)

我是否误解了linalg.norm函数?为什么上述两种计算方法返回的值不相同?

sam*_*dio 6

从我在 的 DocString 中看到的np.linalg.norm,看起来对于 dim>2 的数组,它采用 的最大奇异值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())
Run Code Online (Sandbox Code Playgroud)

这将返回5.385,,5.3395.339

维基百科上给出了数学公式,其中区分了 2-范数(即ord=2)和 Frobenius 范数(ord=None)。

  • 其实我也是。我很高兴你问这个问题,因为我也学到了一些东西。 (2认同)