簡體   English   中英

(M,N)和(N,)數組之間的距離計算

[英]Distance computation between (M,N) and (N,) arrays

我正在計算python中的歐幾里德距離。 我想學習如何在不使用for循環的情況下計算它。 這是我的代碼,

import numpy as np
import random
A = np.random.randint(5, size=(10, 5))
B = [1, 3, 5, 2, 4]
for i in range(10):
    dist = np.linalg.norm(A[i]-B)
    print("Distances: ", dist)

無論如何,我可以使用高級索引或任何其他技術來計算距離而不使用for循環? 謝謝。

方法#1:大多數直截了當的np.linalg.norm使用其axis參數並利用broadcasting將是 -

np.linalg.norm(A-B,axis=1)

方法#2:使用einsum -

subs = A - B
out = np.sqrt(np.einsum('ij,ij->i',subs,subs))

方法#3:使用(ab)^2 = a^2 + b^2 - 2ab公式利用與np.dotnp.inner matrix-multiplication -

np.sqrt(np.einsum('ij,ij->i',A, A) + np.inner(B,B) - 2*A.dot(B))

您可以明確地計算Frobenius規范

res = (np.abs(A - B)**2).sum(1)**0.5

這是np.linalg.norm的默認值。 這是一個演示:

np.random.seed(0)
A = np.random.randint(5, size=(10, 5))
B = [1, 3, 5, 2, 4]

res = (np.abs(A - B)**2).sum(1)**0.5

array([4.89897949, 5.38516481, 5.29150262, 5.47722558, 5.        ,
       5.56776436, 6.244998  , 2.23606798, 5.56776436, 4.47213595])

暫無
暫無

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

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