numpy中实现ind2vec功能的方法

在做数据处理的时候常有这样的需求:将index用one hot的形式表示。

例如mnist手写数字识别,数据集中的label是这样的形式:label=[1 7 5 9 0 4 6 2] ...

用分类器进行分类的时候,支持的输出格式应该是one hot的形式:

[[0 1 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 1 0 0]
 [0 0 0 0 0 1 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 1]
 [1 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 1 0 0 0 0 0]
 [0 0 0 0 0 0 1 0 0 0]
 [0 0 1 0 0 0 0 0 0 0]]
...

在matlab中可以用ind2vec函数实现:

A = [1 7 5 9 0 4 6 2]  
B = ind2vec(A) + 0 %如果不+0则会生成一个稀疏矩阵  

在python中可以用这样的方法达到这种效果:

(numpy.arange(10) == data[:, None]).astype(int)  # arange(10)表示index最多有10个

Friskit

继续阅读此作者的更多文章