2014-11-02 74 views
1

我想從大量的N個樣本中創建n個樣本的一個子集,我通常在Matlab中使用randperm函數,並取前n個索引。但是,由於數據可能非常大,randperm會給我提供的內存不足的錯誤消息。在Matlab中隨機選擇大量樣本的子集

我想提出一些建議,如何在Matlab中不使用randperm函數的情況下從大量數據集中選擇一個小子集。

謝謝。

+1

你試過'randsample'嗎? – Shai 2014-11-02 09:48:47

+0

我以前不知道,但它不起作用 – zhidayat 2014-11-03 05:58:49

回答

0

如果nN小得多,一個rejection method是有效的:產生使用randi可能重複採樣,檢查是否有重複(這不太可能),如果這樣重複:

N = 10000; 
n = 100; 
repeat = true; 
while repeat 
    sample = randi(N,1,n); 
    repeat = any(sum(bsxfun(@eq, sample, sample.'))>1); 
end 
+0

雙重檢查無害,謝謝 – zhidayat 2014-11-03 06:13:25

0

randi給出均勻分佈的數字,

Ind = randi(N,[n 1]); 
Observation = data(Ind); 

你也使用datasample

Observation = datasample(data,n,'Replace',false)); 

As @Shai提及d,另一種選擇是randsample

Observation = data(randsample(N,n));