В чем разница между Mapreduce и Filter with sum в Julia? - PullRequest
1 голос
/ 08 мая 2020

Версия Julia: 1.4.0

У меня есть эти два фрагмента, я думаю, они должны быть эквивалентными, но они дают очень разные результаты. Что мне не хватает?

образцы - это Vector{Float64} с 1000000 элементами. Более того, это случайная выборка из апостериорного распределения.

mapreduce(p -> p < 0.5 ? 1 : 0, +, samples) / N

sum(filter(x-> x<0.5, samples))/N

1 Ответ

1 голос
/ 08 мая 2020

Ваш mapreduce - это map пинг каждого элемента на 1 или 0. Вместо этого вы хотите сопоставить каждый элемент либо с p, либо с 0.

julia> N = 1000000;

julia> samples = randn(1000000);

julia> mapreduce(p -> p < 0.5 ? 1 : 0, +, samples) / N
0.690901

julia> mapreduce(p -> p < 0.5 ? p : -0.0, +, samples) / N
-0.35058272143615

julia> sum(filter(x-> x<0.5, samples))/N
-0.35058272143615005

Они могут по-прежнему видеть очень небольшую разницу (в данном случае это всего лишь 1 последняя единица -place), потому что результаты будут зависеть от порядка суммирования.

...