我正在嘗試為允許未觀察到的級別的字符列表創(chuàng)建一個熱編碼(ohe)。使用從將索引數(shù)組轉(zhuǎn)換為 1-hot 編碼的 numpy 數(shù)組的答案并在 Python 中查找給定包含它的列表的項目的索引,我想要以下內(nèi)容:# 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有沒有更標(biāo)準(zhǔn)/更快的方法來做到這一點,注意到上面的第二個鏈接提到了.index().(我的問題的規(guī)模:全向量(av)有?1000個級別,并且ohe(v)的值長度為0.5M。謝謝。
1 回答

至尊寶的傳說
TA貢獻(xiàn)1789條經(jīng)驗 獲得超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的復(fù)雜性O(shè)(n)與查找字典的復(fù)雜性是O(1). 您甚至可以通過執(zhí)行以下操作來保存 for 循環(huán):
indices = [lookup[vi] for vi in v]
ohe = np.zeros((len(v), len(av)))
ohe[np.arange(len(v)), indices] = 1
添加回答
舉報
0/150
提交
取消