# low speed of 'ismember' function

1 Ansicht (letzte 30 Tage)
Ehsan am 29 Aug. 2014
Kommentiert: Ehsan am 29 Aug. 2014
hi. in my code there is a for loop like the following:
for i=1:n
N=find(~ismember(Vector1,Vector2))
do something...
end
This loop is repeated several thousand times. 'ismember' function is very slow. So that most of the runtime for 'ismember' function lost. Is there any alternative to this?
##### 0 Kommentare-1 ältere Kommentare anzeigen-1 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

### Antworten (3)

Johan Löfberg am 29 Aug. 2014
If data is sorted, using ismembc could be a quick fix.
##### 2 Kommentare1 älteren Kommentar anzeigen1 älteren Kommentar ausblenden
Johan Löfberg am 29 Aug. 2014
Then I would scratch ismember and do sort+ismembc (ismember contains a lot of overhead. look into it and you will see that it basically does sort+ismembc once all data is checked etc)

Melden Sie sich an, um zu kommentieren.

David Sanchez am 29 Aug. 2014
Depending on your data, you might try to code your own function avoiding some conditions and calls to sub-functions within the ismember function.
You can take a look at ismember code with:
type ismember
and try to make it easier.
##### 3 Kommentare2 ältere Kommentare anzeigen2 ältere Kommentare ausblenden
Ehsan am 29 Aug. 2014
I just do not understand. What is your suggestion? Please change the code according to your suggestion.

Melden Sie sich an, um zu kommentieren.

Titus Edelhofer am 29 Aug. 2014
Hi,
does "Vector1" and "Vector2" changes in every iteration? Often you see something like
for i=1:n
v = ismember(x(i), y);
% do something
end
which can be changed to
vAll = ismember(x, y);
for i=1:n
% now do something with vAll(i)
end
Titus
##### 1 KommentarKeine anzeigenKeine ausblenden
Ehsan am 29 Aug. 2014
this is my code:
for k=1:nAnt
ant(k).Tour=randi([1,nCity],1,1);
end
for i=2:nCity
for k=1:nAnt
N=find(~ismember(1:nCity,ant(k).Tour));
% do somthing
end
end

Melden Sie sich an, um zu kommentieren.

### Kategorien

Find more on Loops and Conditional Statements in Help Center and File Exchange

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by