我拥有的:
indexes = np.array([[4], [3], [2], [1]])
我想要的:
output = [[0, 0, 0, 0, 1], [0, 0, 0, 1, 0], [0, 0, 1, 0, 0], [0, 1, 0, 0, 0]]
因此,我不希望在输入的每个索引中有一个特定的数字,而是希望有一个长度为最大数字(这里是4)的数组,其中数字是新输出中的索引。
我可以用一个for循环来实现:
import numpy as np
indexes = np.array([[4], [3], [2], [1]])
one_hot = np.zeros(shape=(indexes.shape[0], np.max(input)))
for i in range(indexes.shape[0]):
one_hot[i][input[i]] = 1
print(one_hot)
但是对于较大的数组来说,它是相当慢的,因此我正在寻找一种上级的方法。
2条答案
按热度按时间ffvjumwh1#
您可以使用numpy索引:
或者,使用广播:
输出:
ih99xse12#
如果你只想创建一个包含1和0的2D数组,也许你可以尝试使用二进制。
你可以把这一切简化为
两个代码的结果均应给予输出:
就我个人而言,我只会使用一个1D数组,每个元素都是一个整数。它的二进制表示将直接给予我另一个维度的工作,也使任何形式的关系/计算容易使用位运算符。