MATLAB Answers

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

43 views (last 30 days)
Dean Ranmar on 20 Dec 2016
Edited: Jan on 26 Dec 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?

#### 1 Comment

Dean Ranmar on 20 Dec 2016
Of course "ndx" is a true/false matrix of same dimension as matrix Amat.

Sign in to comment.

### Accepted Answer

Jan on 20 Dec 2016
Edited: Jan on 26 Dec 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 Comments

Dean Ranmar on 20 Dec 2016
Thanks! The key is the ind2sub function. Excellent.
Dean Ranmar on 20 Dec 2016
Actually, it should be sub2ind, not ind2sub. Thanks again. BTW, I should have neat rather than elegant and your solution is neat.

Sign in to comment.

### More Answers (1)

Mischa Kim on 20 Dec 2016
Would this do the trick?
Adx = Amat(Amat(:)>THR(:))

#### 4 Comments

Show 1 older comment
Dean Ranmar on 20 Dec 2016
ncol = number of columns in the array Amat.
Dean Ranmar on 20 Dec 2016
sorry! I switched the index names on you: ndr == rdx and ndc == rdc.
Dean Ranmar on 20 Dec 2016
ndc == cdx

Sign in to comment.

Sign in to answer this question.

Translated by