формат данных pmap (Julia 1.1.0) - PullRequest
0 голосов
/ 08 марта 2019

У меня есть функция, которую я запускаю, используя pmap. Я хотел бы, чтобы выходные данные были вектором - p - записи которого являются выходными данными каждой итерации, выполняемой параллельно. Для иллюстрации, код выглядит так:

@everywhere function addo(mc,mcf)

p = zeros(Int64,mcf) ;

p[mc] = mc ;

return p 

end 

pmap(mc -> addo(mc,mcf),1:1:mcf) ;

Я получаю вывод

100-element Array{Array{Int64,1},1}:
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 0, 0, 0, 0, 0]  
 [0, 2, 0, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 0, 0, 0, 0, 0]  
 [0, 0, 3, 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, 0, 0  …  0, 0, 0, 0, 0, 0, 0, 98, 0, 0] 
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 0, 0, 0, 99, 0] 
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 0, 0, 0, 0, 100]

Вместо этого мне нужно что-то вроде этого, p = [1,2,3,4, ..., 100];

Как получить вывод в нужном формате?

1 Ответ

0 голосов
/ 08 марта 2019

pmap, аналогично map, применяет вашу функцию преобразования mc -> addo(mc, mcf) к каждому элементу в коллекции 1:1:mcf.Проблема в вашем коде состоит в том, что для каждого элемента в коллекции вы создаете новый вектор размером mcf, и общий результат становится массивом массивов, которые вы создаете в каждом преобразовании , тогда как вы хотитерезультат pmap имеет размер mcf.Следовательно, для каждого элемента в коллекции вы должны возвращать только один элемент.pmap уже дает вам коллекцию, группирующую результаты каждого преобразования.

@everywhere function addo(mc)
    return mc
end 

p = pmap(mc -> addo(mc), 1:1:mcf)

Это даст вам p = [1,2,3,4,...,100].

...