How to index a matrix with existing array?

48 visualizaciones (últimos 30 días)
Xiaohan Du
Xiaohan Du el 3 de Nov. de 2017
Editada: Stephen23 el 3 de Nov. de 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?

Respuesta aceptada

Stephen23
Stephen23 el 3 de Nov. de 2017
Editada: Stephen23 el 3 de Nov. de 2017
Simply use num2cell and sub2ind, then indices are not required:
>> c = num2cell(b);
>> a(sub2ind(size(a),c{:}))
ans = 0.13655

Más respuestas (1)

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

Iniciar sesión para comentar.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by