sirve que para not isempty array matlab matrix cell-array is-empty

matlab - que - isempty php



Reemplace las celdas vacías con 0 lógicos antes de cell2mat en MATLAB (2)

Si sabe que la matriz de celdas solo contendrá una y [] (que representan sus ceros), puede usar la función cellfun para obtener un índice lógico de las celdas vacías, luego anule el vector de índice:

mylogicalarray = ~cellfun(@isempty, mycellarray); % Or the faster option (see comments)... mylogicalarray = ~cellfun(''isempty'', mycellarray);

Si sus celdas aún pueden contener valores cero (no solo [] ), puede reemplazar las celdas vacías con 0 utilizando primero la función cellfun para encontrar un índice para las celdas vacías:

emptyIndex = cellfun(''isempty'', mycellarray); % Find indices of empty cells mycellarray(emptyIndex) = {0}; % Fill empty cells with 0 mylogicalarray = logical(cell2mat(mycellarray)); % Convert the cell array

Tengo una matriz de celdas vacías y unas que quiero convertir en una matriz lógica, donde las celdas vacías son ceros. Cuando uso cell2mat, las celdas vacías se ignoran, y termino con una matriz de solo 1, sin referencia al índice anterior que tenían. ¿Hay alguna manera de realizar esta operación sin usar bucles?

Código de ejemplo:

for n=1:5 %generate sample cell array mycellarray{n}=1; end mycellarray{2}=[] %remove one value for testing

Cosas que he probado:

mylogicalarray=logical(cell2mat(mycellarray));

lo que resulta en [1,1,1,1], no [1,0,1,1,1].

for n=1:length(mycellarray) if isempty(mycellarray{n}) mycellarray{n}=0; end end mylogicalarray=logical(cell2mat(mycellarray));

que funciona, pero utiliza bucles.


mycellarray( cellfun(@isempty, mycellarray) ) = {0}; mylogicalarray = logical(cell2mat(mycellarray));