Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

Question about vectorizing a search function

Asked by Brian

Brian (view profile)

on 25 Jun 2013

I have a Nx2 matrix, and I want to check for the existence of elements in the second column in my first column.

What I have set up is a binary tree, with a Nx2 matrix of point indices indicating which point is connected to what. (i.e.[1 2] means point 1 is connected to point 2, etc). For my terminal end points, they never exist as beginning points, only end points, so with the way I have it set up, they will never be found in the first column.

What I want to use is the find function, which is fast. I have something working with the ismember function, but that can get to be very slow with larger trees. Some sample code I have is:

   terminalIndices = ismember(connMx(:,2), connMx(:,1))

where connMx is my Nx2 matrix of point connection indices.

Other than that, what I would do (and saves some time with overlarge trees, but is too verbose) is looping from 1 to nPoints with the code:

   counter = 1;
   for i=1:nPoints
      a = find(ccoFaceMx(:,1) == i)
      if a ~= []
         termIdxArray(counter) = a
         counter = counter+1;

Again, for smaller trees this is fine, but I can at times have trees larger than 1000 elements, and this function begins to slow down considerably then.

Are there any alternatives to this? Thanks for your advice!



Brian (view profile)


No products are associated with this question.

1 Answer

Answer by Andrei Bobrov

Andrei Bobrov (view profile)

on 25 Jun 2013
[a,b] = ismember(ccoFaceMx(:,1),1:nPoints);
[a1,c,c] = unique(b(a));
d = (1:numel(a))';
out = [num2cell(a1), accumarray(c,d(a),[],@(x){x})];

1 Comment


Brian (view profile)

on 25 Jun 2013


This worked pretty well, but it seemed to do the exact opposite of what I wanted: it gave me entries that existed in the first column, when I wanted those that did not.

Still, though, thanks, this seems to be an improvement over what I had before.

Andrei Bobrov

Andrei Bobrov (view profile)

Contact us