理解matlab代码片段

时间:2016-05-11 13:54:04

标签: matlab

我陷入了这里发生的事情。这是我的理解,因此,C{1}有一列字符串。像这样的东西:

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,:) = [] ;

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数组。

如果不是(~ismember被评估为true),那么实际的cnt值将附加到idx数组。

如果它是成员(~ismember被评估为false),那么它会询问两个数组中ids{cnt}(1x1)和parIDs(Nx1)的哪些元素。忽略元素的值([~,...),也忽略第一个数组中此元素的索引(...,~,...)。第二个数组中元素的索引分配给ii...,ii]=)。 然后ii的{​​{1}}元素附加到Lbl数组。

最后,idsCoids及其idmlh中不属于parIDs的对应元素被空数组替换。