フィルターのクリア

How to access different FIELD in structure using CELLFUN

6 ビュー (過去 30 日間)
balandong
balandong 2017 年 11 月 28 日
回答済み: balandong 2017 年 11 月 30 日
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 件のコメント
per isakson
per isakson 2017 年 11 月 30 日
I don't think the mat-file matches the code. For example, it doesn't contain S.SBN
balandong
balandong 2017 年 11 月 30 日
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);

サインインしてコメントする。

回答 (1 件)

balandong
balandong 2017 年 11 月 30 日
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);

カテゴリ

Help Center および File ExchangeLabeling, Segmentation, and Detection についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by