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

如何生成指定范围内偏向特定点的数值序列?

生成集中在指定点的非均匀数值序列

要生成指定范围内(如0-10)、集中在某点(端点或中间值)的N个数值,linspace和logspace这类生成等间隔序列的工具并不适用——前者是线性均匀分布,后者是对数尺度均匀分布,都无法实现“集中在某点”的需求。你可以通过随机分布采样或对均匀序列做非线性变换来实现,以下是具体方案:

1. 集中在端点(以靠近10为例)

方法一:指数分布反转缩放

指数分布天然偏向小值,反转后可让数值集中在大值端,再缩放至目标范围:

import numpy as np

N = 1000
# 生成指数分布样本,反转后缩放至0-10,过滤负数
samples = 10 - np.random.exponential(scale=1, size=N)
samples = samples[samples >= 0]

方法二:Beta分布调整参数

Beta分布的输出范围是0-1,通过调整参数a和b控制偏向性:a > b时偏向0,a < b时偏向1,再缩放至目标范围:

# 生成偏向10的样本(Beta(a=1, b=5)偏向1,乘10后靠近10)
samples = 10 * np.random.beta(a=1, b=5, size=N)

2. 集中在中间指定点(以8.5为例)

方法一:正态分布截断

正态分布的数值会集中在均值附近,设置均值为目标点,配合小标准差,再截断到0-10范围:

mean = 8.5
std_dev = 1  # 标准差越小,数值越集中
samples = np.random.normal(loc=mean, scale=std_dev, size=N)
# 把超出0-10的数值截断到区间内
samples = np.clip(samples, 0, 10)

方法二:拉普拉斯分布

拉普拉斯分布比正态分布的峰值更尖锐,数值会更集中在均值附近:

samples = np.random.laplace(loc=mean, scale=0.5, size=N)
samples = np.clip(samples, 0, 10)

3. 确定性非均匀序列(非随机)

如果需要固定的非均匀序列(不是随机样本),可以对linspace生成的均匀序列做非线性变换,让数值集中在目标点:

# 生成0-1的均匀序列,通过变换让数值集中在10附近
uniform = np.linspace(0, 1, N)
# (1 - uniform)**2会让数值偏向0,取1减去后再乘10就偏向10
samples = 10 * (1 - (1 - uniform)**2)

关于logspace的补充

logspace(a, b, N)生成的是对数尺度上的均匀序列,所以np.log10(np.logspace(0,10,N))会得到均匀分布,这是它的设计特性,适合生成跨越多个数量级的数值,但无法直接用来生成集中在某点的分布。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:50:26