Использование pmap () Джулии с пониманием

С помощью простой функции, такой как

function fun(x::Real, y::Real)
    x, y
end

что я хочу вызвать с помощью pmap (), выполнив

pmap(fun, [x for x=0:.1:2], [y for y=4:-.1:2])

Юля выдает эту ошибку

ERROR: LoadError: MethodError: Cannot `convert` an object of type Tuple{Float64,Float64} to an object of type AbstractFloat
This may have arisen from a call to the constructor AbstractFloat(...),
since type constructors fall back to convert methods.

Я действительно не понимаю, что здесь происходит.

Согласно некоторым исследованиям, которые я провел:

It's well-established that to call map on an N-argument function, you pass N lists (or whatever collection) to map:

julia> map(+, (1,2), (3,4))
(4,6)

Что тогда не так?


person Le Minaw    schedule 25.02.2018    source источник


Ответы (1)


Какую версию Юлии вы используете? Пожалуйста, обновите последнюю стабильную версию (0.6.x), так как это нормально работает с текущей версией, этот пример был запущен на JuliaBox:


jrun@notebook-0hnhf:/home/jrun$ julia
               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: https://docs.julialang.org
   _ _   _| |_  __ _   |  Type "?help" for help.
  | | | | | | |/ _' |  |
  | | |_| | | | (_| |  |  Version 0.6.2 (2017-12-13 18:08 UTC)
 _/ |\__'_|_|_|\__'_|  |  Official http://julialang.org/ release
|__/                   |  x86_64-pc-linux-gnu'

julia> function fun(x::Real, y::Real)
           x, y
       end
fun (generic function with 1 method)

julia> pmap(fun, [x for x = 0:.1:2], [y for y = 4:-.1:2])
21-element Array{Tuple{Float64,Float64},1}:
 (0.0, 4.0)
 (0.1, 3.9)
 (0.2, 3.8)
 (0.3, 3.7)
 (0.4, 3.6)
 (0.5, 3.5)
 (0.6, 3.4)
 (0.7, 3.3)
 (0.8, 3.2)
 (0.9, 3.1)
 (1.0, 3.0)
 (1.1, 2.9)
 (1.2, 2.8)
 (1.3, 2.7)
 (1.4, 2.6)
 (1.5, 2.5)
 (1.6, 2.4)
 (1.7, 2.3)
 (1.8, 2.2)
 (1.9, 2.1)
 (2.0, 2.0)

Если вы не собираетесь преобразовывать или фильтровать собранные элементы диапазона, вы также можете просто вызвать collect(4:-.1:2) вместо [y for y = 4:-.1:2].

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

pmap(fun, 0:.1:2, 4:-.1:2)
person HarmonicaMuse    schedule 25.02.2018
comment
Я тоже использую 0.6.2, но x86_64-w64-mingw32. - person Le Minaw; 25.02.2018
comment
Хорошо, понимания и диапазоны не работают по неизвестной причине, но collect () действительно работает. Может что-то не так с моей установкой Julia. Спасибо за помощь. - person Le Minaw; 26.02.2018