How to obtain indices of cell arrays?
    4 views (last 30 days)
  
       Show older comments
    
    Dandro18048
 on 24 Jun 2021
  
    
    
    
    
    Commented: Dandro18048
 on 24 Jun 2021
            
I have dozens of cell arrays like this that are the output of a long 'for' loop. I need to find the first and the last non-zero indices in each row. For example in the case of the sreenshot attached, I would like to get an output of: [1,3] for the first non-zero cell and [1,8] for the last non-zero cell in this specfic row. Obviously, the postion of non-zero cells and empty cells are very different in each iteration of my loop, so of course I wouldn't know beforehand the postions in the array of the results that I'm looking for, as opposite to the case of the screenshot attached.
I have tried using the function 'find', 'any', etc, but I always get the same error: 'The function is not defined for inputs of type 'cell''
Any ideas please? 
0 Comments
Accepted Answer
  millercommamatt
      
 on 24 Jun 2021
        There might be an easier way to do this, but it works.
% get the indices of all non-empty cells
[row,col] = find(cellfun(@(x) ~isempty(x),YourCell));
% grab the cell array size
[numrows, numcols] = size(YourCell);
% preallocate
firstcol_index = NaN(numrows,1);
lastcol_index = NaN(numrows,1);
% get the first and last index for each row, leave NaN if all cols empty
for ii = 1:numrows
   single_row_col_inds = col(row == ii);
   if ~isempty(single_row_col_inds)
      firstcol_index(ii) = min(single_row_col_inds);
      lastcol_index(ii) = max(single_row_col_inds);
   else
       continue
   end
end
More Answers (0)
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!
