我有一个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
您可以通过在两个数组中插入一个额外的维,并让Numpy相互广播它们,来计算每个向量到每个参考点的距离:
distances = np.linalg.norm(npdata[:, None, ...] - reference_vectors[None, ...], axis=-1)
然后您可以使用np.argmin
查找最近的群集:
cluster_id = np.argmin(distances, axis=1)