gpt4 book ai didi

python - 通过索引/单热编码生成序列

转载 作者:行者123 更新时间:2023-11-28 20:20:38 25 4
gpt4 key购买 nike

我有一个序列 s = [4,3,1,0,5]num_classes = 6我想生成一个 Numpy 矩阵 m形状(len(s), num_classes)其中 m[i,j] = 1 if s[i] == j else 0 .

Numpy中有没有这样的函数,我可以通过snum_classes

这也称为 1-of-k 或 one-hot 编码。


timeit结果:

def b():
m = np.zeros((len(s), num_classes))
m[np.arange(len(s)), s] = 1
return m

In [57]: timeit.timeit(lambda: b(), number=1000)
Out[57]: 0.012787103652954102

In [61]: timeit.timeit(lambda: (np.array(s)[:,None]==np.arange(num_classes))+0, number=1000)
Out[61]: 0.018411874771118164

最佳答案

由于您希望每行有一个 1,因此您可以在第一个轴上使用 arange(len(s)) 进行花式索引,并使用 s 第二个:

s = [4,3,1,0,5]
n = len(s)
k = 6
m = np.zeros((n, k))
m[np.arange(n), s] = 1
m
=>
array([[ 0., 0., 0., 0., 1., 0.],
[ 0., 0., 0., 1., 0., 0.],
[ 0., 1., 0., 0., 0., 0.],
[ 1., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 1.]])

m.nonzero()
=> (array([0, 1, 2, 3, 4]), array([4, 3, 1, 0, 5]))

这可以被认为是使用索引 (0,4),然后是 (1,3),然后是 (2,1)、(3,0)、(4,5)。

关于python - 通过索引/单热编码生成序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30604907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com