# How to index a matrix with existing array?

47 visualizzazioni (ultimi 30 giorni)
Xiaohan Du il 3 Nov 2017
Modificato: Stephen23 il 3 Nov 2017
Hi all,
Imagine there is a m by m matrix, I'd like to extract the [p, q] element, while [p, q] is the output of some calculations. For instance:
K>> a = rand(3)
a =
0.88517 0.098712 0.67973
0.91329 0.26187 0.13655
0.79618 0.33536 0.72123
K>> b = [2 3]
b =
2 3
K>> a(b)
ans =
0.91329 0.79618
Here b is the location, which should be the 2nd row, 3rd column. However, here Matlab gives the 2nd and 3rd element by column indexing. What I want is 0.13655.
I know I can use:
K>> a(b(1), b(2))
ans =
0.13655
But this is manual, my matrix may have random dimension, so I prefer something like a(b), any ideas?
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Risposta accettata

Stephen23 il 3 Nov 2017
Modificato: Stephen23 il 3 Nov 2017
Simply use num2cell and sub2ind, then indices are not required:
>> c = num2cell(b);
>> a(sub2ind(size(a),c{:}))
ans = 0.13655
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Xiaohan Du il 3 Nov 2017
true MVP.

Accedi per commentare.

### Più risposte (1)

KL il 3 Nov 2017
Modificato: KL il 3 Nov 2017
use sub2ind
[row, col] = sub2ind(size(a),b(:,1),b(:,2))
or directly
a(sub2ind(size(a),b(:,1),b(:,2)))
##### 2 CommentiMostra NessunoNascondi Nessuno
Xiaohan Du il 3 Nov 2017
No, the manual index is what i'm trying to avoid, i.e. there cannot be:
b(:, 1), b(:, 2)
Xiaohan Du il 3 Nov 2017
Steve's answer is correct, but thanks anyway.

Accedi per commentare.

### Categorie

Scopri di più su Matrix Indexing in Help Center e File Exchange

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by