-1

したがって、これは理論的な質問とコーディングの質問の両方であることは理解していますが、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) になるように再編成されます。

ありがとうございました。これはやや奇妙な問題だと思いますので、質問がある場合はお知らせください。

4

2 に答える 2

0

これは実際に私のために仕事をします。

# creates a list of numbers from 0 to the length of your newlabels vector
changeto = [i for i in range(0, len(np.unique(newlabels)))]

# get the unique values of your newlabels (e.g. 0, 3, 4, 5, 10)
currentlabels = np.unique(newlabels)

# change all your labels to your new mapping (e.g. 0 -> 0, 3 -> 1, 4 -> 2, etc.)
for i in range(0, len(changeto)):
    if currentlabels[i] != changeto[i]:
        # change the 'states' in newlabels to new label
        newlabels = [changeto[i] if x==currentlabels[i] else x for x in newlabels]

きれいではないかもしれませんが、新しいラベルを行 0、1、2、... x にマップします。ここで、x は新しい圧縮されたラベル ベクトルの長さです。

于 2015-09-10T20:02:48.103 に答える
-1

レーベルがマージに関与していない場合はどうなりますか? 元のラベルを保持しますか? もしそうなら、そのラベルが新しい範囲の外にある場合はどうなりますか?

全体として、これは単にラベルの量だけが与えられた新しいラベルを生成していると思います:

new_label_list = ["x"+str(n+1)+"'" for n in range(len(change))]

長さ 4 の変更の場合、これにより ["x1'", "x2'", "x3'", "x4'"] が得られます。

新しいレーベルがどのように構築されているか分かりますか?

leading "x"
string version of the index, 1 .. length
trailing prime character
于 2015-09-10T18:54:49.383 に答える