したがって、これは理論的な質問とコーディングの質問の両方であることは理解していますが、10 個のラベル (x1、x2、...、x10) とそれに対応する「位置」ベクトル (v1、v2、...) のリストがあるとします。 、v10)。
互いの L2 ノルム距離に基づいてそれらを折りたたみたいと思います。たとえば、v1 が v10 に近い場合、すべての x10 を x1 などに変更します。
したがって、最終結果は仮説的には新しいラベル (x1、x3、x7、x8) のようになります。これをスマートに (x1', x2', x3', x4') にする方法はありますか? 人々が混乱して新しいラベルが同じであると想定しないようにするためです。
与えられた: labels = すべてのラベル (1,2,3...,10) を持つ Nx1 のベクトル
コード例:
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) になるように再編成されます。
ありがとうございました。これはやや奇妙な問題だと思いますので、質問がある場合はお知らせください。