How can I assign values to elements with same index from multiple cells?
11 次查看(过去 30 天)
显示 更早的评论
I have a cell array with the same-size matrix in each cell, say,
a = cell(2);
[a{:}]=deal(rand(2));
and I want to change the first element of the matrix in each cell to values 1,2,3 and 4 respectively. Something equivalent to
a{:}(1,1) = 1:4;
would be ideal however this syntax doesn't work. Is there any other way?
2 个评论
Stephen23
2016-1-7
The best solution is to avoid cell arrays and use multi-dimensional numeric arrays. then this task is trivial to achieve. See Guillaume's answer for an example of how to do this.
采纳的回答
Guillaume
2016-1-7
编辑:Guillaume
2016-1-7
Matlab is not clever enough to expand inner indexing into outer cells (plus there's no guarantee it would work, some cells may not even have 4 elements). So you have to do it yourself and you don't have a choice but to use a loop:
vals = 1:4;
for idx = 1:numel(a)
a{idx}(1) = vals(idx);
end
However, if all the matrices are the same dimension, you could simply convert your cell array to a matrix, which then lets you use normal indexing. With your example:
alla = cat(3, a{:});
alla(1, 1, :) = 1:4;
%and if you want it back as a cell array
a = reshape(num2cell(alla, [1 2]), size(a))
0 个评论
更多回答(2 个)
Stalin Samuel
2016-1-7
[r c] = size(a);
val = 0;
for n1 = 1:r
for n2 = 1:c
val = val+1;
a{n1,n2}(1,1) = val;
end
end
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!