根据类索引列表生成类名称列表

时间:2018-12-07 13:12:22

标签: python-3.x pandas numpy iris-dataset

我正在玩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 个答案:

答案 0 :(得分:1)

您可以通过遍历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)

答案 1 :(得分:0)

您可以通过列表理解来做到这一点。

class_seq = list(map(lambda x : iris_dataset.target_names[x], iris_dataset.target))

或通过使用地图

useState