julia中是否有诸如repmat for struct之类的函数?
你能帮帮我吗。我想在Julia中生成结构的总体。在matalab中,我们可以使用repmat作为结构。但在朱莉娅身上,这是不可能的。《朱莉娅》中有类似repmat的功能吗 例如:julia中是否有诸如repmat for struct之类的函数?,julia,julia-jump,ijulia-notebook,julia-studio,Julia,Julia Jump,Ijulia Notebook,Julia Studio,你能帮帮我吗。我想在Julia中生成结构的总体。在matalab中,我们可以使用repmat作为结构。但在朱莉娅身上,这是不可能的。《朱莉娅》中有类似repmat的功能吗 例如: npop=20; struct individual position cost end individual1=individual([],[]) repmat(individual1,npop,1) repeat(individual1,npop,1) 及 但是我在Julia中找不到像rep
npop=20;
struct individual
position
cost
end
individual1=individual([],[])
repmat(individual1,npop,1)
repeat(individual1,npop,1)
及
但是我在Julia中找不到像repmat这样的函数。如果我正确理解您想要实现的目标(假设您想要执行某种ABM),这就是实现的方法:
[individual([],[]) for i in 1:npop]
这样,每个人都将被单独分配(这可能是您想要的)
作为旁注,出于性能原因,最好将类型添加到位置
和成本
。下面是一个示例,假设位置
是包含位置的两个元素元组的向量,成本
是浮动向量:
struct individual
position::Vector{Tuple{Float64,Float64}}
cost::Vector{Float64}
end
然后你应该写:
[individual(Tuple{Float64,Float64}[],Float64[]) for i in 1:npop]
编辑
注意Julia中的struct
是不可变的。这意味着您不能重新绑定位置
和成本
指向的值。因此,您有两种选择
备选案文1。将结构定义为可变的,如下所示:
然后你写的代码就可以工作了
选项2无需重新绑定即可更新
在不重新绑定的情况下更新结构中不可变的向量。例如(使用您最初的定义)
或者根据需要对其进行初始化:
pop = [individual(rand(0:1,10),[]) for i in 1:npop]
作为补充说明,请注意,在Julia中,通常不需要像在
(rand(0:1,10))“
中那样进行伴随。对向量的操作通常足够好。在选项2中(正常的struct
你将无法将二维对象附加到[]
一维对象上)。你在寻找吗?struct也是一项不必要的工作。我建议你通过添加作为输入的内容和预期结果来澄清你的问题。你考虑过使用数组吗{Individual,1}
这将代表您的人口?。请您再帮我一次。我如何初始化I=1:npop pop[I]的Individual
。位置=(rand(0:1,10))'结束
为什么出错?谢谢,我将扩展答案以涵盖此案例。如果您不介意,我可以寻求其他帮助吗?我希望有一个包含两列的总体。我这样编码popc=[个人(rand(0:1,nvar),[])以1:4表示I,以1:2表示j]
。有什么我不必使用j的吗?非常感谢muchI个人喜欢这种双重索引,因为它清楚地说明了正在发生的事情。你也可以编写例如重塑([个人(rand(0:1,nvar),[])1:npop],:,2)
或映射(x->个人(rand(0:1,nvar),[]),零(4,2))
但我认为没有一个更简单。
struct individual
position::Vector{Tuple{Float64,Float64}}
cost::Vector{Float64}
end
[individual(Tuple{Float64,Float64}[],Float64[]) for i in 1:npop]
mutable struct individual
position
cost
end
pop = [individual([],[]) for i in 1:npop]
for i=1:npop
append!(pop[i].position, rand(0:1,10))
end
pop = [individual(rand(0:1,10),[]) for i in 1:npop]