Re: [問題] 排列組合問題

看板MATLAB作者 (郝渴連)時間11年前 (2013/04/10 18:17), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串6/7 (看更多)
※ 引述《snaredrum (好聽木琴)》之銘言: : Matlab菜鳥發問~~ : 我想要寫21個七維向量 : 寫法如下, : v1= (5/7,5/7,-2/7,-2/7,-2/7,-2/7,-2/7) : v2= ... : .... : v21= ... : 這21個向量都是五個5/7,跟兩個-2/7排列組合 ...一共7!/(2!5!) =21 : 最後我想要一個矩陣, F= [v1,v2....v21] 7x21的矩陣。 : 請問要如何generate這個矩陣阿? : 我想知道系統一點的方法寫,因為下一個可能是要28個36個45個 etc.. : 不能一值硬幹下去的 : 感恩~~~ : 該用迴圈嬤? : : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 71.114.93.173 : 推 sunev:nchoosek 04/09 10:16 : → snaredrum:thanks~ 04/09 10:28 : → jatj:樓上不對喔 這要用perms 04/09 10:29 : → jatj:Y = unique(perms([1 1 2 2 2 2 2])); 把1 2取代你要的即可 04/09 10:32 : → jatj:sorry Y = unique(perms([1 1 2 2 2 2 2]), 'rows');才對 04/09 10:36 perms產生的矩陣太大了 而且還需要經過 unique(sort) : → jatj:少一個引數 04/09 10:36 : → jatj:不過請小心perms數量太多的記憶體及速度問題 元素太多建議 04/09 10:38 : → jatj:自己用loop產生 04/09 10:39 : 推 sunev:v1=[-2 -2 5 5 5 5 5]/7;v2=[5 5 5 5 5 -2 -2]/7; 04/09 15:14 : → sunev:[nchoosek(v1,2) nchoosek(v2,5)] 04/09 15:14 這個方法有問題 無法保證 5/7 只出現 2 次 : → snaredrum:thank you~ 04/10 05:32 我建議方法如下: n為向量的dimension k為5/7的個數 binary = dec2bin(0:2^n-1)=='1'; binary(sum(binary, 2)~=k, :)=[]; F = 5/7*ones(size(binary, 1), n) - binary; 若要random的排列 F = F(randperm(size(binary, 1)), :); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.67.56.146 ※ 編輯: mp19990920 來自: 111.67.56.146 (04/10 18:21)

04/10 18:45, , 1F
抱歉沒想清楚。
04/10 18:45, 1F

04/10 18:46, , 2F
v=[-2 -2 5 5 5 5 5]/7;c1=nchoosek(v,2);c2=nchoosek(v,5);
04/10 18:46, 2F

04/10 18:46, , 3F
[c1(end:-1:1,:) c2]
04/10 18:46, 3F

04/11 07:54, , 4F
所以我說我的方法要注意記憶體 速度問題
04/11 07:54, 4F
文章代碼(AID): #1HPJnGQe (MATLAB)
文章代碼(AID): #1HPJnGQe (MATLAB)