我想从下表(NEW
)中取Edge
列(即NEW.Edge(i,1)
)的第一列的值等于某个数字(N), Edge
列(即NEW.Edge(i,2)
)的第二列的值为not equal to the values of array (IDs)
的行。例如,如果N=2
和IDs=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,:);