randsample + setdiff = original_vector错了?

时间:2016-06-23 19:55:54

标签: matlab

我有一个问题,就是看看我做错了什么,或者功能是不是我认为他们必须做的事情。

问题是,我有一个长度为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)的数量。

全部谢谢

1 个答案:

答案 0 :(得分:0)

您正在使用true作为randsamplereferred 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