![](/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.