【发布时间】:2014-11-02 09:38:50
【问题描述】:
我想从大量 N 个样本中创建一个 n 个样本的子集,n
我想请教一下,如何在不使用Matlab中的randperm函数的情况下,从大量数据集中选择一个小的子集。
谢谢。
【问题讨论】:
-
你试过
randsample吗? -
我之前不知道,但是不行
标签: matlab
我想从大量 N 个样本中创建一个 n 个样本的子集,n
我想请教一下,如何在不使用Matlab中的randperm函数的情况下,从大量数据集中选择一个小的子集。
谢谢。
【问题讨论】:
randsample吗?
标签: matlab
如果n 远小于N,则rejection method 是有效的:使用randi 生成可能重复的样本,检查是否有重复(这不太可能),如果是重复:
N = 10000;
n = 100;
repeat = true;
while repeat
sample = randi(N,1,n);
repeat = any(sum(bsxfun(@eq, sample, sample.'))>1);
end
【讨论】:
您可以尝试使用 single() 将数据大小减半:
【讨论】:
randi 给出均匀分布的数字,
Ind = randi(N,[n 1]);
Observation = data(Ind);
你也可以使用datasample,
Observation = datasample(data,n,'Replace',false));
正如@Shai 提到的,另一个选项是randsample,
Observation = data(randsample(N,n));
【讨论】: