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

Julia中如何计算多变量最小值以设置绘图Y轴范围?

解决Julia中计算多组数据最值的MethodError问题

错误原因分析

你遇到的MethodError: objects of type Int64 are not callable,是因为误用了minimum函数:

  • Julia的minimum(f, iterable)语法要求第一个参数是函数(用于映射迭代器元素),而你传入的第一个参数m是Int64类型的数值,导致函数调用逻辑错误。

比如这段错误代码:

m = minimum(y1)
m = minimum(m, minimum(y2))  # 错误:第一个参数是数值,不是函数

简化示例修复

要计算多组数据的最小值,有两种正确写法:

写法1:用min()比较多个数值

如果已经算出每组的最小值,直接用min()比较这些数值:

y1=[2 3 4]
y2=[7 5 6]
m = minimum(y1)
m = min(m, minimum(y2))  # 正确:用min比较两个最小值

写法2:合并所有数据取最小值

如果不需要单独保存每组的最小值,可以直接合并所有数据后取全局最小:

y1=[2 3 4]
y2=[7 5 6]
m = minimum(vcat(y1, y2))  # 合并数组后取最小

循环处理CSV的完整修复

针对你遍历CSV文件计算全局最值的场景,需要修正最值更新逻辑,同时优化初始值设置(避免初始值限制范围):

x_data, y_data, names, y_min, y_max = [], [], [], Inf, -Inf  # 用无穷大/小作为初始值更合理

# 遍历CSV文件
for filename in readdir(".", join=true)
    # 只处理csv后缀的文件
    endswith(filename, ".csv") || continue
    
    df = parse_csv(filename)
    push!(names, filename)
    
    d = df.value
    push!(y_data, d)  # 将当前数据存入y_data
    
    # 计算当前数据集的最值并更新全局最值
    current_min = minimum(d)
    current_max = maximum(d)
    y_min = min(y_min, current_min)
    y_max = max(y_max, current_max)
end

# 批量绘图
for (i, d) in enumerate(y_data)
    lineplot(x_data, d, ylims=(y_min, y_max), name=names[i])
end

关键优化点:

  1. 初始值设置:用Inf(正无穷)作为y_min初始值,-Inf(负无穷)作为y_max初始值,确保第一次循环就能被实际数据的最值覆盖,避免初始值(比如100、0)限制最终的范围。
  2. 最值更新:用min()和max()分别对比全局最值与当前数据集的最值,逐步更新得到所有数据的全局范围。

内容的提问来源于stack exchange,提问作者Daniel YC Lin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:20:26