How to index the values of an array using a series of rows, column indices?
21 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Couldn't find an answer about this and it is not mentioned in the Matlab documentation page on array indexing.
I want to know how to read (or assign to) a set of values in an array using a series of positions (row, col).
For example, suppose my array is
rng(0); A = randi(9, 4, 6)
A =
8 6 9 9 4 6
9 1 9 5 9 1
2 3 2 8 8 8
9 5 9 2 9 9
and I want to retrieve three values from some arbitrary positions such as (3, 2), (3, 3), and (4, 3).
I figured out I can do it this way, but is this the correct/best way?
my_pts = [3 2; 3 3; 4 3];
A(sub2ind(size(A),my_pts(:,1),my_pts(:,2)))
ans =
3
2
9
or
A(sub2ind(size(A),my_pts(:,1),my_pts(:,2))) = [0 0 0]
A =
8 6 9 9 4 6
9 1 9 5 9 1
2 0 0 8 8 8
9 5 0 2 9 9
3 commentaires
Réponses (1)
Scott MacKenzie
le 9 Juil 2021
If you want to pull those three values from A and concatenate them, as in your output, then just retrieve the three elements using row-column indexing in A and concatenate the values using brackets:
A = randi(9, 4, 6)
[A(3,2) A(3,3) A(4,3)]
3 commentaires
Scott MacKenzie
le 10 Juil 2021
It's a bit unclear what you might mean by index arbitrary points programmatically. If you know A is a 4x6 matrix, then here's an indexed arbitrary point from A which is generated programmatically:
arbitraryRow = randi(4,1);
aribtraryCol = randi(6,1);
arbitraryPoint = A(arbitraryRow, arbitraryCol);
If you want points -- plural -- then put this in loop and add the points to a vector, or something like that. Good luck.
Voir également
Catégories
En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!