How to index a matrix with existing array?

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?

 Réponse acceptée

Stephen23
Stephen23 le 3 Nov 2017
Modifié(e) : Stephen23 le 3 Nov 2017
Simply use num2cell and sub2ind, then indices are not required:
>> c = num2cell(b);
>> a(sub2ind(size(a),c{:}))
ans = 0.13655

Plus de réponses (1)

KL
KL le 3 Nov 2017
Modifié(e) : KL le 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 commentaires

No, the manual index is what i'm trying to avoid, i.e. there cannot be:
b(:, 1), b(:, 2)
Xiaohan Du
Xiaohan Du le 3 Nov 2017
Steve's answer is correct, but thanks anyway.

Connectez-vous pour commenter.

Catégories

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by