Re: [問題] 從多維矩陣隨機取數
※ 引述《fly1102 (Hh)》之銘言:
: 大家好,
: 本人將73組10*10的矩陣資料寫成3D矩陣為[10*10*73]
: 現欲隨機抽樣統計 想隨機抽取73組資料中的30組
: 但取出的資料依舊要組成一個3D矩陣[10*10*30]
: 每次抽取的資料都是不同的30組而且不重複
: 試過randperm randsample 都沒辦法
: 請問該怎麼寫呢?
: 感謝!!
假設A為 10*10*73 的矩陣,
iSet 為 1*30 (或 30*1) 的矩陣,
其中每個值為 1~73 的數字且都不重複,
則 A(:, :, iSet) 即為你想要的結果。
其中最大的問題是在於產生iSet,
而 iSet 的所有可能性有 C(73, 30)=278940769844931007968 種。
法ㄧ:
allSet = dec2bin(0:2^73-1);
allSet = allSet(sum(allSet, 2) == 73*double('0')+30, :);
iSet = allSet(ceil(size(allSet, 1)*rand), :)=='1';
優:等機率的從所有可能中取出一組
缺:記憶體用量極~極~極~大!!!
法二:
iSet = getset(73, 30);
function iSet = getset(n, k);
while(1)
iSet = unique(ceil(n*rand(1, k)));
if length(iSet) == k
break;
end
end
end
優:記憶體用量小
缺:(1)每次跑出來結果的執行時間差異很大
(2)取出的機率我暫時不能確定是uniform的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.67.55.249
推
09/29 20:13, , 1F
09/29 20:13, 1F
推
09/30 01:36, , 2F
09/30 01:36, 2F
→
09/30 01:42, , 3F
09/30 01:42, 3F
→
09/30 01:44, , 4F
09/30 01:44, 4F
推
09/30 01:45, , 5F
09/30 01:45, 5F
→
09/30 01:45, , 6F
09/30 01:45, 6F
法三:(感謝immomo808大提供)
iSet = randperm(73, 30);
優:內建函數,很快
缺:無
p.s.
PC內得到的random是假的沒錯,
但假的很真,
我的意思是在產生random時要小心,
別因程式流程而破壞了原本的性值。
※ 編輯: mp19990920 來自: 111.67.55.249 (09/30 12:01)
推
09/30 11:57, , 7F
09/30 11:57, 7F
推
09/30 15:18, , 8F
09/30 15:18, 8F
推
09/30 16:31, , 9F
09/30 16:31, 9F
推
09/30 17:22, , 10F
09/30 17:22, 10F
討論串 (同標題文章)