Re: [問題] 排列組合問題
※ 引述《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
04/10 18:46, 2F
→
04/10 18:46, , 3F
04/10 18:46, 3F
→
04/11 07:54, , 4F
04/11 07:54, 4F
討論串 (同標題文章)
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章