How to populate a cell array with vector elements?
    7 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Yerzhigit Bapin
 el 4 de Jul. de 2017
  
    
    
    
    
    Comentada: Guillaume
      
      
 el 4 de Jul. de 2017
            I have a cell array consisting of n-number of cells, each of different size. I also have a vector consisting of n-number of elements. I'd like to populate the cells with the corresponding elements from the vector.
1 comentario
  Jan
      
      
 el 4 de Jul. de 2017
				
      Editada: Jan
      
      
 el 4 de Jul. de 2017
  
			Is this a homework question? If it is: Sorry for posting the easy solution. Note that providing it as your solution would be a kind of cheating. If you ask a homework question, clarify this detail such that the answer can be formulated as hints and you have the chance to solve it by your own.
Respuesta aceptada
  Jan
      
      
 el 4 de Jul. de 2017
        
      Editada: Jan
      
      
 el 4 de Jul. de 2017
  
      What have you tried so far? This is easy with a loop:
C = {ones(1, 3); ones(1, 7); ones(1, 5)};
x = [3; 5, 7];
for k = 1:numel(C)
  C{k} = C{k} * x(k);
end
There are some alternatives, which might be needed, if this is a homework question. Hint:
index = [1,1,1];
value = 8;
value(index)
Más respuestas (2)
  Jan
      
      
 el 4 de Jul. de 2017
         I have a cell array consisting of n-number of cells
I assume this means:
n = 17;
C = cell(1, n);
But what does this mean:
 each of different size.
? A short explanation would avoid to let the readers guess.
 I also have a vector consisting of n-number of elements.
Perhaps this is:
x = rand(1, n)
and
 I'd like to populate the cells with the corresponding elements from the vector.
might mean:
for k = 1:numel(C)
  C{k} = x(k);
end
Or easier:
C = num2cell(x);
Does this help? If not explain what "each of different size" means.
1 comentario
  Guillaume
      
      
 el 4 de Jul. de 2017
        Assuming you want to append the elements of your vector to vectors in the corresponding cells of your cell array:
result = arrayfun(@(c, el) [c{1}, el], yourcellarray, yourvector, 'UniformOutput', false);
The above assumes that the vectors in the cell arrays are row vectors. If they are column vectors, then it's [c{1}; el]
6 comentarios
  Jan
      
      
 el 4 de Jul. de 2017
				@Yerzhigit Bapin: Do you see that an answer is much easier now after you have explained the wanted procedure clearly?
  Guillaume
      
      
 el 4 de Jul. de 2017
				OH, that certainly wasn't clear from the initial question.
A one-liner solution:
result = arrayfun(@(c, el) repmat(el, size(c{1})), yourcellarray, yourvector, 'UniformOutput', false);
Ver también
Categorías
				Más información sobre Data Type Identification 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!

