# Looking for a way faster than find?

13 Ansichten (letzte 30 Tage)
Benson Gou am 21 Jun. 2021
Kommentiert: Joseph Cheng am 21 Jun. 2021
Dear All,
I have an array A. I want to find out the index of those "1" entries in the array A.
For example, A = [1 2 5 1 3 2 8 10 1]. I want to find out the indecis of those "1" in A.
I used logical indexing to find the location but cannot get the indecis.
a = A == 1;
a = [1 0 0 1 0 0 0 0 1].
How can I find the indecis of nonzero in a?
Thanks.
Benson
##### 0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

### Akzeptierte Antwort

Joseph Cheng am 21 Jun. 2021
Bearbeitet: Joseph Cheng am 21 Jun. 2021
without doing some testing to actually test if its faster you can use the found 1's in a to only select a list of indexes
A = [1 2 5 1 3 2 8 10 1];
a = A==1
a = 1×9 logical array
1 0 0 1 0 0 0 0 1
inds = [1:numel(A)];
inds(a)
ans = 1×3
1 4 9
##### 2 KommentareKeine anzeigenKeine ausblenden
Benson Gou am 21 Jun. 2021
Hi, Joseph,
I compared the speed between find and your code. I found the following:
tic
a = A == 1;
inds = 1:numel(a);
c = inds(a)
toc
Elapsed time is 0.004136 seconds.
tic;
find(A==1);
toc
Elapsed time is 0.000365 seconds.
Using find is faster than the above code.
Joseph Cheng am 21 Jun. 2021
but it did answer your i "I used logical indexing to find the location but cannot get the indecis... How can I find the indecis of nonzero in a?"

Melden Sie sich an, um zu kommentieren.

### Kategorien

Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by