You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python从给定数值列表的分布中生成新随机数?

生成符合给定浮点列表分布的新随机数方法

针对手头的浮点数值列表,要生成符合相同分布的新随机数(而非仅复用原列表值),推荐两种无需预设分布边界的非参数方法:

方法一:核密度估计(KDE)采样

KDE会拟合数据的概率密度曲线,基于该曲线生成连续的新样本,适合需要平滑分布的场景。

代码实现

import numpy as np
from scipy.stats import gaussian_kde

# 原数据
list_numbers = [0.27,0.26,0.64,0.61,0.81,0.83,0.78,0.79,0.05,0.12,0.07,0.06,0.38,0.35,0.04,0.03,0.46,0.01,0.18,0.15,0.36,0.36,0.26,0.26,0.93,0.12,0.31,0.28,1.03,1.03,0.85,0.47,0.77]
data = np.array(list_numbers)

# 拟合KDE模型
kde = gaussian_kde(data)

# 生成新样本(这里生成1000个,可按需调整)
new_samples = kde.resample(1000)[0]

# 可选:限制样本在原数据的取值范围内(避免极端值)
min_val = data.min()
max_val = data.max()
new_samples = new_samples[(new_samples >= min_val) & (new_samples <= max_val)]

方法二:经验分布函数(ECDF)插值采样

基于原数据的排序结果,通过均匀随机数插值生成新值,完全贴合原数据的经验分布,无平滑处理。

代码实现

import numpy as np

list_numbers = [0.27,0.26,0.64,0.61,0.81,0.83,0.78,0.79,0.05,0.12,0.07,0.06,0.38,0.35,0.04,0.03,0.46,0.01,0.18,0.15,0.36,0.36,0.26,0.26,0.93,0.12,0.31,0.28,1.03,1.03,0.85,0.47,0.77]
data = np.array(list_numbers)

# 对原数据排序
sorted_data = np.sort(data)
n = len(sorted_data)

# 生成0到1之间的均匀随机数
uniform_samples = np.random.uniform(0, 1, 1000)

# 用线性插值得到对应分布的新样本
new_samples = np.interp(uniform_samples, np.linspace(0, 1, n), sorted_data)

验证分布一致性

生成新样本后,可通过直方图对比原数据与新样本的分布:

import matplotlib.pyplot as plt

plt.hist(data, bins=10, alpha=0.5, label='原数据')
plt.hist(new_samples, bins=10, alpha=0.5, label='新样本')
plt.legend()
plt.show()

内容的提问来源于stack exchange,提问作者datadatadata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:30:17