generate an array according to some sequence

1 visualización (últimos 30 días)
Chien-Chia Huang
Chien-Chia Huang el 10 de Abr. de 2011
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.

Respuesta aceptada

Walter Roberson
Walter Roberson el 10 de Abr. de 2011
[v,idx] = sort(A);
T = triu(bsxfun(@lt,idx.',idx),1);
B = T(logical(triu(ones(length(A)),1))).';
  3 comentarios
Chien-Chia Huang
Chien-Chia Huang el 10 de Abr. de 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 el 10 de Abr. de 2011
The T(logical...) part returns a column, and then the .' changes that to a row.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by