I have a matrix of variable dimension and would like to access it with an index stored in a variable, something like this:
matrix = [1, 2; 3, 4; 5, 6]
idx = [3, 1]
elem = matrix(idx) % should result in access to element (3, 1) => 5
Of course, this does not work and will instead get element numbers 3 and 1 (which have values 3 and 1 in that case).
I know sub2ind, but that does not help either, since the number of dimensions is variable. Is there a built-in solution for my problem or will I have to write an access method by myself? (It's not too difficult, but a built-in solution would be preferable.)

1 commentaire

Mikhail
Mikhail le 5 Nov 2014
Yeah, I don't know simple solution too.

Connectez-vous pour commenter.

 Réponse acceptée

Guillaume
Guillaume le 5 Nov 2014

1 vote

You can use cell expansion to comma separated list to index your matrix. So first convert your index matrix into a cell array, then convert the cell array into a list:
c = num2cell(idx);
matrix(c{:}); %expand c into comma separated list

5 commentaires

Michael B.
Michael B. le 5 Nov 2014
I think this is what I'm looking for. However, it would be nice if Matlab would provide a more smoothly integrated solution with no need for an extra line of code.
Mikhail
Mikhail le 5 Nov 2014
matrix(num2cell(idx){:}) - 1 line
Mikhail
Mikhail le 5 Nov 2014
doesn't work this way, sorry
I agree. Unfortunately, the way matlab is designed prevents any simpler method.
Saying that, you can always write your own helper function based on this:
function v = matindex(matrix, vecidx)
%MATINDEX use vector vecidx as an nD index intro matrix to return value v
cidx = num2cell(vecidx);
v = matrix(cidx{:});
end
Michael B.
Michael B. le 6 Nov 2014
And that's exactly why I wonder even more about the lack of a built-in way to do it - it would be so simple.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by