2
私は4つのクラスで巨大な訓練データセットを持っています。これらのクラスは、非連続的にラベル付けされています。順次ニューラルネットワークを適用できるようにするには、クラス内の一意の値が連続するように、クラスを再ラベル付けする必要があります。さらに、スクリプトの終わりに、私はそれらを古い価値に戻し直す必要があります。NumPy配列を連続した番号にベクトル化して戻すこと
私はループでそれらを再ラベル付けする方法を知っている:
def relabel(old_classes, new_classes):
indexes=[np.where(old_classes ==np.unique(old_classes)[i]) for i in range(len(new_classes))]
for i in range(len(new_classes)):
old_classes [indexes[i]]=new_classes[i]
return old_classes
>>> old_classes = np.array([0,1,2,6,6,2,6,1,1,0])
>>> new_classes = np.arange(len(np.unique(old_classes)))
>>> relabel(old_classes,new_classes)
array([0, 1, 2, 3, 3, 2, 3, 1, 1, 0])
しかし、これは素敵なコーディングではありません、それは時間のかなり多くを取ります。
この再ラベル付けをベクトル化する方法はありますか?
明確にするために、私はまた戻って自分の古い値にそれらを再ラベル付けできるようにしたい:
>>> relabeled_classes=np.array([0, 1, 2, 3, 3, 2, 3, 1, 1, 0])
>>> old_classes = np.array([0,1,2,6])
>>> relabel(relabeled_classes,old_classes)
array([0,1,2,6,6,2,6,1,1,0])
しかし、私はまた、彼らの古い値にそれらをバックラベルを変更するためにこれを使用することができますか? –
@WilmarvanOmmeren試しましたか?これはあなたが 'relabel'関数で習得しているものと同じラベルになります。 – Divakar
はい、私はそれらを連続していない連続するものにラベルを付け直すと動作します。しかし、私が古い値に戻ってラベル付けをしたいときはそうではありません。ソーラー、私はもっと明確に私の例を広げた! –