Filter matrix rows based on value of function in Matlab
显示 更早的评论
This seems like a simple question but I have been unable to find an answer anywhere. If I have a Matlab matrix "A" consisting of an arbitrary number of rows, how would I filter these rows based on the value of some function "f" (the argument of which is a row vector)? In other words, how would I keep only the rows of matrix A for which f is true? I tried
A(f(A(:)), :)
but to no success. Any help would be greatly appreciated.
So for example, if I have the matrix:
A =
1 1
1 2
1 3
1 4
2 1
2 2
2 3
2 4
3 1
3 2
3 3
3 4
4 1
4 2
4 3
4 4
And a function f that returns true only for inputs [1 2], [1 3], [2 4] and [3 4], my desired output would be:
ans =
1 2
1 3
2 4
3 4
采纳的回答
更多回答(1 个)
Azzi Abdelmalek
2013-2-18
n=size(A,1);
A(arrayfun(@(x) expression(A(x,:)),(1:n)','un',0))=[]
5 个评论
ARS
2013-2-18
Azzi Abdelmalek
2013-2-18
编辑:Azzi Abdelmalek
2013-2-18
expression(A(x,:))
%or
f(A(x,:))
but you have to specify your logical expression, (it's not a function)
ARS
2013-2-18
Azzi Abdelmalek
2013-2-18
编辑:Azzi Abdelmalek
2013-2-18
Try
n=size(A,1)
A(cell2mat(arrayfun(@(x) f(A(x,:)),(1:n)','un',0)),:)=[]
Also this is not a general solution, each expression has to be treated individually.
类别
在 帮助中心 和 File Exchange 中查找有关 Logical 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!