Sorting element pairs by differences?
6 次查看(过去 30 天)
显示 更早的评论
Suppose values is a vector, how to produce a matrix whose rows contain pairs of elements of this vector, ordered ascending by the differences between the elements.
For example:
values = [1,2,1.5,1.9]
I want the matrix
differences = [1.9 2; 1.5 1.9; 1 1.5; 1.5 2; 1 1.9; 1 2]
0 个评论
采纳的回答
uu tsi
2016-10-7
the following is my code
values = [1,2,1.5,1.9];
ss = nchoosek(values, 2);
[~, idx] = sort(abs(diff(ss')));
res = ss(idx, :)
1 个评论
Jos (10584)
2016-10-7
Thanks for having put my answer in code. As a follow-up: diff(A,1,2) is faster than diff(A'), and A.' (transpose)is more versatile than A' (conjugate transpose).
更多回答(2 个)
Jos (10584)
2016-10-7
Take a look at NCHOOSEK, ABS, DIFF, and SORT:
- with X = nchoosek(values,2) you can get all the 6 different combinations
- use Y = abs(diff(X)) to get the absolute differences
- the second output of the function sort, applied tot these latter values, can be uses to sort the combinations accordingly.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Shifting and Sorting Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!