[請益] 關於排列組合不重覆

看板MATLAB作者 (ee)時間9年前 (2015/04/28 14:47), 編輯推噓1(1020)
留言21則, 2人參與, 最新討論串1/1
我想要寫一個1x16的矩陣 全由正1負1組成 ex:[1,-1,1,........]; 目前我用隨機方法產生 但是現在想要指定正1的數目 ex:我先要7個1,9個-1 之後會套用到1x32,1x64 並且不希望重覆 當然如果有重覆的方法也可以 想請問各位前輩高手是否有解 謝謝 -- Sent from my Android -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.124.42.233 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1430203638.A.B71.html

04/28 14:55, , 1F
de2bi(1:(2^k-1))*2-1 其中k是+1跟-1的個數總和
04/28 14:55, 1F

04/28 14:56, , 2F
我錯了,不要理我QQ...
04/28 14:56, 2F

04/28 15:02, , 3F
nchoosek(1:16, 7)把全1的矩陣換掉對應位置變成-1
04/28 15:02, 3F

04/28 15:07, , 4F
m = nchoosek(1:16, 7);res = ones(size(m, 1), 16)
04/28 15:07, 4F

04/28 15:07, , 5F
for i = 1:size(m, 1), res(i, m(i,:)) = -1; end
04/28 15:07, 5F

04/28 15:07, , 6F
應該有更好的方法QQ
04/28 15:07, 6F

04/28 15:12, , 7F
perms([ones(1,7), -ones(1, 9)])不過他不給我跑XD
04/28 15:12, 7F

04/28 15:13, , 8F
謝謝C大 那請問如果我想要隨機取 畢竟這樣會一次RUN
04/28 15:13, 8F

04/28 15:13, , 9F
全部,資料量過大
04/28 15:13, 9F

04/28 15:15, , 10F
對不起,我沒看到隨機取...
04/28 15:15, 10F

04/28 15:16, , 11F
那就直接 randsample(1:16, 7)
04/28 15:16, 11F

04/28 15:17, , 12F
還是很感謝你^_^,你已經幫我很大的忙了XDD
04/28 15:17, 12F

04/28 15:17, , 13F
randsample 可以用randperm(1:16)取前7個
04/28 15:17, 13F

04/28 15:18, , 14F
randsample比較舊的版本沒有
04/28 15:18, 14F

04/28 15:19, , 15F
隨機取沒有重複,感覺不太可能= =
04/28 15:19, 15F

04/28 15:19, , 16F
除非記錄你已經取出來的,再做比對
04/28 15:19, 16F

04/28 15:19, , 17F
但是到最後記憶體還是會爆掉
04/28 15:19, 17F

04/28 15:22, , 18F
可以考慮用MEX...取道一定數目停止再從斷點取
04/28 15:22, 18F

04/28 15:22, , 19F
利用c++的next_combination
04/28 15:22, 19F

04/28 15:23, , 20F
我之前就這樣分開去算...我要的GLOBAL MAX...
04/28 15:23, 20F

04/28 15:32, , 21F
OK 謝謝你 這兩個方法我都會試一試 ^__^
04/28 15:32, 21F
文章代碼(AID): #1LFopsjn (MATLAB)