如何在 Julia 中用 2 X 20 数组分配 50 X 20 数组

How to assign 50 X 20 array with 2 X 20 array in Julia

我有以下代码

x=zeros(50,20)
for i=1:50
    slect=roulette_select(cprob,pop) # it's a function return 2 X 20 array 
    x[i,:]=slect
end

但它不起作用。有人可以帮忙吗!

使用完全独立的示例可能会更清楚:

k = 2

function roulette_select (a,b)
    return ones(k,20)
end

cprob = 0.5
pop = 1

x=zeros(50,20)
for i=1:50
    slect=roulette_select(cprob,pop)
    x[i,:]=slect
end

此代码抛出错误:

ERROR: DimensionMismatch("tried to assign 2x20 array to 1x20 destination")

...但是如果我们在第一行设置k = 1,它运行正常。

问题是 x[i,:]=slect 分配给 1x20 目标,因此需要提供 1x20 数组。

您的问题是您尝试将两列分配给一列,正如错误消息所说。您可以同时分配两行(修改 Simon 的示例):

k = 2

function roulette_select (a, b)
    return ones(k, 20)
end

cprob = 0.5
pop = 1

x = zeros(50, 20)
for i = 1:2:50    # <-- You skip over each second line (25 iterations)
    slect = roulette_select(cprob, pop)
    x[i:i+1,:] = slect    # <--- you have to change two lines (i and i+1) at once
end

您可以这样做,或者如果可能,一次将 roulette_select 修改为 return 一行,为什么它 return 两行?