如何将一键编码转换为整数?
numpy
python
tensorflow
5
0

我有一个形状为(100,10)的numpy数组数据集。每一行都是单次编码。我想将其传输到形状为(100,)的nd数组中,这样我将每个向量行都转换为一个表示非零索引的整数。是否有使用numpy或tensorflow进行此操作的快速方法?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

正如Franck Dernoncourt指出的那样,由于一个热编码只有一个单一的1,其余均为零,因此可以在此特定示例中使用argmax。通常,如果要在numpy数组中查找值,则可能要查询numpy.where 。此外,此堆栈交换问题:

是否有NumPy函数返回数组中某物的第一个索引?

由于一个热向量是一个全为0且一个为1的向量,因此您可以执行以下操作:

>>> import numpy as np
>>> a = np.array([[0,1,0,0],[1,0,0,0],[0,0,0,1]])
>>> [np.where(r==1)[0][0] for r in a]
[1, 0, 3]

这只是建立索引列表,每行索引为1。 [0] [0]索引仅用于np.where返回的结构(具有数组的元组),该结构比您要求的要多。

对于任何特定的行,您只想索引到。例如,在第零行的索引1中找到1。

>>> np.where(a[0]==1)[0][0]
1
收藏
评论

您可以使用numpy.argmaxtf.argmax 。例:

import numpy as np  
a  = np.array([[0,1,0,0],[1,0,0,0],[0,0,0,1]])
print('np.argmax(a, axis=1): {0}'.format(np.argmax(a, axis=1)))

输出:

np.argmax(a, axis=1): [1 0 3]

您可能还需要查看sklearn.preprocessing.LabelBinarizer.inverse_transform

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号