python 中数组的成对减法

pairwise subtraction of arrays in python

我有两个矩阵,形状为 512*3 的 A 和形状为 1024*3 的 B 我想计算它们的行之间的成对减法,所以结果的形状是 512*1024*3

(它们实际上是 3D 点坐标数组:x、y、z,我最终想找到从 B 到 A 中每个点的 k 个最近点)

而且我不能使用 for 循环。有什么 pythonic 方法可以做到这一点吗? 谢谢你

区别:

diff = A[:, np.newaxis] - B[np.newaxis, :]

对于 A 中的每个点,B 中最近的 k 点:

k = 5
dists = np.sum(np.square(A[:, np.newaxis] - B[np.newaxis, :]), axis=-1)
top_k = np.argpartition(dists, k, axis=1)[:, :k]

但是 top_k 不是按距离排序的。您可以稍后对其进行排序或改为:

top_k = np.argsort(dists, axis=1)[:, :k]

效率较低但更简单。

来自我在之前评论中链接的参考资料:

http://scipy.github.io/old-wiki/pages/EricsBroadcastingDoc

您正在尝试这样做。

只需按照示例进行操作,如:

import numpy as np
np.random.seed(123)

a = np.random.uniform(size=(8,3)) # or (512,3)
b = np.random.uniform(size=(16,3)) # or (1024,3)

diff = a[np.newaxis,:,:]-b[:,np.newaxis,:]

dist = np.sqrt(np.sum(diff**2,axis=-1))