簡體   English   中英

np.linalg.norm ord=2 不給出歐幾里得范數

[英]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.3855.3395.339

Wikipedia 上給出了數學公式,其中區分了 2 范數(即ord=2 )和 Frobenius 范數( ord=None )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM