«Массив массивов» в Matlab? - PullRequest
8 голосов
/ 05 мая 2010

Эй, у меня проблемы. Попытка присвоить массив 1d переменной длины различным значениям массива, например

a(1) = [1, 0.13,0.52,0.3];
a(2) = [1, 0, .268];

Однако я получаю сообщение об ошибке:

???  In an assignment  A(I) = B, the number of elements in B and
 I must be the same.

Error in ==> lab2 at 15
a(1) = [1, 0.13,0.52,0.3];

Полагаю, это означает, что он ожидает скалярное значение вместо массива. Кто-нибудь знает, как присвоить массив этому значению?

Я бы предпочел не определять его непосредственно как двумерный массив, поскольку он решает различные проблемы в цикле

Редактировать: Понял!

a (1,1: 4) = [1, 0,13,0,52,0,3];

a (2,1: 3) = [1,0, 0,268];

1 Ответ

15 голосов
/ 05 мая 2010

Что вы, вероятно, хотели написать было

a(1,:) = [1, 0.13,0.52,0.3];
a(2,:) = [1, 0, .268];

Т.е. первая строка - [1, 0.13,0.52,0.3], а вторая строка - [1, 0, .268]. Это невозможно, потому что каково будет значение (2,4)?

Существует два способа решения проблемы.

(1) Использовать массивы ячеек

a{1} = [1, 0.13,0.52,0.3];
a{2} = [1, 0, .268];

(2) Если вы знаете максимально возможное количество столбцов, которые будут иметь ваши решения, вы можете предварительно выделить свой массив и записать результаты примерно так (если вы не будете предварительно распределять, вы будете получить нулевое заполнение. Вы также рискуете сильно замедлить ваш цикл, если есть много итераций, потому что массив придется создавать заново на каждой итерации.

a = NaN(nIterations,maxNumCols); %# this fills the array with not-a-numbers

tmp = [1, 0.13,0.52,0.3];
a(1,1:length(tmp)) = tmp;
tmp = [1, 0, .268];
a(2,1:length(tmp)) = tmp;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...