如何在MATLAB中按指定权重从4个向量生成100个随机向量?
在MATLAB中按指定加权概率生成随机向量集
这事儿在MATLAB里实现起来很顺手,我给你一步步拆解,保证你能直接复用代码:
步骤1:先把原始向量整理成矩阵
咱先把你给出的4个向量合并成一个矩阵,这样后续方便通过索引来提取。每个向量作为矩阵的一行就行:
% 定义原始向量 x1 = [-27.445,-26.960,-26.635,-26.431,-26.315]; x2 = [-25.673,-25.497,-25.449,-25.491,-25.593]; x3 = [-29.310,-28.201,-27.240,-26.399,-25.654]; x4 = [-28.761,-27.103,-26.290,-25.605,-25.025]; % 合并成4行5列的矩阵 vec_matrix = [x1; x2; x3; x4];
步骤2:生成符合加权概率的索引
MATLAB自带的randsample函数完美适配这个需求,它可以按照指定的权重从样本里随机抽取元素。我们需要生成100个索引(对应4个向量的序号1-4),权重分别是40%、30%、20%、10%:
% 定义权重:x1(40%), x2(30%), x3(20%), x4(10%) weights = [0.4, 0.3, 0.2, 0.1]; % 生成100个符合权重的索引 indices = randsample(1:4, 100, true, weights);
这里的true参数表示允许重复抽取(因为我们需要生成100个,远大于4个原始向量)。
步骤3:根据索引生成最终的100个随机向量
有了索引之后,直接从合并好的矩阵里按索引提取行就行,最后得到的是一个100行5列的矩阵,每一行就是一个随机生成的向量:
% 生成最终的100个向量 result_vectors = vec_matrix(indices, :);
可选:验证概率是否符合要求
如果你想确认生成的结果确实符合指定的权重,可以统计每个向量出现的次数:
% 统计每个索引出现的次数 counts = histcounts(indices, 1:4); % 计算占比 percentages = counts / 100 * 100; disp('各向量出现的占比:'); disp(['x1: ', num2str(percentages(1)), '%']); disp(['x2: ', num2str(percentages(2)), '%']); disp(['x3: ', num2str(percentages(3)), '%']); disp(['x4: ', num2str(percentages(4)), '%']);
运行这段代码后,你会看到结果基本接近你指定的40%/30%/20%/10%(因为是随机抽样,会有小范围波动,样本量越大越接近设定值)。
内容的提问来源于stack exchange,提问作者Lovelyn Garcia
相关产品推荐
相关产品推荐

