问题
I have a matrix (call it X
) that is initialized to say zero(3)
.
I want to change the code so that X
is a cell array of size (say) (3,1)
and initialize each element to zero(3)
.
I can do it with a loop but is there a better way?
X = cell(3,1);
for ii=1:numel(X)
X{ii} = zeros(3);
end
回答1:
You can do this with deal()
.
>> [X{1:3, 1}] = deal(zeros(3))
X =
[3x3 double]
[3x3 double]
[3x3 double]
回答2:
An alternative way:
X = repmat({zeros(3)}, 3, 1);
another one:
X = cell(3,1);
X(:) = {zeros(3)};
回答3:
And yet another way:
X = {zeros(3)};
X(1:3,1) = X;
This solution uses the fact that you can assign to indices that lie beyond the variables size. Matlab will automatically expand in this case.
Similarly:
clear X;
X(1:3,1) = {zeros(3)};
来源:https://stackoverflow.com/questions/8195641/how-to-create-cell-array-in-matlab-and-initialize-all-elements-to-the-same-objec