python - 从一维数组创建一个由单热向量组成的二维 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 对这个操作进行矢量化以加快计算速度?
解决方案
您可以简单地使用它来代替循环:
y_train[np.arange(len(labels)), labels] = 1
但我建议在 sklearn 或其他包中使用可用的库方法。
推荐阅读
- argo-workflows - 将多个模板化输入传递到 Argo Workflow 值
- java - 带概率的字符串随机生成器
- c# - 附加信息:向 https://pilot.Test.in/autoTest.asmx 发出 HTTP 请求时出错
- java - Java Fx - 以编程方式添加样式以标记而不覆盖
- javascript - 为什么在逗号运算符中抛出异常不会停止对其他操作数的评估?
- azure - 使用 Terraform 在 Azure 中分配角色
- sql - 如何计算连续值并在计数 3 后根据需要更改状态
- javascript - 连续的 Material-UI Snackbars(使用 React-Redux)
- php - 如何在laravel中对特定列进行分页?
- javascript - WebSocket - 失败:WebSocket 握手期间出错:缺少“连接”标头