if A
is a series of points coordinate in 2D, for example:
>> A = [1 2; 3 4; 5 6; 7 8; 9 0];
A =
1 2
3 4
5 6
7 8
9 0
and B
contained two cells which each cell is a portion of 'A' and represented just with x
values (first column), means:
>> B = {[3; 7];[5]}
B =
[2x1 double]
[ 5 ]
I am looking for a solution to search B
cells into A
and give the coordinates of those points.
This is my code which is very slow for a large set of data:
C = cell (length(B) ,1)
for i = 1 : length(B)
C{i} = A(ismember(A(:,1),B{i},'rows'),:);
end
C
is the right answer and include 2 cells which are coordinates of each cell of B
:
C =
[2x2 double]
[1x2 double]
>> C{1}
ans =
3 4
7 8
and
>> C{2}
ans =
5 6
Again, although C
is the correct answer, I am looking for a more efficient solution. Probably cellfun
?
You don't need to use 'rows'
with ismember
there. So, you can just do -
for k = 1 : numel(B)
C{i}=A(ismember(A(:,1),B{k}),:);
end
Not sure if that would speedup your solution though.
As a second approach and this could be faster (not tested though), you can use bsxfun
-
for k = 1 : numel(B)
C{k} = A(any(bsxfun(@eq,A(:,1),B{k}.'),2),:);
end
Of course, before using either of the approaches, do pre-allocate
with -
C = cell (numel(B) ,1)