(M,N)和(N,)阵列之间的距离计算

时间:2018-10-27 18:20:53

标签: python python-3.x numpy vectorization

我正在用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循环的情况下,我可以使用高级索引或任何其他技术来计算距离吗?谢谢。

2 个答案:

答案 0 :(得分:1)

方法#1:最简单的方法是使用np.linalg.norm的{​​{1}}参数并同时利用axis的方法-

broadcasting

方法2:使用np.linalg.norm(A-B,axis=1) -

einsum

方法3::使用subs = A - B out = np.sqrt(np.einsum('ij,ij->i',subs,subs)) 公式将(a-b)^2 = a^2 + b^2 - 2abmatrix-multiplicationnp.dot一起使用-

np.inner

答案 1 :(得分:1)

您可以显式计算Frobenius Norm

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])
相关问题