Я работаю над проектом, который я должен вычислить распределение Дирихле в наборе данных. Я нашел код в 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.