如何基于(900*10)的均值和标准差生成任意数量的新样本点?
解决任意数量10维样本生成问题
问题根源
你的mean和std_dev是900个独立的10维分布参数(形状为(900,10)),当你设置size=(new_points_size,10)时,numpy的广播机制要求loc/scale的形状和size指定的输出形状兼容。只有当new_points_size=900时,两者维度完全匹配,才能正常生成对应数量的样本;其他数值会因维度不匹配触发报错。
解决方案
方案1:从现有900个分布中随机采样
如果你需要严格从这900个预设分布里生成指定数量的样本,可以先随机挑选分布,再生成对应样本:
import numpy as np # 假设mean和std_dev是已有的(900,10)数组 mean = ... std_dev = ... new_points_size = 1000 # 随机选择new_points_size个分布索引(允许重复挑选) selected_indices = np.random.choice(900, size=new_points_size, replace=True) # 提取选中分布的均值和标准差 selected_mean = mean[selected_indices] selected_std = std_dev[selected_indices] # 生成新样本 new_points = np.random.normal(loc=selected_mean, scale=selected_std)
生成的new_points形状为(new_points_size,10),每个样本都来自你提供的900个分布之一。
方案2:基于全局分布生成样本
如果不需要区分单个分布,可先计算10维空间的全局均值和标准差,再生成样本:
import numpy as np mean = ... std_dev = ... new_points_size = 1000 # 计算10维上的全局均值和标准差(可根据需求调整统计方式) global_mean = mean.mean(axis=0) # 形状(10,) global_std = std_dev.mean(axis=0) # 生成新样本 new_points = np.random.normal(loc=global_mean, scale=global_std, size=(new_points_size,10))
这种方式会基于所有分布的平均特征生成新样本,适合不需要保留单个分布特性的场景。
内容的提问来源于stack exchange,提问作者Nimesh ACHARYA
相关产品推荐
相关产品推荐

