2015-02-24 66 views
-3

有一個矩陣X,其大小爲400×1000。我想收集L = 10個樣本,每個樣本的大小均爲M = 500,不需要從X的統一分佈中取代。如何通過使用Matlab來實現它?任何人都可以給我一個幫助?如何在Matlab中實現這一點?

+0

爲什麼要扣1分? – user3761566 2015-02-24 01:29:32

+0

我不知道,但我可以想象它會因爲你沒有包含[mcve](http://stackoverflow.com/help/mcve)。你的問題沒有很好的定義。 – kkuilla 2015-02-24 09:21:23

回答

1

最簡單的方法是使用統計工具箱中的randsample。這使您可以從人口/數據中隨機抽取樣本而無需更換。然而,randsample需要一個向量,但你想從矩陣中抽樣。從上下文來看,這個矩陣中的每個元素都可能被選擇,所以如果我們簡單地將矩陣轉換成一個向量,並且從這個向量中抽樣,你應該得到相同的結果。

如果您想要10個500長度的樣本,您可以調用randsample一次,並從矩陣中獲取5000個樣本,並將其重新組合爲10 x 500矩陣,其中每行代表一個500個元素樣本,或者循環調用10次並在每次調用時連接結果。

所以,你可以這樣做:

Y = randsample(X(:), 5000); 
Y = reshape(Y, 10, 500); 

上面的代碼生成5000×1向量,我們重塑成一個10×500矩陣。

或者,你可以這樣做:

Y = []; 
for idx = 1 : 10 
    Y = [Y randsample(X(:), 500)]; 
end 
Y = Y.'; 

randsample產生在每次調用一個500×1矢量,所以我們會疊加這些列向量水平,然後轉的結果,所以我們得到一個10×500矩陣。


但是,如果你沒有做randsample,您可以使用randperm生成的數字從1到400 x 1000隨機排列,然後從該置換5000元。然後,您可以索引X以獲取最終矩陣。例如:

idx = randperm(400*1000, 5000); 
Y = reshape(X(idx), 10, 500); 
+0

非常感謝你! – user3761566 2015-02-24 21:19:36