如何随播样随机抽样数据?

时间:2017-01-13 21:42:30

标签: matlab random random-seed

我想在播种随机数生成过程的同时,从包含数字和NaN s的有限集中随机选择元素。

到目前为止,我可以在没有播种的情况下使其工作:

data = [0, 1, 2, 3, 4, 5, nan];
sample = datasample(data, 50);

但如果我想为数字生成播种:

seed = rng(100);
sample = datasample(seed, data, 50);

我收到以下错误:

Error using datasample (line 89)
Sample size K must be a non-negative integer.

即使datasample的语法是(*):

[y,...] = datasample(s,data,k,...)

我也试过使用randsample,但我得到了类似的结果。

(*)https://it.mathworks.com/help/stats/datasample.html

1 个答案:

答案 0 :(得分:3)

关于第一个输入,文档并不是非常明确的。您需要传递一个RandStream对象作为第一个输入参数而不是struct生成的rng(作为旁注,rng的输出是之前的设置不是设置)。

这相当于你想要做的事情

stream = RandStream('mt19937ar', 'Seed', 100);
output = datasample(stream, data, k);

如果您想使用rng来指定种子,可以调用rng,然后使用RandStream.getGlobalStream获取当前的全局随机数流,然后传递 datasample。虽然datasample将使用全局随机数流(如果没有提供),但这稍微减少了。

rng(100)
stream = RandStream.getGlobalStream();
output = datasample(stream, data, k);