【发布时间】:2022-11-21 22:22:14
【问题描述】:
我有以下函数计算 Matrix A 和 Matrix B 中所有向量组合之间的欧氏距离
def distance_matrix(A,B):
n=A.shape[1]
m=B.shape[1]
C=np.zeros((n,m))
for ai, a in enumerate(A.T):
for bi, b in enumerate(B.T):
C[ai][bi]=np.linalg.norm(a-b)
return C
这很好用,并从 d*n-Matrix 和 d*m-Matrix 创建了一个 n*m-Matrix,其中包含列向量的所有组合之间的欧几里得距离。
>>> print(A)
[[-1 -1 1 1 2]
[ 1 -1 2 -1 1]]
>>> print(B)
[[-2 -1 1 2]
[-1 2 1 -1]]
>>> print(distance_matrix(A,B))
[[2.23606798 1. 2. 3.60555128]
[1. 3. 2.82842712 3. ]
[4.24264069 2. 1. 3.16227766]
[3. 3.60555128 2. 1. ]
[4.47213595 3.16227766 1. 2. ]]
我花了一些时间寻找 numpy 或 scipy 函数以更有效的方式实现这一点。有没有这样的功能或者这样做的矢量化方式是什么?
【问题讨论】:
标签: python numpy matrix scipy euclidean-distance