How can I assign values to elements with same index from multiple cells?
11 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hamid Arbabi
el 7 de En. de 2016
Respondida: Hamid Arbabi
el 7 de En. de 2016
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 comentarios
Stephen23
el 7 de En. de 2016
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.
Respuesta aceptada
Guillaume
el 7 de En. de 2016
Editada: Guillaume
el 7 de En. de 2016
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 comentarios
Más respuestas (2)
Stalin Samuel
el 7 de En. de 2016
[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 comentarios
Ver también
Categorías
Más información sobre Matrix Indexing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!