【发布时间】:2021-06-04 01:59:31
【问题描述】:
在 Matlab 中,我想生成一个包含 4 个随机唯一样本(共 10 个)7 次的矩阵。
为了避免 for 循环,我想我可以重复我的数据并在第一个维度上使用来自 Statistics and Machine Learning Toolbox 的datasample。但它总是从每一列中选择相同的 4 个值,所以这有点没用。
考虑以下 MWE:
randomData = [50.29; 47.72; 48.38; 48.02; 44.23; 47.17; 48.19; 49.11; 50.44; 53.40];
numOfReps = 7;
numOfSamples = 4;
randomDataRepMatrix = randomData*ones(1, numOfReps);
s = RandStream('mlfg6331_64');
y = datasample(s, randomDataRepMatrix, numOfSamples, 'Replace', false);
即使没有 RandStream 部分,我也会得到相同的结果...
有什么想法吗?还是我需要使用 for 循环?
【问题讨论】:
-
来自the documentation:您可以使用
randi或randperm分别为随机抽样生成索引,无论是否替换。但是,datasample使用起来更方便,因为它直接从您的数据中采样。 -
“为了避免 for 循环”。如果矢量化不是微不足道的,您应该始终实现 for 循环,并评估结果。这是您代码中的瓶颈吗?然后尝试优化它。否则,您只是在浪费时间,这与优化相反。循环在 MATLAB 中并不是天生就很慢,这种看法是 15 年前引入 JIT 之前的产物。