Azzera filtri
Azzera filtri

Values of selected array indices

1 visualizzazione (ultimi 30 giorni)
Saeid
Saeid il 10 Ago 2017
Modificato: Brian Hannan il 12 Ago 2017
Imagine an array A of the form:
I would like to select certain cells of this matrix (shown in color) in a specific order, say, going from yellow, to blue to green to pink. The selection is stored in an array of indices which is: i=[1 1;2 4;4 1;5 4] according to our selection. Without using a loop over the indices, how can I now store the values associated with these indices in a new vector that reads as: V=[9 2 8 9] Which is sorted in the same order as the cell colors stated above.
Background: I have a contour map in the xyz form where x and y are the plane coordinates and z is the value of some variable on this xy plane (e.g. height). I use ginput(n) but as far as I know I only obtain the xy coordinates of the n selected points and not the value of z associated with that coordinate. So please feel free to comment on this as well!

Risposta accettata

dpb
dpb il 11 Ago 2017
V=A(sub2ind(size(A),ix(:,1),ix(:,2)));
NB: I turned i into ix. I also use i in loop indices despite aliasing builtin function but I draw the line at arrays for other uses...

Più risposte (1)

Brian Hannan
Brian Hannan il 11 Ago 2017
You can use sub2ind for this.
myIxs = arrayfun(@(rowIx,colIx) sub2ind(size(A),rowIx,colIx), i(:,1), i(:,2));
A(myIxs)
  5 Commenti
Brian Hannan
Brian Hannan il 11 Ago 2017
Modificato: Brian Hannan il 12 Ago 2017
Saeid, there are a number of ways that you could find z(x,y) values on your surface from (x,y) values that lie on your line segment. A couple of ideas:
  • Find z(x,y) for all (x,y) pairs that are close (within some distance threshold) to the line segment.
  • Fit your data to a surface. Use the result to calculate z(x,y) for a set of points that you defined on your line segment.
  • Use interp2 (probably the best choice).
dpb
dpb il 11 Ago 2017
Altho I didn't time it; wonder how the two alternatives compare in efficiency...I hadn't thought of the arrayfun() route previously; does the transform of subscript conversion beat the overhead of the arrayfun internals for just simple assignment?

Accedi per commentare.

Categorie

Scopri di più su Contour Plots in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by