Menggunakan pmap() Julia dengan pemahaman

Dengan fungsi sederhana seperti

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

yang ingin saya panggil menggunakan pmap() dengan melakukan

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

Julia memberikan kesalahan ini

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.

Saya tidak begitu mengerti apa yang terjadi di sini.

Menurut beberapa penelitian yang saya lakukan:

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)

Lalu apa yang salah?


person Le Minaw    schedule 25.02.2018    source sumber


Jawaban (1)


Versi Julia manakah yang Anda gunakan? Harap perbarui ke rilis stabil terbaru (0.6.x), karena ini berfungsi baik dengan rilis saat ini, contoh ini dijalankan di 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)

Jika Anda tidak akan mengubah atau memfilter elemen rentang yang dikumpulkan, Anda juga dapat memanggil collect(4:-.1:2) alih-alih [y for y = 4:-.1:2].

Jika Anda hanya perlu mengulangi nilai rentang, maka Anda bahkan tidak perlu mengumpulkan nilai, cukup gunakan rentang apa adanya, yaitu:

pmap(fun, 0:.1:2, 4:-.1:2)
person HarmonicaMuse    schedule 25.02.2018
comment
Saya menggunakan 0.6.2 juga, tapi x86_64-w64-mingw32. - person Le Minaw; 25.02.2018
comment
Oke, pemahaman dan rentang tidak berfungsi karena alasan yang tidak diketahui, tetapi kumpulkan() benar-benar berfungsi. Mungkin ada yang salah dengan instalasi Julia saya. Terima kasih untuk bantuannya. - person Le Minaw; 26.02.2018