首页 > 解决方案 > 从一维数组创建一个由单热向量组成的二维 numpy 数组

问题描述

我有一个 1D numpy 数组,我们称之为标签。该数组的每个元素都是一个数字 (0...9)。我想将标签数组转换为 2D numpy 零数组,我们称之为y_train。新的二维数组使得对于元素labels[i] , y_train的i行在索引label[i]处恰好有一个元素 等于 1.0 。可以做到这一点的一种方法是遍历标签数组。见下文

>>> labels = [1, 5, 3, 9, 4]
>>> y_train = np.zeros((5, 10))
>>> for i in range(len(labels)):
        y_train[i][labels[i]] = 1.0
>>> y_train
array([[0., 1., 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., 0., 0., 1.],
       [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.]])

此代码片段描述了我想要实现的目标。所以,我的主要问题是如何使用 numpy 对这个操作进行矢量化以加快计算速度?

标签: pythonnumpynumpy-ndarraydata-processing

解决方案


您可以简单地使用它来代替循环:

y_train[np.arange(len(labels)), labels] = 1

但我建议在 sklearn 或其他包中使用可用的库方法。


推荐阅读