我如何使用ismember

时间:2013-10-27 09:15:25

标签: matlab matrix extract

假设

A=[32512199.30 5401000.29  347.33  
32512199.69 5401000.45  347.39    
32512199.67 5401001.32  353.58    
32512199.96 5401001.50  346.99    
32512196.71 5401001.69  346.62    ]

 B=[32512199.30 5401000.29  347.33  
    32512199.69 5401000.45  347.39     
    32512199.67 5401001.32  347.00     
    32512198.85 5401000.91  347.25     
    32512196.71 5401001.69  346.87     ]

我想使用ismember提取具有相同X和Y且不同Z的行.X是第一列,Y是第二列,Z是第三列。 在A和B中,我希望从B 32512199.67 5401001.32 353.5832512196.71 5401001.69 346.62中的A 32512199.67 5401001.32 347.0032512196.71 5401001.69 346.87 OR中提取 我该怎么做?

2 个答案:

答案 0 :(得分:1)

inds = find(~ismember(A, B, 'rows'));
new_inds = find(ismember(A(inds, 1:2), B(:, 1:2), 'rows'));
inds(new_inds)

答案 1 :(得分:0)

首先使用ismemberfind找到所需匹配的行索引。然后将这些行从A/B提取到XA/XB

row_idx = find ( ismember( ismember(A,B), [1 1 0], 'rows') )

XA = A(row_idx,:)
XB = B(row_idx,:)

输出:

row_idx =

   3
   5

XA =

   3.2512e+07   5.4010e+06   3.5358e+02
   3.2512e+07   5.4010e+06   3.4662e+02

XB =

   3.2512e+07   5.4010e+06   3.4700e+02
   3.2512e+07   5.4010e+06   3.4687e+02