generate an array according to some sequence

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.

 Akzeptierte Antwort

Walter Roberson
Walter Roberson am 10 Apr. 2011

0 Stimmen

[v,idx] = sort(A);
T = triu(bsxfun(@lt,idx.',idx),1);
B = T(logical(triu(ones(length(A)),1))).';

3 Kommentare

Chien-Chia Huang
Chien-Chia Huang am 10 Apr. 2011
Thanks, Walter. Truly appreciate that.
Chien-Chia Huang
Chien-Chia Huang am 10 Apr. 2011
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 am 10 Apr. 2011
The T(logical...) part returns a column, and then the .' changes that to a row.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by