在NumPy中将索引数组转换为独热编码数组

354

给定一个一维索引数组:

a = array([1, 0, 3])

我想将其作为一个二维数组进行one-hot编码:

b = array([[0,1,0,0], [1,0,0,0], [0,0,0,1]])
22个回答

-1
使用以下代码。它最好运行。
def one_hot_encode(x):
"""
    argument
        - x: a list of labels
    return
        - one hot encoding matrix (number of labels, number of class)
"""
encoded = np.zeros((len(x), 10))

for idx, val in enumerate(x):
    encoded[idx][val] = 1

return encoded

在这里找到它 P.S 你不需要进入链接。


9
应避免在numpy中使用循环。 - Kenan
它并没有回答这个问题:"是否有快速的方法来做这件事?比仅仅循环a来设置b元素更快的方法。" - Alexandre Huat
@AlexandreHuat 你可以使用numpy中的np.eye()函数。 - Inaam Ilahi
1
然后,您应该回答说可以使用numpy.eye()(但已经被另一个用户完成)。请务必仔细阅读问题和已发布的答案,以维护stackoverflow和社区的质量。 - Alexandre Huat

-1

使用 Neuraxle 管道步骤:

  1. 设置您的示例
import numpy as np
a = np.array([1,0,3])
b = np.array([[0,1,0,0], [1,0,0,0], [0,0,0,1]])
  • 进行实际转换
  • from neuraxle.steps.numpy import OneHotEncoder
    encoder = OneHotEncoder(nb_columns=4)
    b_pred = encoder.transform(a)
    
    1. 确保它能正常工作
    assert b_pred == b
    

    文档链接: neuraxle.steps.numpy.OneHotEncoder


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接