формат данных pmap (Julia 1.1.0)

У меня есть функция, которую я запускаю с помощью 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];

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


person user3856486    schedule 08.03.2019    source источник
comment
Когда у меня есть более одного возвращаемого значения разных типов - Array {Int64, N}, SimpleDiGraph {Int64}, Bool - и функция запускается 5 раз. Как мне получить доступ ко второму элементу (SimpleDiGraph) третьего прогона? p [1/2/3] возвращает только 1-й, 2-й или 3-й элемент 1-го прогона, а p [3,2] возвращает ошибку.   -  person user3856486    schedule 09.03.2019


Ответы (1)


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].

person hckr    schedule 08.03.2019