combine elements of a large vector in matlab

1 visualización (últimos 30 días)
Swagatika
Swagatika el 22 de Nov. de 2012
I need to take pairwise combination of a large vector v (770x1). The commands combnk and combntns come with a precaution that they are slow for large vectors.
>> tic, a = combnk(v,2); toc
Elapsed time is 3.081594 seconds.
>> tic, a = combntns(v,2); toc
Elapsed time is 3.147092 seconds.
Is there any other alternative that is more efficient?

Respuesta aceptada

Matt Fig
Matt Fig el 22 de Nov. de 2012
Editada: Matt Fig el 22 de Nov. de 2012
>> tic, A = nchoosek(1:770,2); toc
Elapsed time is 2.286846 seconds.
>> tic, B = combnk(1:770,2); toc
Elapsed time is 2.299141 seconds.
>> tic, C = combinator(770,2,'c','no'); toc
Elapsed time is 0.019995 seconds.
>> isequal(sortrows(A),sortrows(B),sortrows(C))
ans =
1
COMBINATOR is found here: File Exchange File.
  3 comentarios
Matt Fig
Matt Fig el 22 de Nov. de 2012
Editada: Matt Fig el 22 de Nov. de 2012
I bet you didn't bother to read the help yet. If you have another vector than 1:770, simply use the output from COMBINATOR as an index into your vector.
>> A = [9 8 7];
>> A(combinator(length(A),2,'c','n'))
ans =
9 8
9 7
8 7
Also, if your question has been answered, please accept the answer. Thanks.
Swagatika
Swagatika el 22 de Nov. de 2012
thanks. Just figured that out :)

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