How to obtain indices of cell arrays?
2 ビュー (過去 30 日間)
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?
millercommamatt 2021 年 6 月 24 日
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);
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);
firstcol_index(ii) = min(single_row_col_inds);
lastcol_index(ii) = max(single_row_col_inds);