2016-06-23 170 views
0

我有一個問題,看看我做錯了什麼,或者如果功能沒有做我認爲他們必須做的。randsample + setdiff = original_vector錯誤?

的事情是,我有長度142844.一個VECTOR_NAME我想使(長4358)進行隨機抽樣,並採取了佈雷號這樣

vector_sample = randsample(1:length(vector_name),4358,true); 
contra_vector_sample = setdiff(1:length(vector_name),vector_sample); 

但是,如果我總結的2個載體用

length(vector_sample) 
length(contra_vector_sample) 

他們不給142844,而是142908!

爲什麼它是這樣的?我認爲setdiff輸出vector_name(i)中不在vector_sample整個向量中的數字。

感謝所有

+2

因爲你在'randsample'中允許使用'True'選項的重複項,所以總數變得比原始來源的總elems多? – Divakar

+0

真正的'聲明'是什麼?我看看matlab,但我不明白。 –

回答

0

您正在使用true第三輸入randsamplereferred to in the documentation as replacement)來表示,當值從它被替換的樣本抽取(即可以得出相同值的兩倍

y = randsample(n,k,replacement)y = randsample(population,k,replacement)返回與如果替換爲真,或者無需更換如果替換爲假替換所取的樣品。缺省值是假的。

randsample(1:4, 3, true) 
% 2 1 2 

你不希望這種行爲,所以你要設置的replacement參數false(或省略它),這將防止繪製兩次相同的值。

randsample(1:4, 3) 
% 4 3 1 

因此,對於您的數據,我們可以驗證這會產生您期望的結果。

vector_name = rand(142844, 1); 

vector_sample = randsample(1:length(vector_name), 4358); 
contra_vector_sample = setdiff(1:length(vector_name), vector_sample); 

length(vector_sample) 
% 4358 

length(contra_vector_sample) 
% 138486 

length(contra_vector_sample) + length(vector_sample) 
% 142844 
+0

非常感謝你,我不理解替換部分,但以你的例子來說,這很清楚。 –

+0

@cloudy_fog考慮將其標記爲解決方案,如果它解決了您的問題 – Suever