在Python中,我需要生成一个将字母映射到预定义的“one-hot”表示的
有没有更高效/更简洁/更符合Python风格的方法来完成同样的事情?
dict
。举个例子,这个dict
应该长这样:{ 'A': '1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0',
'B': '0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0', # ...
}
每个字母用一个字符表示一个二进制位。因此,每个字符串将包含 25 个零和一个 1。对应字母在字母表中的位置决定了 1
的位置。
我写了一些代码来生成这个结果:
# Character set is explicitly specified for fine grained control
_letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
n = len(_letters)
one_hot = [' '.join(['0']*a + ['1'] + ['0']*b)
for a, b in zip(range(n), range(n-1, -1, -1))]
outputs = dict(zip(_letters, one_hot))
有没有更高效/更简洁/更符合Python风格的方法来完成同样的事情?
ascii_uppercase
是一个不错的点睛之笔(我甚至不知道它的存在),但我不确定这比原始代码更易读。列表推导式简洁,但也非常表达清晰。在我的眼中,使用显式循环会使代码的目的不太清晰。 - bcat