Как создать ячейку-массив в MATLAB и инициализировать все элементы в один и тот же объект?

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

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

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

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

3 ответов


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

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

X = 

    [3x3 double]
    [3x3 double]
    [3x3 double]

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

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

другой:

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

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

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

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

так же:

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