2017-01-30 18 views
0

Я работаю над проектом, который я должен вычислить распределение Дирихле в наборе данных. Я нашел код в this tutorial, который разработан Benjamin Bengfort.Разница между картой, перечислением и лямбдой в python 3.4 и python 2.7?

в качестве учебного примера я разработал этот базовый код, чтобы понять и проверить код в данной ссылке:

from collections import Counter 

train_list = [1,2,1,2,1,3,4,1,2,3] 
counter = Counter(train_list) 
votes = [counter.get(n,0) for n in range(1,5)] 
prior = [2,2,2,2] 
posterior = map(sum, zip(votes, prior)) 
weights = map(lambda i: (i[0]+1)*i[1], enumerate(posterior)) 
N = sum(posterior) 
print(float(sum(weights))/N) 

Я побежал код в обоих питона 3.5 и Python 2.7.
Я всегда получаю тот же результат в python 3.5, который равен нулю, независимо от того, изменяю ли я train_list или нет.
Но в python 2.7 я получаю число с плавающей точкой, которое, как я полагаю, является правильным ответом, поскольку изменяется каждый раз, когда я изменяю значения в train_list.
Я не знаю, почему это происходит?
Причиной может быть разница в процедуре на карте, лямбда или перечисление функций между python 2.7 и python 3.5.
Было бы очень признательно, если бы кто-нибудь мог помочь мне исправить код в python 3.5.

ответ

0

Я нашел ответ.
Благодаря Josh Lee я изменил код для этого и возвращается то же значение, как в питона 3.5 и Python 2.7:

from collections import Counter 

train_list = [1,2,1,2,1,3,4,1,2,3] 
counter = Counter(train_list) 
votes = [counter.get(n,0) for n in range(1,5)] 
prior = [2,2,2,2] 
posterior = list(map(sum, zip(votes, prior))) 
weights = map(lambda i: (i[0]+1)*i[1], enumerate(posterior)) 
N = sum(posterior) 
print(float(sum(weights))/N) 

 Смежные вопросы

  • Нет связанных вопросов^_^