フィルターのクリア

Sorting element pairs by differences?

1 回表示 (過去 30 日間)
Marco Bakker
Marco Bakker 2016 年 10 月 7 日
コメント済み: Jos (10584) 2016 年 10 月 7 日
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]

採用された回答

uu tsi
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)
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 件)

Massimo Zanetti
Massimo Zanetti 2016 年 10 月 7 日
More elegant is to use pdist, that does the bad job..

Jos (10584)
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.

カテゴリ

Help Center および File ExchangeShifting and Sorting Matrices についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by