Filter löschen
Filter löschen

combine elements of a large vector in matlab

1 Ansicht (letzte 30 Tage)
Swagatika
Swagatika am 22 Nov. 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?

Akzeptierte Antwort

Matt Fig
Matt Fig am 22 Nov. 2012
Bearbeitet: Matt Fig am 22 Nov. 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 Kommentare
Matt Fig
Matt Fig am 22 Nov. 2012
Bearbeitet: Matt Fig am 22 Nov. 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 am 22 Nov. 2012
thanks. Just figured that out :)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Performance and Memory finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by