You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Julia中使用map!处理含向量参数的自定义函数?

使用map!调用含向量参数自定义函数的Julia解决方案

问题原因

报错的核心是eachcol()返回的是生成器(Generator),而map!要求后续输入参数必须是AbstractArray类型,不符合方法签名导致MethodError。

解决方案1:转换生成器为数组

将eachcol的结果通过collect()转为数组,匹配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]

# 转换eachcol生成器为数组,满足map!参数要求
map!(expe1, dest, collect(eachcol(a1)), collect(eachcol(a2)), collect(eachcol(a3)))

解决方案2:原地修改版本(更贴合map!语义)

如果想更高效地原地修改目标数组,可将自定义函数改为接收输出参数的in-place版本:

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

# 定义in-place版本函数,直接修改out向量
function expe1!(out, v1, v2, v3)
    out .= v1 .+ v2 .+ v3
    return out
end

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

# map!调用in-place函数,参数顺序为:函数、目标数组、输出参数占位、输入列数组
map!(expe1!, dest, dest, collect(eachcol(a1)), collect(eachcol(a2)), collect(eachcol(a3)))

说明

  • collect(eachcol(a))将列生成器转换为Vector{Vector{Float64}},与dest的类型完全匹配,满足map!对输入参数的类型要求。
  • 方案1中map!会将expe1的返回值直接赋值给dest的对应元素;方案2则直接在dest的元素上原地修改,避免额外内存分配。

内容的提问来源于stack exchange,提问作者Sungmin Ji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:15:34