Как определить пустой массив символов в Matlab? - PullRequest
3 голосов
/ 01 июня 2010
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 Ответ

7 голосов
/ 01 июня 2010

Хотите ли вы, чтобы хромосомы были символьным массивом (если все строки имеют одинаковый размер) или массивом ячеек (с переменным размером 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...