Объединенный эквивалент в MATLAB для одного значения - PullRequest
0 голосов
/ 20 января 2012

Я пытаюсь использовать MATLAB, чтобы сгенерировать переменную, элементы которой равны 0 или 1. Я хочу определить эту переменную, используя некоторую конкатенацию (эквивалент добавления строки Java), чтобы я мог добавить столько нулей и1 согласно некоторому верхнему пределу.

Я могу думать только об использовании цикла for для добавления значений в существующую переменную.Что-то вроде

variable=1;
for i=1:N
    if ( i%2==0)
        variable = variable.append('0')
    else 
        variable = variable.append('1')
    i=i+1;
end

Есть ли лучший способ сделать это?

Ответы [ 2 ]

4 голосов
/ 20 января 2012

В MATLAB вы почти всегда можете избежать цикла, обрабатывая массивы векторным способом.

Результат предоставленного вами псевдокода может быть получен в одну строку как:

variable = mod((1:N),2);

Вышеуказанная строка генерирует вектор строки [1,2,...,N] (с кодом (1:N),используйте (1:N)', если вам нужен вектор-столбец), и функция mod (как и большинство функций MATLAB) применяется к каждому элементу, когда он получает массив.

2 голосов
/ 20 января 2012

Недопустимый код Matlab:

  1. % указывает на начало комментария, следовательно, вводит синтаксическую ошибку.
  2. Не существует метода append (впо крайней мере, для массивов).
  3. Нет необходимости увеличивать индекс в цикле for.

Кроме того, плохая идея использовать переменные Matlab для "роста" в качестве памятинеобходимо перераспределять каждый раз, значительно замедляя его.Правильный подход:

variable=zeros(N,1);
for i=1:N
    variable(i)=mod(i,2);
end

Если вы действительно хотите увеличивать переменные (иногда это неизбежно), вы можете использовать это:

variable=[variable;1];

Используйте ; для добавления строк, используйте , для добавления столбцов (аналогично vertcat и horzcat).Используйте cat, если в вашем массиве более двух измерений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...