Find rows and columns in matrix that meet a condition, fast
Ältere Kommentare anzeigen
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 Kommentar
Stephen23
am 10 Aug. 2016
Would it be possible to use logical indexing, or is it strictly required to get the row and column indices ?
Akzeptierte Antwort
Weitere Antworten (1)
RMello
am 17 Apr. 2017
0 Stimmen
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.
Kategorien
Mehr zu Descriptive Statistics finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!