Indexing an array with a vector
Mostra commenti meno recenti
I would like to index an N-dimensional array with a vector of length N. In particular, for the 2-dimensional case I am currently doing the following.
A = rand(10);
v = randi(10,1,2);
v = num2cell(v);
A(v{:})
However, this approach seems horribly inefficient. Is there not a smarter way to convert the vector v to a proper index (comma-separated) for the array A?
Edit Let's say v = randi(10,1,2) = [ 3 5 ]. In that case, I want to obtain A(3,5).
4 Commenti
Walter Roberson
il 7 Ago 2015
You can improve performance slightly by assigning the transpose to p1_off ahead of time, equivalent to if I had written
Aoff = cumprod([1 As(1:end-1)]) .';
and then just use * Aoff rather than * Aoff.'
Also the "-1" was important to add to the indices. It probably can be rolled into the calculation of the offset at the expense of clarity.
Jori
il 7 Ago 2015
Risposta accettata
Più risposte (1)
Azzi Abdelmalek
il 7 Ago 2015
Modificato: Azzi Abdelmalek
il 7 Ago 2015
A = rand(10);
v = randi(10,1,2)
Why converting to cell array? just type
A(v)
If v is a cell array, convert it to a double array
A = rand(10);
v = randi(10,1,2);
v = num2cell(v);
A([v{:}])
4 Commenti
Jori
il 7 Ago 2015
Azzi Abdelmalek
il 7 Ago 2015
You can use sub2ind function
Azzi Abdelmalek
il 7 Ago 2015
Modificato: Azzi Abdelmalek
il 7 Ago 2015
A = rand(10)
v = randi(10,1,2)
idx=sub2ind(size(A),v(1),v(2))
A(idx)
If v is nx2 array
idx=sub2ind(size(A),v(:,1),v(:,2))
A(idx)
Categorie
Scopri di più su Matrix Indexing in Centro assistenza e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
