How can I pick out two values of cell array with NaN without using a forloop and using indexing instead?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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.
0 commentaires
Réponses (1)
Matthew Eicholtz
le 27 Juin 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.
0 commentaires
Voir également
Catégories
En savoir plus sur Matrices and Arrays dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!