gpt4 book ai didi

julia - 修改名称基于数组内容的对象

转载 作者:行者123 更新时间:2023-12-04 23:11:45 26 4
gpt4 key购买 nike

我有一个二元素向量,它的元素只能是 0 或 1。为了这个例子,假设 x = [0, 1] .假设还有四个对象 y00, y01, y10, y11 .我的目标是更新相应的y (本例中为 y01)根据 x 的当前值.

我知道我可以使用一系列 if 来做到这一点。声明:

if x == [0, 0]
y00 += 1
elseif x == [0, 1]
y01 += 1
elseif x == [1, 0]
y10 += 1
elseif x == [1, 1]
y11 += 1
end

但是,我知道使用 Julia's metaprogramming 可以更简洁地完成此操作。 ,虽然我不熟悉它的用法,也无法弄清楚如何。
我希望能够表达类似 y{x[1]}{x[2]} += 1 的内容(这显然是错误的);基本上可以引用和修改正确的 y根据 x的当前值.
到目前为止,我已经能够调用正确的实际值 y (但我无法召唤 y 对象本身)
eval(Symbol(string("y", x[1], x[2])))

如果我没有使用适当的行话,我很抱歉,但我希望我说清楚了。

最佳答案

使用 StaticArrays 有一种更优雅的方式.您可以为您的 y 定义一个通用类型值,它将表现得像一个矩阵(我假设 y s代表?),并为您定义了很多东西:

julia> mutable struct Thing2 <: FieldMatrix{2, 2, Float64}
y00::Float64
y01::Float64
y10::Float64
y11::Float64
end

julia> M = rand(Thing2)
2×2 Thing2 with indices SOneTo(2)×SOneTo(2):
0.695919 0.624941
0.404213 0.0317816

julia> M.y00 += 1
1.6959194941562996

julia> M[1, 2] += 1
1.6249412302897646

julia> M * [2, 3]
2-element SArray{Tuple{2},Float64,1,2} with indices SOneTo(2):
10.266662679181893
0.9037708026795666

(旁注:Julia 索引从 1 开始,因此对 y 使用基于 1 的索引可能更惯用。或者, can create 具有自定义索引的数组类型,但这又是更多工作。)

关于julia - 修改名称基于数组内容的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59592446/

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