在 Julia 中迭代具有不同数量参数的不同函数

2024-04-09

我正在尝试使用不同数量的参数对不同的函数运行循环。变量是在运行时在循环内创建的,我想在每次迭代时使用 eval 来使用变量 :symbol 实例化一个 Struct。但是,我不能这样做,因为 eval 只在全局范围内有效。这是有效案例的 MWE:

function f1(x); return x; end
function f2(x1,x2); return x1+x2; end

handles = [f1,f2]
args =[:(x1),:(x1,x2)]

x1 = 1; x2 = 1;
for (i,f) in enumerate(handles)
    params = eval(args[i])
    @show f(params...)
end

f(params...) = 1
f(params...) = 2

但是,如果我在循环内移动变量定义(这正是我真正想要的),则在重新启动 Julia 来清除工作区后它不起作用。

function f1(x); return x; end
function f2(x1,x2); return x1+x2; end

handles = [f1,f2]
args =[:(x1),:(x1,x2)]

for (i,f) in enumerate(handles)
    x1 = 1; x2 = 1;
    params = eval(args[i])
    @show f(params...)
end

ERROR: UndefVarError: x1 not defined

我尝试过几个答案,例如this one https://stackoverflow.com/questions/21267962/how-can-i-eval-a-local-variable-in-julia,但我似乎无法让它发挥作用。我可以编写一个自定义调度函数,它接受 [x1,x2] 并使用正确的参数调用 f1 或 f2。但是,有没有办法通过 eval 或其他优雅的解决方案来做到这一点?

编辑:这里有更多关于我在代码中尝试执行的操作的详细信息。我有每个算法的配置结构,在这个结构中我想预先定义它需要的参数

KMF_config = AlgConfig( 
    name = "KMF",
    constructor = KMC.KMF,
    parameters = :(mu,N,L,p),
    fit = KMC.fit!)
MF_config = AlgConfig( 
    name = "MF",
    constructor = KMC.MF,
    parameters = :(mu,N,L),
    fit = KMC.fit!)

alg_config_list = [KMF_config, MF_config]
for (i,alg_config) in enumerate(alg_config_list)
    mu,N,L,p,A,B,C,D,data = gen_vars() #this returns a bunch of variables that are used in different algorithms
    method = alg_config.constructor(eval(method.parameters)...)
    method.fit(data)
end

一种可能的解决方案是让一个函数获取所有变量和方法,并根据 method.name 返回一个包含变量子集的元组。但我不确定这是否是最好的方法。


这是一种使用多重调度而不是eval:

run_a(x, y) = x + 10*y
run_b(x, y, z) = x + 10*y + 100*z

extract(p, ::typeof(run_a)) = (p.x, p.y)
extract(p, ::typeof(run_b)) = (p.x, p.y, p.z)
genvars() = (x=1, y=2, z=3)

function doall()
    todo = [
        run_a,
        run_b,
    ]
    for runalg in todo
        v = genvars()
        p = extract(v, runalg)
        @show runalg(p...)
    end
end

在您的示例中,您将替换run_a and run_b with KMC.KMF and KMC.MF.

编辑:清理示例以避免示例中不存在的结构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Julia 中迭代具有不同数量参数的不同函数 的相关文章

  • 如何制作任意级别的嵌套for循环

    我可以像这样做一个两级嵌套循环 for i1 in 1 n for i2 in 1 n do something with i1 i2 如何将其扩展到任意级别的嵌套循环 例如 我可以在 Python 中执行此操作以循环 n m 的笛卡尔积
  • 如何在 Ruby 中列出局部变量?

    def method a 3 b 4 some method that gives a b end 局部变量 http ruby doc org core Kernel html method i local variables 它输出符号
  • Java:从 ScriptEngine javascript 返回一个对象

    我正在尝试使用 Java 来评估 javascript脚本引擎 https docs oracle com javase 7 docs api javax script ScriptEngine html班级 这是我正在尝试做的事情的一个简
  • `dplyr::_join` 函数的命名向量“by”参数[重复]

    这个问题在这里已经有答案了 我正在写一个函数dplyr join两个数据框by不同的列 第一个数据帧的列名称动态指定为函数参数 我相信我需要使用rlang准引用 元编程 但未能找到可行的解决方案 我很感激任何建议 library dplyr
  • 朱莉娅在矩阵中查找(行,列)而不是索引

    在 Julia 中 您可以通过以下方式找到矩阵中元素的坐标 julia gt find x gt x 2 1 2 3 2 3 4 1 0 2 3 element Array Int64 1 2 4 9 这些值是正确的 但我更希望得到 row
  • 如何判断一个类型是否派生自模板类?

    如何确定类型是否派生自模板类 特别是 我需要确定模板参数是否具有std basic ostream作为基类 通常情况下std is base of是完成这项工作的工具 然而 std is base of仅适用于完整类型 不适用于类模板 我正
  • Ruby 元编程方法列表?

    刚刚开始学习 Ruby 元编程 看看 Object methods 我得到 Object methods gt allocate new superclass freeze lt gt lt lt gt gt to s included m
  • 动态 getter 和 setter - 一种可能性

    我正在尝试解决最近出现的一个问题 假设我们想要并且知道如何在 javascript 中使用动态 getter 和 setter 就像 php 中的那样 get set 但由于 javascript 没有包罗万象的属性 我们唯一能做的就是提供
  • JavaScript 的 eval() 什么时候不是邪恶的?

    我正在编写一些 JavaScript 代码来解析用户输入的函数 用于类似电子表格的功能 解析了公式我could将其转换为 JavaScript 并运行eval 就可以得到结果了 然而 我一直回避使用eval 如果我可以避免它 因为它是邪恶的
  • 如何终止 Julia 中的任务/协程?

    using HttpServer http HttpHandler do request Request response Response show request Response Hello there end http events
  • 用 OpenCL C 编写快速线性系统求解器

    我正在编写一个 OpenCL 内核 它将涉及求解线性系统 目前我的内核太慢了 提高线性系统部分的性能似乎是一个不错的起点 我还应该注意 我并没有尝试使我的线性求解器并行 我正在研究的问题在宏观层面上已经是令人尴尬的并行 以下是我编写的 C
  • Julia 中的 Refs 和 Broadcasting 之间有什么联系

    对于两个对象A and B我们之前可以得到向量 A A A B 与代码A A B 从 Julia 0 7 中的弃用警告来看 执行此操作的新方法似乎是使用第一个 A 的引用 所以它变成Ref A A B 参考文献和广播操作之间似乎没有很强的联
  • 使用 eval 时不会受到 XSS 威胁

    我正在制作 不是现在 但我仍然对这个感到好奇 一款使用 HTML5 和 JS 的游戏 我想要的是人们可以插入自定义脚本 但要安全 function executeCustomJS code eval code bad 当然这段代码非常糟糕
  • D 是否足够强大来满足这些功能?

    很长一段时间以来 我一直想设计一种将可扩展性与效率 以及安全性 易用性等 结合起来的编程语言 最近我重新发现了 D 我想知道 D 2 0 是否正是我想要自己打造的语言 我最喜欢的是元编程的潜力 理论上 D可以吗traits http dla
  • R 下与 Julia 的密切联系

    In my R代码 我使用MixedModels Julia包裹 我整合Julia in R使用JuliaCall包裹 我使用非常大的数据集 1 GB 4x10 6观察 和建模步骤 mixed models 分配了大量 RAM 80 GB
  • 使用整数模板参数时可以展开循环吗?

    我有以下代码 template
  • clojure - 不同命名空间中的评估代码

    我正在编写类似 REPL Server 的代码 用户的请求在这样的函数中评估 defn execute request str try eval read string request catch Exception e getLocali
  • 列出 Rails 控制器实例变量

    我试图列出控制器内的实例变量 但想出了 irb gt HomeController instance variable names gt visible actions inheritable attributes controller p
  • 从 Julia 更新 C 结构体的字段值

    我的问题很简单 但我不知道最好的方法 或者 Julia 目前没有提供这样的方法 如何从 Julia 设置 C 结构的字段值 假设您有一个结构类型来表示 C 库中树的节点 typedef struct node s int type node
  • 如何向数组添加维度? (与“挤压”相反)

    我永远不记得如何做到这一点 怎么可以去 来自向量 大小 n1 到列矩阵 大小 n1 1 或来自矩阵 大小 n1 n2 到数组 T 3 大小 n1 n2 1 或来自数组 T 3 大小 n1 n2 n3 到数组 T 4 大小 n1 n2 n3

随机推荐

  • 无法确定要使用哪个版本的 ASP.NET 网页

    我的 VS2013 项目发生了奇怪的事情 我最近将我的项目分支之一从 NET 4 0 升级到 4 5 1 并使用 NuGet 包管理器安装带有 Razor 的 MVC 5 这样我就可以拥有 WebForms MVC 混合体 到目前为止 它运
  • Wpf GridSplitter 替换 row.height 属性上的绑定

    我在网格分割器方面遇到了困难 我已经绑定了RowDefinition Height模型的 clr 属性的依赖属性 如下所示
  • 有没有办法将 jq 输出到 bash 脚本的多个变量中?

    基本上我有一个 bash 脚本 它在某一时刻进行 API 调用 并生成证书和密钥并以 json 形式返回 我将其通过管道传输到 jq 并可以选择证书或密钥并将其存储在变量中 像这样的事情 CERT API call jq r certifi
  • Go 运行时错误:“分配给 nil 映射中的条目”

    我是 go lang 的新手 我正在尝试读取 csv 文件并收集数据 但运行后我得到了这个错误 panic assignment to entry in nil map goroutine 1 running panic 0x4dedc0
  • 登录 DBCP

    我正在使用 Apache Commons DBCP 有一个任务来跟踪 DBCP 的内部行为 活动和空闲连接的数量 我发现 DBCP 根本没有任何此类日志记录 是的 当从池中借用连接时 可以编写输出 BasicDataSource 状态的代码
  • 替换 JQueryUI 对话框的关闭图标

    经过对这个主题的广泛搜索后 我无法找到答案 所以希望有人可以帮助我解决这个问题 我有一个相对基本的对话框 dialog search dialog resizable false height dimensionData height wi
  • 使用掺杂向量访问多维数组的任意轴向切片?

    我正在构建一套功能来与多维数组数据结构 https stackoverflow com questions 30023867 how can i work with dynamically allocated arbitrary dimen
  • “enum class”是 C++ 中的类类型吗?

    我读到了 C 中的枚举声明 使用参考参数 http en cppreference com w cpp language enum 然后我做了枚举类并使用检查它是否是类类型std is class include
  • 有没有更简单的方法来访问 R 中类的属性,我可以使用点表示法吗?

    我在 R 中创建了一个包含多个属性的对象 我怎样才能轻松访问它们 我可以 attr x attributeName or attributes x attributeName 但它们都不是真正方便的 有没有更快的方法 如 C 或 Java
  • 无法让属性字符串在 Swift 中工作

    我试图在代码中设置字符串的一些属性 但无法得到NSAttributedString上班 这是应该更改字符串的函数 func getAttributedString string String gt NSAttributedString va
  • 实体框架代码首先迁移抛出错误

    这是我在收到此错误之前所做的操作 安装了 EF 预发布版本 可能是 6 我不知道 决定我不想要 所以卸载它并重新安装稳定版本 5 通过 SSMS 截断我的数据库 这是错误 Exception calling CreateInstanceFr
  • 使用 Spring MVC 应用程序实现 Tiles 3

    我正在尝试在 Spring MVC 应用程序中实现 Apache Tiles 3 因此我在 pom xml 文件中添加了以下依赖项
  • 对多索引 pandas 数据帧上的重复行求和

    你好 我在处理熊猫方面遇到了麻烦 我正在尝试对多索引数据帧上的重复行进行求和 我尝试过df groupby level 0 1 sum 还与df stack reset index groupby year product sum 和其他一
  • Typeorm .loadRelationCountAndMap 返回零

    请帮忙 我正在尝试执行以下 typeorm 查询 return await getRepository Company createQueryBuilder Company leftJoinAndSelect Company plants
  • 在另一个绘图的绘图区域内添加小直方图

    有没有办法在另一个图的绘图区域内添加直方图 但独立于 基础 图的坐标系 就我而言 我想将直方图作为图例添加到分区统计图 直方图将显示属于每个类别的区域数量 但问题可以轻松应用于任何绘图 例如 plot 1 10 rect 1 7 4 9 c
  • pandas DataFrame 中每一行的操作

    我想迭代 pandas DataFrame 中的每一行 并对每行中的元素执行一些操作 现在我有 for row in df iterrows if row col gt 1 5 doSomething 但它告诉我 元组索引必须是整数 而不是
  • 从 C# 打开 Google Chrome 的新窗口

    可以开新的instance来自 C 的 Chrome By instance我的意思是一个新的单独选项卡 不包含在现有的 Chrome 窗口中 我尝试过以下解决方案但是both他们创造了一个new tab in an existingchr
  • MongoDB - 返回插入项的 id

    从以下教程开始 https codeforgeek com 2015 08 restful api node mongodb https codeforgeek com 2015 08 restful api node mongodb 我有
  • MinGW GCC 通配符

    我在 Windows 上使用 MinGW GCC 编译器如何编译目录中的所有 C 文件 I used gcc c o Output 在我输入所需的文件夹后出现此错误 gcc error c Invalid argument gcc fata
  • 在 Julia 中迭代具有不同数量参数的不同函数

    我正在尝试使用不同数量的参数对不同的函数运行循环 变量是在运行时在循环内创建的 我想在每次迭代时使用 eval 来使用变量 symbol 实例化一个 Struct 但是 我不能这样做 因为 eval 只在全局范围内有效 这是有效案例的 MW