How to obtain indices of cell arrays?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Dandro18048
el 24 de Jun. de 2021
Comentada: Dandro18048
el 24 de Jun. de 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 comentarios
Respuesta aceptada
millercommamatt
el 24 de Jun. de 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
Más respuestas (0)
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!