我有一个问题,就是看看我做错了什么,或者功能是不是我认为他们必须做的事情。
问题是,我有一个长度为142844的vector_name。我想制作一个随机样本(长度为4358)并且还要采用这样的提醒数字
vector_sample = randsample(1:length(vector_name),4358,true);
contra_vector_sample = setdiff(1:length(vector_name),vector_sample);
但如果我用
对这两个向量求和length(vector_sample)
length(contra_vector_sample)
他们不会给142844,但是142908!
为什么会这样?我认为setdiff输出不在vector_sample整个向量中的vector_name(i)的数量。
全部谢谢
答案 0 :(得分:0)
您正在使用true
作为randsample
(referred to in the documentation as replacement
)的第三个输入来表示当从样本中提取值时它会被替换(即您可以绘制相同的值两次。
如果替换为真,则
y = randsample(n,k,replacement)
或y = randsample(population,k,replacement)
返回取代的样本,如果替换为假,则返回未替换的样本。默认值为false。
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