using ismember to select row
12 次查看(过去 30 天)
显示 更早的评论
I am trying to use ismember, but not exactly sure it will do what i need.
I have an matrix of indices, not necessarily a sequential array, of values from 0 to 10.
A=[0 1 2 3 6 9 10]
I have a second array, a 3 column matrix, that is made of the values of A. Example below.
B= [0 1 3;
3 6 9;
0 3 8;
5 4 9]
I am looking for a way to select only those rows in B, that contain the values listed in A. The values in A can be used more than once, but all 3 columns have to have one of those values.
2 个评论
Image Analyst
2014-6-29
编辑:Image Analyst
2014-6-29
Since B is made up of values from A, then tell me how any row will not be selected? Can B contain other values, other than what is in A? You did not mention that that was possible, only that B is created from values in A. I just don't see anyway that all rows of B will not get selected unless you're not telling us something.
采纳的回答
Roger Stafford
2014-6-29
r = find(all(ismember(B,A),2));
The values in 'r' are indices of rows of B consisting entirely of element of A.
更多回答(1 个)
Geoff Hayes
2014-6-29
You can try the following
A = [0 1 2 3 6 9 10]
B = [0 1 3;3 6 9;0 3 8; 5 4 9]
B(arrayfun(@(x)all(ismember(B(x,:),A)),1:size(B,1))',:)
ans =
0 1 3
3 6 9
The code uses the anonymous function @(x)all(ismember(B(x,:),A)) to check to see which elements of row x are members of A ( ismember(B(x,:),A) ) returning ones for those elements in the row that are in A and zeros otherwise.
all is used to see if all elements are non-zero - so if a one is returned, then that means that all elements in that row of B are in A.
arrayfun is used to apply the anonymous function to each row of B using the row indices of 1:size(B,1). The transpose of this column vector produces a row vector of zeros and ones where the former indicates that not all elements of that row of B are in A and the latter indicates that all elements of that row of B are in A. We use this to grab those rows of B whose elements are all in A.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!