combine elements of a large vector in matlab
    1 次查看(过去 30 天)
  
       显示 更早的评论
    
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?
0 个评论
采纳的回答
  Matt Fig
      
      
 2012-11-22
        
      编辑:Matt Fig
      
      
 2012-11-22
  
      >> 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
3 个评论
  Matt Fig
      
      
 2012-11-22
				
      编辑:Matt Fig
      
      
 2012-11-22
  
			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.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!