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

Julia中如何基于数组行元素求函数的argmin(行索引)

解决Julia中基于自定义双参数函数的数组行argmin问题

错误原因

你调用argmin(f,A)时触发MethodError,是因为argmin会尝试将数组A的单个数值元素传入函数f,但f定义为需要两个独立参数x和y,参数数量不匹配导致报错。

优雅高效的实现方法

无需手动写for循环,可通过argmin结合匿名函数/do块,直接遍历行索引或行向量计算函数值,最终得到使f取值最小的行索引:

方法1:遍历行索引,直接解构每行元素

f(x,y) = 2x^2 - y^2
A = [1 2; 3 4]

# 针对每个行索引计算对应行的f值,argmin返回最小的索引
min_row_idx = argmin(1:size(A,1)) do i
    x, y = A[i, :]
    f(x, y)
end

方法2:遍历行向量,用解构赋值简化参数传递

如果更习惯直接处理行向量,可通过eachrow生成行迭代器,再解构每行的两个元素:

f(x,y) = 2x^2 - y^2
A = [1 2; 3 4]

# 先获取f值最小的行向量,再匹配得到对应索引
min_row = argmin(eachrow(A)) do (x,y)
    f(x,y)
end
min_row_idx = findfirst(==(min_row), eachrow(A))

方法3:修改函数为接受向量参数(若允许)

如果可以调整原函数的参数形式,让它接受行向量,代码会更简洁:

f(v) = 2v[1]^2 - v[2]^2
A = [1 2; 3 4]

min_row_idx = argmin(1:size(A,1)) do i
    f(A[i, :])
end

以上方法均利用Julia的迭代器和argmin的高阶函数特性实现高效计算,最终得到的min_row_idx为1(对应第一行,其f值为-2,是两行中的最小值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:50:58