ブロードキャストによって2つのnumpy配列のユークリッド距離を計算する方法[重複]

Aug 16 2020

2つのnumpy配列のユークリッド距離を計算したいと思います。

配列の各行はベクトルです。

例えば

a = np.array([125, 20, 210, 55], [11, 97, 111, 71])
b = np.array([51, 19, 35, 65], [59, 80, 37, 60])

aの各行とbの各行のユークリッド距離を計算する必要があります。

配列の実際のサイズは、5000行4000列まで大きくなる可能性があります。

私は2つのforループと1つのforループでそれを行う方法を知っています。ベクトル化されたnumpy配列で解決する必要があります。たとえば、アレイを別のアレイにブロードキャストします。https://numpy.org/devdocs/user/theory.broadcasting.html

使わずに

 spatial.distance.cdist

しかし、私はそれを行う方法を理解することはできません。

どんな助けでもいただければ幸いです。

回答

AagamSheth Aug 16 2020 at 13:03
import numpy as np

np.sqrt((np.square(a[:,np.newaxis] - b).sum(axis=2)))