0

我正在玩 我想生成类似于但有类名而不是索引的iris_dataset列表。我这样做的方式:sklearn.datasetsiris_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'])

并进一步将其用于任何其他数据集。

4

2 回答 2

1

你可以通过循环来做到这一点iris_dataset.target_names.sizey这只是大小 3,因此对于大型数组来说应该更快。

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)

于 2018-12-07T13:39:32.553 回答
0

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

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))
于 2018-12-07T13:42:21.297 回答