如何通过播种随机抽样数据?

How to randomly sample data with seeding?

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

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

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

文档对第一个输入不是很明确。您需要传递一个 RandStream 对象作为第一个输入参数,而不是 rng 生成的 struct (作为旁注, rng 的输出是 previous 设置不是 new 设置)。

这相当于您正在尝试做的事情

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);