为了账号安全,请及时绑定邮箱和手机立即绑定

一个热编码具有未观察到的级别的字符列表

一个热编码具有未观察到的级别的字符列表

qq_花开花谢_0 2022-06-22 17:06:00
我正在尝试为允许未观察到的级别的字符列表创建一个热编码(ohe)。使用从将索引数组转换为 1-hot 编码的 numpy 数组的答案并在 Python 中查找给定包含它的列表的项目的索引,我想要以下内容:# example data# this is the full list including unobserved levelsav = list(map(chr, range(ord('a'), ord('z')+1))) # this is the vector to apply ohev = ['a', 'f', 'u'] # apply one hot encodingohe = np.zeros((len(v), len(av)))for i in range(len(v)): ohe[i, av.index(v[i])] = 1ohe有没有更标准/更快的方法来做到这一点,注意到上面的第二个链接提到了.index().(我的问题的规模:全向量(av)有〜1000个级别,并且ohe(v)的值长度为0.5M。谢谢。
查看完整描述

1 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

您可以使用查找字典:


# example data

# this is the full list including unobserved levels

av = list(map(chr, range(ord('a'), ord('z')+1)))

lookup = { v : i for i, v in enumerate(av)}


# this is the vector to apply ohe

v = ['a', 'f', 'u']


# apply one hot encoding

ohe = np.zeros((len(v), len(av)))

for i in range(len(v)):

    ohe[i, lookup[v[i]]] = 1

.indexis的复杂性O(n)与查找字典的复杂性是O(1). 您甚至可以通过执行以下操作来保存 for 循环:


indices = [lookup[vi] for vi in v]

ohe = np.zeros((len(v), len(av)))

ohe[np.arange(len(v)), indices] = 1


查看完整回答
反对 回复 2022-06-22
  • 1 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号