Python欧氏距离不同大小的向量

2024-03-28 18:30:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个numpy数组大小(9126,12)和两个参考簇点(2,12),我试图为数组计算距离,以便标记它们。我在实践中理解这是如何发生的,但由于发送不同大小的数组,所以无法实现

我知道我可以使用numpy.linalg,但这是家庭作业的一部分,因此不允许这样做

ValueError: operands could not be broadcast together with shapes (9126,12) (2,12)

def euclid_dist(v1, v2):
    return np.sqrt(((v1-v2)**2).sum(axis = 1))


def check_euclid_dist(data, reference_vectors):
    npdata = data.to_numpy()
    dst = euclid_dist(npdata, reference_vectors)
    # Get the indices of minimum element in numpy array
    result = np.where(dst == np.amin(dst))
    print(result)
    return result

Tags: numpydatareturndistdefnp数组result
1条回答
网友
1楼 · 发布于 2024-03-28 18:30:07

您可以通过在两个数组中插入额外维度并让Numpy相互广播来计算每个向量到每个参考点的距离:

distances = np.linalg.norm(npdata[:, None, ...] - reference_vectors[None, ...], axis=-1)

然后,您可以使用np.argmin找到最近的集群:

cluster_id = np.argmin(distances, axis=1)

相关问题 更多 >