Matlab新手求助:基于高斯分布从数组中抽取6个不重复随机数
Matlab实现基于高斯分布权重的不重复随机抽取
实现思路
给数组中每个元素分配高斯分布权重——中间数值(如5、6)权重高,两端数值(如1、10)权重低,再通过带权重的随机抽样函数完成不重复抽取。
完整代码(带注释)
% 定义原始数组 nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; % 生成高斯权重:以数组中间值(5.5)为均值,标准差设为2(可按需调整) mean_val = mean(nums); % 自动计算数组均值,这里是5.5 std_val = 2; % 标准差越小,中间权重越集中;越大则权重分布越平缓 weights = normpdf(nums, mean_val, std_val); % 带权重随机抽取6个不重复元素 sampled_nums = randsample(nums, 6, true, weights); % 输出结果 disp('抽取的6个不重复数:'); disp(sampled_nums);
代码说明
normpdf:生成每个元素对应的高斯概率密度值,作为抽样权重,中间元素的密度值天然高于两端。randsample:Matlab内置的抽样函数,参数true表示带权重抽样,最后一个参数传入权重数组,自动完成不重复抽取。- 调整
std_val可以改变权重集中程度:比如把std_val改成1,中间元素被抽到的概率会更高;改成3则权重分布更均匀。
示例输出
运行代码可能得到类似符合要求的结果:
1, 4, 5, 7, 8, 10
内容的提问来源于stack exchange,提问作者Razor
相关产品推荐
相关产品推荐

