How to index the values of an array using a series of rows, column indices?

14 visualizzazioni (ultimi 30 giorni)
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 Commenti

Accedi per commentare.

Risposte (1)

Scott MacKenzie
Scott MacKenzie il 9 Lug 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 = 4×6
2 4 3 3 1 1 4 1 7 2 8 4 1 4 6 3 8 4 1 8 2 3 6 4
[A(3,2) A(3,3) A(4,3)]
ans = 1×3
4 6 2
  3 Commenti
Scott MacKenzie
Scott MacKenzie il 10 Lug 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.
Bill Tubbs
Bill Tubbs il 10 Lug 2021
Modificato: Bill Tubbs il 10 Lug 2021
By arbitrary points I meant variable. I can see how it could be done with a for loop but I was looking for a MATLAB equivalent of this Python (Numpy) code where my_pts is a variable which could have any values:
In [1]: my_pts = ([2, 2, 3], [1, 2, 2])
In [2]: A[my_pts]
Out[2]: array([4, 6, 2])
I modified the question to make this more clear.

Accedi per commentare.

Prodotti


Release

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by