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

问题描述 投票:0回答:1

我有一个numpy数组大小(9126,12)和两个参考聚类点(2,12),我正在尝试计算该数组到标签的距离。我在实践中了解这是怎么发生的,但由于发送不同大小的数组而无法实现。

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

[ValueError:操作数不能与形状(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
python euclidean-distance
1个回答
0
投票

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

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

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

cluster_id = np.argmin(distances, axis=1)
© www.soinside.com 2019 - 2024. All rights reserved.