Find rows and columns in matrix that meet a condition, fast
Show older comments
I have a large matrix S (could be as large as 1920x1080 pixels in an image) that contains labels assigned to patches of varying sizes within that image. It looks like this:

As it can be seen, S is divided into blocks labelled with uint32 numbers. Then I need to find the rows and columns that are equal to say 4803. The standard Matlab approach would be:
[m, n] = find(S == 4803);
To which it should return:
m =
5
6
5
6
n =
3
3
4
4
This operation gets called thousands of times and costs me hours of calculation. I have also experimented with bsxfun and it is still very slow. Can anyone suggest a faster way to accomplish this?
1 Comment
Stephen23
on 10 Aug 2016
Would it be possible to use logical indexing, or is it strictly required to get the row and column indices ?
Accepted Answer
More Answers (1)
RMello
on 17 Apr 2017
0 votes
if you want to find a row in matrix A that all elements are 4803 and your rows have 1080 elements, you do:
find(sum(A')==1080*4083)
if you want to find a column you take the ' off.
Categories
Find more on Descriptive Statistics 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!