gpt4 book ai didi

python - 使用 NumPy 从 Python 中的位置向量进行无需 for 循环的 One-Hot 编码?

转载 作者:行者123 更新时间:2023-11-30 08:59:07 24 4
gpt4 key购买 nike

我有一些想要“one-hot 编码”的数据,它被表示为位置的一维向量。

NumPy 中是否有任何函数可以将我的 x 扩展为我的 x_ohe

在观看 Jake Vanderplas's talk 后,我不惜一切代价避免在 Python 中使用 for 循环进行此类操作。

x = np.asarray([0,0,1,0,2])
x_ohe = np.zeros((len(x), 3), dtype=int)
for i, pos in enumerate(x):
x_ohe[i,pos] = 1
x_ohe
# array([[1, 0, 0],
# [1, 0, 0],
# [0, 1, 0],
# [1, 0, 0],
# [0, 0, 1]])

最佳答案

如果x仅包含非负整数,则可以将x与序列使用numpy broadcasting进行比较并将结果转换为ints:

(x[:,None] == np.arange(x.max()+1)).astype(int)

#array([[1, 0, 0],
# [1, 0, 0],
# [0, 1, 0],
# [1, 0, 0],
# [0, 0, 1]])
<小时/>

或者先初始化,然后赋值使用advanced indexing :

x_ohe = np.zeros((len(x), 3), dtype=int)
x_ohe[np.arange(len(x)), x] = 1
x_ohe

#array([[1, 0, 0],
# [1, 0, 0],
# [0, 1, 0],
# [1, 0, 0],
# [0, 0, 1]])

关于python - 使用 NumPy 从 Python 中的位置向量进行无需 for 循环的 One-Hot 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47421731/

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