2016-05-11 9 views
0

私はここで何が起こっているのにこだわっている。これは私の理解であるので、C{1}には文字列の列があります。このような何か:matlabのコードの理解

A231 
A354 
A356 
A234 
. 
. 
pattern continues until the end 

idsは、その列のコピーを取得し、idmlhは、この場合の行列であるセルアレイの第二の要素となります。空の配列がidsCoidxに作成されます。次に、idsの列のすべての行を調べて、その行にあるものが、同様の次元がidsparIDsの別のデータ構造にあるかどうかを確認します。これは最初の混乱がどこに来るかです。

メンバーでない場合は、インデックス値をidxに保存しますか?そしてそれがメンバーなら、何が起こるのでしょうか?

この部分についての最も不確かイム:以下

else 
     [~,~,ii] = intersect(ids{cnt}, parIDs) ; 
     idsCo = [idsCo ; Lbll(ii) ] ; 
    end 
end 
ids(idx) = [] ; 
idmlh(idx,:) = [] ; 

は完全なコードです:

ids = C{1} ; 
idmlh = C{2} ; 
idsCo = [] ; 
idx = [] ; label for 
for cnt=1:length(ids) 
    if ~ismember(strtrim(ids{cnt}), parIDs) 
     idx = [idx cnt] ; 
    else 
     [~,~,ii] = intersect(ids{cnt}, parIDs) ; 
     idsCo = [idsCo ; Lbl(ii) ] ; 
    end 
end 
ids(idx) = [] ; 
idmlh(idx,:) = [] ; 
+0

「parIDs」とは何ですか? 「Lbll」とは何ですか? – Crowley

+0

@Crowleyはどちらも1列の配列です。 parIDsは同じタイプのデータを持ち、列の各行に文字列があります。 Lbllは1つの列に1または0を持つだけです –

答えて

0
1: ids = C{1} ; 
2: idmlh = C{2} ; 
3: idsCo = [] ; 
4: idx = [] ; label for 
5: for cnt=1:length(ids) 
6: if ~ismember(strtrim(ids{cnt}), parIDs) 
7: idx = [idx cnt] ; 
8: else 
9: [~,~,ii] = intersect(ids{cnt}, parIDs) ; 
10: idsCo = [idsCo ; Lbl(ii) ] ; 
11: end 
12: end 
13: ids(idx) = [] ; 
14: idmlh(idx,:) = [] ; 

何をすべきかstrtrimintersect知ることが不可欠である...

idsのすべての要素のループで、彼女のcns番目の要素はparIDs配列の一部です。

それは(~ismembertrueとして評価されている)でない場合、実際のcnt値がidx配列に付加されます。

それは(~ismemberfalseとして評価される)のメンバーである場合、それは両方の配列にあるids{cnt}のどの要素(1×1)とparIDs(Nx1の)尋ねます。要素の値は無視され([~,...)、最初の配列のこの要素のインデックスも無視されます(...,~,...)。 2番目の配列の要素のインデックスはii...,ii]=)に割り当てられます。 Lblii番目の要素は、idsCo配列に追加されます。

parIDsにないidsの要素とidmlhの要素は、空の配列に置き換えられます。