假设我有一个一维numpy数组
a = array([1,0,3])
我想将其编码为2D one-hot数组
b = array([[0,1,0,0], [1,0,0,0], [0,0,0,1]])
有没有一种快速的方法可以做到这一点?这比在a
上循环设置b
的元素更快。
发布于 2015-04-24 02:30:15
数组a
定义了输出数组中非零元素的列。您还需要定义行,然后使用花哨的索引:
>>> a = np.array([1, 0, 3])
>>> b = np.zeros((a.size, a.max()+1))
>>> b[np.arange(a.size),a] = 1
>>> b
array([[ 0., 1., 0., 0.],
[ 1., 0., 0., 0.],
[ 0., 0., 0., 1.]])
发布于 2016-05-19 20:35:51
>>> values = [1, 0, 3]
>>> n_values = np.max(values) + 1
>>> np.eye(n_values)[values]
array([[ 0., 1., 0., 0.],
[ 1., 0., 0., 0.],
[ 0., 0., 0., 1.]])
发布于 2017-11-27 19:13:22
如果你正在使用keras,有一个内置的实用程序:
from keras.utils.np_utils import to_categorical
categorical_labels = to_categorical(int_labels, num_classes=3)
它的功能与@YXD's answer (请参阅source-code)非常相似。
https://stackoverflow.com/questions/29831489
复制相似问题