フィルターのクリア

generate an array according to some sequence

1 回表示 (過去 30 日間)
Chien-Chia Huang
Chien-Chia Huang 2011 年 4 月 10 日
Suppose I have an array [4 2 1 3] (length = 4) and I want to generate another array of length 6(= 0.5*4*(4-1)).
The vlaues of the new array represents the relationship between i and j, for i < j.
If i precedes j than (i,j) = 1; and 0, otherwise.
That is [(1,2) (1,3) (1,4) (2,3) (2,4) (3,4)] = [0 1 0 1 0 0].
Is there any way out to evade using loops?
Thanks in advance.

採用された回答

Walter Roberson
Walter Roberson 2011 年 4 月 10 日
[v,idx] = sort(A);
T = triu(bsxfun(@lt,idx.',idx),1);
B = T(logical(triu(ones(length(A)),1))).';
  3 件のコメント
Chien-Chia Huang
Chien-Chia Huang 2011 年 4 月 10 日
One more note on Walter's solution.
B is built in a column-wise fashion.
B = [(1,2) (1,3) (2,3) (1,4) (2,4)....].
Walter Roberson
Walter Roberson 2011 年 4 月 10 日
The T(logical...) part returns a column, and then the .' changes that to a row.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMatrices and Arrays についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by