How to replace cell values with consecutive values related to their index
    3 views (last 30 days)
  
       Show older comments
    
For example:
a = 1x3 cell array
columns 1 through 3
{1x1} {1x5} {1x3}
I'd like to be able to replace the values in each cell array with consecutive values so that:
a = 1x3 cell array
{[1]} {[2 3 4 5 6]} {[7 8 9]}
Thanks!
0 Comments
Accepted Answer
  dpb
      
      
 on 29 May 2021
        c=[{cell(1,1)} {cell(1,5)} {cell(1,3)}];        % original cell array
% engine
n=cellfun(@numel,c);
v=1:sum(n);
i1=1;
for i=1:numel(n)
  i2=i1+n(i)-1;
  c{i}=v(i1:i2);i1=i2+1;
end
results in
>> c
c =
  1×3 cell array
    {[1]}    {1×5 double}    {1×3 double}
>> c{:}
ans =
     1
ans =
     2     3     4     5     6
ans =
     7     8     9
>> 
There's probably a clever accumarray() or arrayfun() syntax to avoid the explicit loop, but nothing came to me quickly...
More Answers (1)
  Stephen23
      
      
 on 29 May 2021
        
      Edited: Stephen23
      
      
 on 29 May 2021
  
      Simpler:
C = {cell(1,1),cell(1,5),cell(1,3)}
N = cellfun(@numel,C);
D = mat2cell(1:sum(N),1,N)
1 Comment
  dpb
      
      
 on 29 May 2021
				That's what I intended, but kept muffing the mat2cell syntax...it's always thrown me for a loop for some reason -- rarely ever use it I guess is likely cause.
See Also
Categories
				Find more on Matrix Indexing in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

