Re: [討論] 矩陣排列組合

看板MATLAB作者 (攸藍)時間12年前 (2013/09/08 03:55), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《whale0821 (DorisTsai)》之銘言: : 想請問關於一個矩陣的問題 : 舉例 : 若有兩個矩陣為 : A=[1 2 3] : B=[4 5 6] : 想組合成 : C=[1 2 3; : 1 2 6; : 1 5 3; : 1 5 6; : 4 2 3; : 4 2 6; : 4 5 3; : 4 5 6;] : 8種排列組合, : 第一個位置只有1,4 兩個選擇 : 第二個位置只有2,5 兩個選擇 : ...以次類推 : 請問有比較快的指令或是怎麼寫迴圈比較好呢? : 如果矩陣皆是1*n的話 : 謝謝 想法很簡單,因為只從兩個向量去排 而且他的排列方式有限,先知道他的dim有多大就很簡單了 number of rows(rowNum)就depends on你的input vectors: a, b有多少個一樣 如果兩個元素不同,那就先每一個都重複rowNum/2次 第二次兩個元素不同就,每一個重複rowNum/4次,全部在重複一次 剩下依此類推,然後如果相同就全部都用一樣的取代。 程式碼如下: % 先寫一個rep的函數 ***********rep.m************ function vec_output=rep(vec_input, each, times) vec_output=repmat(vec_input, each, times); vec_output=vec_output(:); ***********main.m************* function mat=main(v1,v2) % input v1 and v2 % output mat vec_eq = v1~=v2; rowNum = 2^sum(vec_eq); each = rowNum/2; times = rowNum/each/2; for i=1:length(v1) if(vec_eq(i)==1) mat(:,i)=rep([v1(i) v2(i)],each,times); each=each/2; times=rowNum/each/2; else mat(:,i)=rep(v1(i), 1, rowNum); end end ***********test 1************** v1=1:3; v2=4:6; mat=main(v1,v2); mat 1 2 3 1 2 6 1 5 3 1 5 6 4 2 3 4 2 6 4 5 3 4 5 6 ***********test 2************** v1 = 1:5; v2 = [2 2 3 3 5]; mat=main(v1,v2); mat 1 2 3 4 5 1 2 3 3 5 2 2 3 4 5 2 2 3 3 5 **********The End************** 希望有幫助到你。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.164.166.108 ※ 編輯: celestialgod 來自: 218.164.166.108 (09/08 04:09)

09/08 04:10, , 1F
效率問題,我就比較無法了,可以問問其他高人XD
09/08 04:10, 1F
※ 編輯: celestialgod 來自: 218.164.166.108 (09/08 16:12)
文章代碼(AID): #1IAuIclb (MATLAB)
文章代碼(AID): #1IAuIclb (MATLAB)