How do I combine two index vectors to form a 2D index matrix?

4 Ansichten (letzte 30 Tage)
Dean Ranmar
Dean Ranmar am 20 Dez. 2016
Bearbeitet: Jan am 26 Dez. 2016
I have two methods for identifying which elements in a matrix have certain properties (e.g.; exceed a threshold).
ndx = Amat > THR; % matrix of threshold crossing locations
and:
[rdx, cdx] = find(Amat>THR); % vectors of threshold crossing locations
that I use for two different purposes [and actually apply to different matrices.] Results from the two methods are compared eventually. I'd like to take the two vectors (rdx, cdx) and convert them to a matrix so I can do an operation such as:
Adx = Amat(ndx); % matrix of threshold crossing amplitudes
which is done for the former case. I'm sure there's a simple way to take the two vectors and combine them to produce "pointer" matrix "ndx," but I haven't found it.
Help?

Akzeptierte Antwort

Jan
Jan am 20 Dez. 2016
Bearbeitet: Jan am 26 Dez. 2016
Does not look elegant:
[rdx, cdx] = find(Amat > THR);
Index = sub2ind(size(Amat), rdx, cdx); % [EDITED, was ind2sub...]
ndx = false(size(Amat));
ndx(Index) = true;
  2 Kommentare
Dean Ranmar
Dean Ranmar am 20 Dez. 2016
Thanks! The key is the ind2sub function. Excellent.
Dean Ranmar
Dean Ranmar am 20 Dez. 2016
Actually, it should be sub2ind, not ind2sub. Thanks again. BTW, I should have neat rather than elegant and your solution is neat.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Mischa Kim
Mischa Kim am 20 Dez. 2016
Would this do the trick?
Adx = Amat(Amat(:)>THR(:))
  4 Kommentare
Dean Ranmar
Dean Ranmar am 20 Dez. 2016
sorry! I switched the index names on you: ndr == rdx and ndc == rdc.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Operating on Diagonal Matrices 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