我有以下代码
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
但它不起作用。有人可以帮忙!
答案 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以一次返回一行,为什么它会返回两行?