How to access different FIELD in structure using CELLFUN

5 vues (au cours des 30 derniers jours)
balandong
balandong le 28 Nov 2017
Dear all, the objective was to access multiple fields (3 fields) located in multiple cell container. CELLFUN was used to make the coding more compact. The data from the 3 fields from each cell were then combine in a matrix. The code below demonstrated clearly what I tried to achieve. However, as can be seen below, the code is very lengthy. I wonder if this code can be further simplified by utilizing the CELLFUN, or any suitable FUNCTION. I really appreciate for any tips.
The end result should that like EachComb CELL
load('help_strcCellFun.mat');
vec_SBN_table=cellfun(@(S) S.SBN, result, 'uni',true);
nSizeComb=size(vec_SBN_table,2); % Equal to s.TotalCombntn
C_x=1;
for f_x=1:nSizeComb
xx_TPR{C_x}= vec_SBN_table(f_x).TPR ;
xx_TNR{C_x}= vec_SBN_table(f_x).TNR ;
xx_ACC{C_x}= vec_SBN_table(f_x).ACC ;
C_x=C_x+1;
end
nSizeCPT_ROW=size(s.CptPair,1);
yy_SeqNo=repmat((1:nSizeCPT_ROW)',1,s.TotalCombntn);
yy_TPR=reshape(horzcat(xx_TPR{:}),nSizeCPT_ROW,[]);
yy_TNR=reshape(horzcat(xx_TNR{:}),nSizeCPT_ROW,[]);
yy_ACC=reshape(horzcat(xx_ACC{:}),nSizeCPT_ROW,[]);
EachComb=cell(nSizeComb,1);
for f_x=1:nSizeComb
comb(:,1)=yy_SeqNo(:,f_x); % Sequence No
comb(:,2)=yy_TPR(:,f_x);
comb(:,3)=yy_TNR(:,f_x);
comb(:,4)=yy_ACC(:,f_x);
EachComb{f_x,1}= comb;
end
  2 commentaires
per isakson
per isakson le 30 Nov 2017
I don't think the mat-file matches the code. For example, it doesn't contain S.SBN
balandong
balandong le 30 Nov 2017
Hi Per, The capital S is the Variable (I am dont know the actual name for it) similar to x as in the following line.
Cpositives = cellfun(@(x) x(x>0), C, 'UniformOutput',false);

Connectez-vous pour commenter.

Réponses (1)

balandong
balandong le 30 Nov 2017
The following line were much more shorter than the originally proposed.
load('help_strcCellFun.mat');
vec_SBN_TPR=cellfun(@(S) S.SBN.TPR, result, 'uni',false);
vec_SBN_TNR=cellfun(@(S) S.SBN.TNR, result, 'uni',false);
vec_SBN_ACC=cellfun(@(S) S.SBN.ACC, result, 'uni',false);
endExtractedData = arrayfun(@(k) [vec_SBN_TPR{k}; vec_SBN_TNR{k};vec_SBN_ACC{k}]',1:s.TotalCombntn,'un',0);

Catégories

En savoir plus sur Structures 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!

Translated by