如何在Julia中分配50 X 20阵列和2 X 20阵列

时间:2015-03-21 19:38:52

标签: arrays 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

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

2 个答案:

答案 0 :(得分:2)

对于一个完全独立的例子,这可能更清楚:

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阵列。

答案 1 :(得分:2)

您的问题是您尝试将两列分配给一列,正如错误消息所示。您可以在同一个go中分配两行(通过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以一次返回一行,为什么它会返回两行?