Как создать массив ячеек в MATLAB и инициализировать все элементы для одного и того же объекта? - PullRequest
10 голосов
/ 19 ноября 2011

У меня есть матрица (назовите ее X), которая инициализируется, чтобы сказать zero(3).

Я хочу изменить код так, чтобы X был массивом размера ячейки (скажем) (3,1) и инициализировать каждый элемент zero(3).

Я могу сделать это с помощью цикла, но есть ли лучший способ?

X = cell(3,1);
for ii=1:numel(X)
    X{ii} = zeros(3);
end

Ответы [ 3 ]

9 голосов
/ 19 сентября 2013

Альтернативный способ:

X = repmat({zeros(3)}, 3, 1);

еще один:

X = cell(3,1);
X(:) = {zeros(3)};
9 голосов
/ 19 ноября 2011

Вы можете сделать это с помощью deal().

>> [X{1:3, 1}] = deal(zeros(3))

X = 

    [3x3 double]
    [3x3 double]
    [3x3 double]
3 голосов
/ 19 сентября 2013

И еще один способ:

X = {zeros(3)};
X(1:3,1) = X;

Это решение использует тот факт, что вы можете назначать индексы, которые лежат за пределами размера переменных. Matlab автоматически расширится в этом случае.

Аналогично:

clear X;
X(1:3,1) = {zeros(3)};
...