Создание списка имен классов на основе списка индексов классов
Я играю с iris_dataset
от sklearn.datasets
Я хочу создать список, похожий на iris_dataset['target']
но иметь имя класса вместо индекса. Как я это сделал:
from sklearn.datasets import load_iris
iris_dataset=load_iris()
y=iris_dataset.target
print("Iris target: \n {}".format(iris_dataset.target))
unique_y = np.unique(y)
class_seq=['']
class_seq=class_seq*y.shape[0]
for i in range(y.shape[0]):
for (yy,tn) in zip(unique_y,iris_dataset.target_names):
if y[i]==yy:
class_seq[i]=tn
print("Class sequence: \n {}".format(class_seq))
но я хотел бы сделать это не зацикливаясь на всех элементах y
как это сделать лучше?
В результате мне нужен этот список для pandas.radviz
сюжет, чтобы иметь правильную легенду:
pd.plotting.radviz(iris_DataFrame,'class_seq',color=['blue','red','green'])
И далее иметь его для любого другого набора данных.
2 ответа
Решение
Йо может сделать это путем понимания списка.
class_seq = [ iris_dataset.target_names[i] for i in iris_dataset.target]
или используя карту
class_seq = list(map(lambda x : iris_dataset.target_names[x], iris_dataset.target))
Вы можете сделать это, циклически iris_dataset.target_names.size
, Это только размер 3, поэтому он должен быть намного быстрее для больших y
массивы.
class_seq = np.empty(y.shape, dtype=iris_dataset.target_names.dtype)
for i in range(iris_dataset.target_names.size):
mask = y == i
class_seq[mask] = iris_dataset.target_names[i]
Если вы хотите иметь class_seq
как список: class_seq = list(class_seq)