在Python中,我需要生成一个dict
,它将一个字母映射到该字母的预定义“one-hot”表示形式。通过图示的方式,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的方式做同样的事情?
可读性很强。 +1 – 2009-10-10 20:43:21
不错。我想我在函数式编程中尝试了一个丑陋的尝试。尽管你的版本更易读。 – 2009-10-10 20:51:54
'ascii_uppercase'的使用是一个很好的接触(我甚至不知道它存在),但我不确定这比原始代码更具可读性。列表理解简洁,但也非常有表现力。使用明确的循环使得代码的目的在我眼中不太清晰。 – bcat 2009-10-10 20:57:58