带条件的行选择- Matlab



我想从下表(NEW)中取Edge列(即NEW.Edge(i,1))的第一列的值等于某个数字(N), Edge列(即NEW.Edge(i,2))的第二列的值为not equal to the values of array (IDs)的行。例如,如果N=2IDs=15,20,那么我应该从第1行到第9行。

目前我试过的代码是:

Y =[];
for i = 1:size(NEW,1)
    if ((NEW.Edge(i,1)==N) & (sum(ismember(IDs,NEW.Edge(i,2))==0)))
        Y = NEW.Edge(i,1)&NEW.Edge(i,2);
    end
end

Y = ((NEW.Edge(i,1)==N) & (sum(ismember(IDs,NEW.Edge(i,2))==0)))
Lines = NEW (Y,:)

表——"新"

  Event      Node      Edge  
_________    ____    ________
edgetonew    NaN      2     6
edgetonew    NaN      2     7
edgetonew    NaN      2     8
edgetonew    NaN      2     9
edgetonew    NaN      2    10
edgetonew    NaN      2    11
edgetonew    NaN      2    12
edgetonew    NaN      2    13
edgetonew    NaN      2    14
edgetonew    NaN      2    15
edgetonew    NaN     15    16
edgetonew    NaN     15    17
edgetonew    NaN     15    18
edgetonew    NaN     15    19
edgetonew    NaN     15    20
edgetonew    NaN     20    21

您可以使用ismember和逻辑索引来完成此操作。如果第一个输入中的每个值在第二个输入的任何位置都,则ismember将返回一个布尔数组,其大小与第一个输入的值true相同。

% Will be TRUE when the first column == N and the second column isn't in IDs
rows_to_keep = NEW.Edge(:,1) == N & ~ismember(NEW.Edge(:,2), IDs);
% Now use this logical array to grab just the rows that satisfy the condition
out = NEW(rows_to_keep,:);

最新更新