Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
julia中是否有诸如repmat for struct之类的函数?_Julia_Julia Jump_Ijulia Notebook_Julia Studio - Fatal编程技术网

julia中是否有诸如repmat for struct之类的函数?

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

你能帮帮我吗。我想在Julia中生成结构的总体。在matalab中,我们可以使用repmat作为结构。但在朱莉娅身上,这是不可能的。《朱莉娅》中有类似repmat的功能吗

例如:

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]