如何在matlab中定义空字符数组?

时间:2010-05-31 20:23:13

标签: matlab

for i=1:POPULATION_SIZE
    for j=1:NO_PARAMETERS
        c=dec2bin(parameters(j),NO_BITS_PARAMETER);
        chromosomes(i) = [chromosomes(i) c];
    end
end

上面的代码给出了以下错误:

  

???未定义的函数或方法'染色体'用于'double'类型的输入参数。

我需要一个名为chromosomes的空字符数组。 我尝试在上面的循环之前添加以下行。

chromosomes(1:POPULATION_SIZE)='';

但它不起作用。它给出了错误

??? Index of element to remove exceeds matrix dimensions.

1 个答案:

答案 0 :(得分:7)

您希望染色体是字符数组(当所有行具有相同大小时)或单元格数组(具有可变大小的第i个元素)吗?

在第一种情况下,您将变量定义为:

chromosomes = char(zeros(POPULATION_SIZE,NO_PARAMETERS*NO_BITS_PATAMETER));

chromosomes = repmat(' ',POPULATION_SIZE,NO_PARAMETERS*NO_BITS_PATAMETER); 

然后进入for循环:

chromosomes(i,(j-1)*NO_BITS_PATAMETER+1:j*NO_BITS_PATAMETER) = c;

在单元格数组的情况下:

chromosomes = cell(POPULATION_SIZE, NO_PARAMETERS); % each paramater in separate cell
for i=1:POPULATION_SIZE
    for j=1:NO_PARAMETERS
        c=dec2bin(parameters(j),NO_BITS_PARAMETER);
        chromosomes{i,j} = c;
    end
end

chromosomes = cell(POPULATION_SIZE,1); % all parameters in a single cell per i
for i=1:POPULATION_SIZE
    for j=1:NO_PARAMETERS
        c=dec2bin(parameters(j),NO_BITS_PARAMETER);
        chromosomes{i} = [chromosomes{i} c];
    end
end

修改

实际上,您可以同时将DEC2BIN应用于整个数字数组。看起来变量parameters对于每个第i行都是相同的。然后你可以这样做:

c = dec2bin(parameters,NO_BITS_PARAMETER);
chromosomes = reshape(c',1,[]);
chromosomes = repmat(chromosomes,POPULATION_SIZE,1);