How can I pick out two values of cell array with NaN without using a forloop and using indexing instead?

1 visualización (últimos 30 días)
Hi there. I have a cell with these properties:
whos all
Name Size Bytes Class Attributes
all 226051x1 32616672 cell
>> all{1,1}
ans =
60 48 62 32
I want the second and third element, such as all{1,1}(1,2:3)=[48 62]
So far I have done it in a forloop, like so:
Flag_DO=NDBCdata.F_DO_mgl;
rawDO=NDBCdata.DO_mgl;
fh1 =@(x)any(isnan(x(:)));
whereNaN_Flag_DO=cellfun(fh1, Flag_DO);
whereNaN_DO=cellfun(fh1, raw_DO);
mat1=cell2mat(whereNaN_Flag_DO);
mat2=cell2mat(whereNaN_DO);
itrs=size(Flag_DO);
itrs=max(itrs);
Store1=zeros(itrs,2);
ErrNum=cellfun(@double, Flag_DO, 'UniformOutput', false);
for gg=1:itrs
if mat1(gg) ==0 | mat2(gg) ==0
Num=ErrNum{gg,1}(1,2:3);
Store1(gg,:)=Num;
end
end
meaning=char(Store1);
I also noticed that the if statement isn't being used because the output is the same number of elements as the input, and there is definitely NaN's in the input.

Respuestas (1)

Matthew Eicholtz
Matthew Eicholtz el 27 de Jun. de 2013
If I understand you correctly, the following code should work:
a = {1:4;[5 nan 6 nan];[8 9 nan 10];[11 nan nan 12];13:16}; % arbitrary data
b = cell2mat(cellfun(@(c) c(2:3),a,'uni',0)); % resulting matrix
In this case, the variable a is what you are calling all (I don't suggest using variable names that are also built-in MATLAB functions), and b is what you are calling Store1.

Categorías

Más información sobre Matrices and Arrays 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!

Translated by