所以我意识到这既是一个理论问题,也是一个编码问题,但是如果我有一个包含 10 个标签(x1、x2、...、x10)的列表以及它们对应的“位置”向量(v1、v2、... , v10)。
我想根据它们彼此之间的 L2 范数距离来折叠它们。例如,如果 v1 接近 v10,则将所有 x10 重新标记为 x1,依此类推。
所以最终结果可能看起来像新标签:(x1, x3, x7, x8)。有没有办法巧妙地将它变成 (x1', x2', x3', x4')?,这样人们就不会感到困惑并假设新标签是相同的。
给定:标签 = Nx1 的向量,包含所有标签 (1,2,3...,10)
示例代码:
epsilon = 0.2 # defines distance
change = [] # initialize vector of labels to change
# matrix is NxN matrix of the pairwise distances between all our vectors (v1,..,v10)
for i in range(0, distancematrix):
for j in range(0, distancematrix):
# add all pairs of labels that are "close", so that we may relabel
if i!=j and distancematrix[i, j] < epsilon:
change.append((i,j))
这将生成我要重新标记的对列表。是否有一种重写“标签”的聪明方法,以便它合并我要合并的所有对并保留不属于任何合并的标签。如果我合并 6 对数字 (10-6 = 4),则将其重组为从 (1,2,3,4) 开始。
谢谢你。我意识到这是一个奇怪的问题,所以如果您有任何问题,请告诉我!