gpt4 book ai didi

julia - 怎么用 map 啊!在 Julia ?

转载 作者:行者123 更新时间:2023-12-02 18:03:55 27 4
gpt4 key购买 nike

如何在 julia 中将 map! 与使用向量变量的函数一起使用?

下面的代码不起作用。

也许,下面的代码可能有一个简单的解决方案,

但我想在这个问题中使用map!

 a1 = ones(100, 2)
a2 = ones(100, 2)
a3 = ones(100, 2)

function expe1(v1,v2,v3)
v1 + v2 + v3
end

dest = [zeros(100) for i in 1:2]

map!(expe1, dest, eachcol(a1), eachcol(a2), eachcol(a3))

错误:

ERROR: MethodError: no method matching map!(::typeof(expe1), ::Vector{Vector{Float64}}, ::Base.Generator{Base.OneTo{Int64}, Base.var"#242#243"{Matrix{Float64}}}, ::Base.Generator{Base.OneTo{Int64}, Base.var"#242#243"{Matrix{Float64}}}, ::Base.Generator{Base.OneTo{Int64}, Base.var"#242#243"{Matrix{Float64}}})
Closest candidates are:
map!(::F, ::AbstractArray, ::AbstractArray) where F at abstractarray.jl:2924
map!(::F, ::AbstractArray, ::AbstractArray, ::AbstractArray) where F at abstractarray.jl:2967
map!(::F, ::AbstractArray, ::AbstractArray...) where F at abstractarray.jl:3024
...
Stacktrace:
[1] top-level scope
@ REPL[8]:1

最佳答案

对于非数组可迭代对象,没有 map! 方法,因为它坚持所有参数都是具有相同形状的 AbstractArray

要将结果写入目标数组而不进行中间分配,您可以广播分配给它一个生成器:

julia> dest .= Base.Generator(expe1, eachcol(a1), eachcol(a2), eachcol(a3))
2-element Vector{Vector{Float64}}:
[3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0 … 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0]
[3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0 … 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0]

类似这样的东西也应该有效:

function my_map!(f::F, dest::AbstractArray, As...) where F
for (i, a...) in zip(eachindex(dest), As...)
val = f(a...)
@inbounds dest[i] = val
end
return dest
end

关于julia - 怎么用 map 啊!在 Julia ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73728604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com