Всегда полезно использовать NumPy для массивов. np.unique()
определяет метки, которые у вас есть в train_labels
. ix
- это массив индексов. np.nonzero()
дает индексы train_lables
, где train_labels == unique_tl[iy]
.
import numpy as np
train_labels = np.array([2,5,8,2,5,8])
unique_tl = np.unique(train_labels)
NL = len(train_labels) # how many data , 6
nl = len(unique_tl) # how many labels, 3
target = np.zeros((NL,nl),dtype=int)
for iy in range(nl):
ix = np.nonzero(train_labels == unique_tl[iy])
target[ix,iy] = 1
1010 * дает *
target
array([[1, 0, 0],
[0, 1, 0],
[0, 0, 1],
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])
Я подумаю о возможности устранить цикл for.
Если [2,5,8] подразумевается как часть [0,1,2,3,4,5,6,7,8], то вы можете использовать этот ответ