Values of selected array indices
3 次查看(过去 30 天)
显示 更早的评论
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!
0 个评论
采纳的回答
dpb
2017-8-11
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...
0 个评论
更多回答(1 个)
Brian Hannan
2017-8-11
You can use sub2ind for this.
myIxs = arrayfun(@(rowIx,colIx) sub2ind(size(A),rowIx,colIx), i(:,1), i(:,2));
A(myIxs)
5 个评论
Brian Hannan
2017-8-11
编辑:Brian Hannan
2017-8-12
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
2017-8-11
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?
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!