我想從大量的N個樣本中創建n個樣本的一個子集,我通常在Matlab中使用randperm函數,並取前n個索引。但是,由於數據可能非常大,randperm會給我提供的內存不足的錯誤消息。在Matlab中隨機選擇大量樣本的子集
我想提出一些建議,如何在Matlab中不使用randperm函數的情況下從大量數據集中選擇一個小子集。
謝謝。
我想從大量的N個樣本中創建n個樣本的一個子集,我通常在Matlab中使用randperm函數,並取前n個索引。但是,由於數據可能非常大,randperm會給我提供的內存不足的錯誤消息。在Matlab中隨機選擇大量樣本的子集
我想提出一些建議,如何在Matlab中不使用randperm函數的情況下從大量數據集中選擇一個小子集。
謝謝。
如果n
比N
小得多,一個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
雙重檢查無害,謝謝 – zhidayat 2014-11-03 06:13:25
您可以嘗試使用單()減半命令datasize:
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));
你試過'randsample'嗎? – Shai 2014-11-02 09:48:47
我以前不知道,但它不起作用 – zhidayat 2014-11-03 05:58:49