Values of selected array indices
显示 更早的评论
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!
采纳的回答
更多回答(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 个评论
dpb
2017-8-11
If you use arrayfun don't need sub2indx and conversely if use sub2indx don't need arrayfun
V=arrayfun(@(i,j) A(i,j),ix(:,1),ix(:,2));
See the above answer for sub2indx solution; it's already vectorized natively.
Saeid
2017-8-11
Brian Hannan
2017-8-11
编辑:Brian Hannan
2017-8-11
Yes that's right, dpb. arrayfun is unnecessary here. Thanks for pointing that out.
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?
类别
在 帮助中心 和 File Exchange 中查找有关 Data Exploration 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
