python - 生成具有精确均值和标准偏差的样本数据
问题描述
我想创建一个具有特定均值和标准偏差的数据集。
使用 np.random.normal() 给了我一个近似值。但是,对于我想要测试的内容,我需要一个精确的平均值和标准偏差。
我尝试使用 norm.pdf 和 np.linspace 的组合,但是生成的数据集也不匹配(但可能只是我滥用它)。
只要我可以设置特定的样本大小、均值和标准偏差,数据集是否随机并不重要。
帮助将不胜感激
解决方案
最简单的方法是生成一些具有所需标准偏差的零均值样本。然后从样本中减去样本均值,使其真正为零均值。然后缩放样本以使标准偏差准确,然后添加所需的平均值。
这是一些示例代码:
import numpy as np
num_samples = 1000
desired_mean = 50.0
desired_std_dev = 10.0
samples = np.random.normal(loc=0.0, scale=desired_std_dev, size=num_samples)
actual_mean = np.mean(samples)
actual_std = np.std(samples)
print("Initial samples stats : mean = {:.4f} stdv = {:.4f}".format(actual_mean, actual_std))
zero_mean_samples = samples - (actual_mean)
zero_mean_mean = np.mean(zero_mean_samples)
zero_mean_std = np.std(zero_mean_samples)
print("True zero samples stats : mean = {:.4f} stdv = {:.4f}".format(zero_mean_mean, zero_mean_std))
scaled_samples = zero_mean_samples * (desired_std_dev/zero_mean_std)
scaled_mean = np.mean(scaled_samples)
scaled_std = np.std(scaled_samples)
print("Scaled samples stats : mean = {:.4f} stdv = {:.4f}".format(scaled_mean, scaled_std))
final_samples = scaled_samples + desired_mean
final_mean = np.mean(final_samples)
final_std = np.std(final_samples)
print("Final samples stats : mean = {:.4f} stdv = {:.4f}".format(final_mean, final_std))
产生与此类似的输出:
Initial samples stats : mean = 0.2946 stdv = 10.1609
True zero samples stats : mean = 0.0000 stdv = 10.1609
Scaled samples stats : mean = 0.0000 stdv = 10.0000
Final samples stats : mean = 50.0000 stdv = 10.0000
推荐阅读
- python - PyQt 打印 QWidget
- python - 将信息从 MySQL 数据库打包到 tkinter 盒的最佳方式
- laravel - 如何在下拉列表中多次显示数据。拉拉维尔 6
- algorithm - 存储分配算法
- java - 如何让父类返回类型 T?
- javascript - 更改 javascript,使其适用于众多变量
- xml - 尽管 dtd 和 xsl 正确,为什么我的 xml 页面没有显示?
- android - 如何使用 Android Spotify SDK 在应用程序中直接播放音乐?
- ios - 在集合视图中更新多个单元格的最佳方法?
- c# - c#加法运算符从隐式转换中借用到某些类型,而不是其他类型?