Values of selected array indices
1 回表示 (過去 30 日間)
古いコメントを表示
Imagine an array A of the form:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/166659/image.png)
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!