How to index the values of an array using a series of rows, column indices?
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentarios
Respuestas (1)
Scott MacKenzie
el 9 de Jul. de 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 comentarios
Scott MacKenzie
el 10 de Jul. de 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.
Ver también
Categorías
Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!