How to run find function faster?
Show older comments
Dear All,
I have an array A with 6000 elements in integers, for example, "10", "12", "5" and others. Actually array A saves the number of non-zero elements in each rows of a sparse matrix B. I want to do some calculations on those selected rows in B with certian number of non-zero elements. I want to find out the indecis of selected values "10", "12" and "5" in A.
I did the following:
[~,ind1] = find(A==10);
[~,ind2] = find(A==12);
[~,ind3] = find(A==5).
I found it took about 1 second which is too slow. I am wondering if there is a faster way to do this
Thanks a lot.
Benson
6 Comments
Stephen23
on 28 Jun 2021
"I am wondering if there is a faster way to do this"
It rather depends on what you are doing with those indices, which you did not tell us.
Benson Gou
on 28 Jun 2021
Stephen23
on 28 Jun 2021
As dpb already wrote, you should first try using (faster and more efficient) logical indexing, before using FIND.
James Tursa
on 28 Jun 2021
The overall goal isn't to make find( ) faster ... the overall goal is to make your code run faster. For that, we need to know what your overall code is doing. E.g., maybe there is a way to get your result without explicitly using find( ) at all. Please give us details about how you are using the results from find( ) downstream in your code.
Paul
on 29 Jun 2021
Is anyone else surprised that these three calls to find takes "about 1 second" for an 6000-element array of integers?
dpb
on 29 Jun 2021
Not without more details; "know nuthink!" of just how was timed or what was the platform.
Also, I've not compared, but that the A array is sparse could well be a factor as well...
Accepted Answer
More Answers (0)
Categories
Find more on Standard File Formats 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!