random seed
    
import numpy as np

np.random.seed(73)
A=np.random.randn(7,3)

np.random.lognormal的用法
### 基本用法 `np.random.lognormal` 用于生成**对数正态分布**的随机样本:若 `X` 服从对数正态分布,则 `ln(X)` 服从正态分布。 ```python import numpy as np np.random.seed(73) # 生成 1 个样本(默认 mean=0.0, sigma=1.0) x = np.random.lognormal() print(x) # 生成 1000 个样本,底层正态分布均值为 0,标准差为 0.5 samples = np.random.lognormal(mean=0.0, sigma=0.5, size=1000) print(samples[:5]) # 生成 3 行 4 列的二维数组 arr = np.random.lognormal(mean=1.0, sigma=0.3, size=(3, 4)) print(arr.shape) ``` 对数正态分布的取值**恒大于 0**,且具有右偏(长尾)特性。
### 绘制分布图 结合 matplotlib 可以直观查看对数正态分布的形状: ```python import numpy as np import matplotlib.pyplot as plt np.random.seed(73) samples = np.random.lognormal(mean=0.0, sigma=0.5, size=10000) plt.hist(samples, bins=100, density=True, alpha=0.7) plt.title("Lognormal Distribution") plt.xlabel("x") plt.ylabel("density") plt.show() ``` 也可以验证 `ln(X)` 服从正态分布: ```python log_samples = np.log(samples) plt.hist(log_samples, bins=100, density=True, alpha=0.7) plt.title("ln(X) - Normal Distribution") plt.show() ```
### 典型应用场景 对数正态分布常用于建模"取值非负、右偏长尾"的数据: - **金融**:股票价格、收益率的建模 - **收入分布**:大部分人的收入集中在中低区间,少数人收入很高 - **生物/医学**:细胞大小、药物浓度等 - **文件大小/网络流量**:大部分文件较小,少数文件很大 ```python import numpy as np np.random.seed(73) # 模拟 10000 个人的年收入(万元) income = np.random.lognormal(mean=2.5, sigma=0.4, size=10000) print("均值:", income.mean()) print("中位数:", np.median(income)) ```
np.random.lognormal的参数说明
### 参数说明 函数签名: ```python np.random.lognormal(mean=0.0, sigma=1.0, size=None) ``` | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `mean` | float 或 array_like | 0.0 | 底层正态分布(即 `ln(X)`)的均值 μ | | `sigma` | float 或 array_like | 1.0 | 底层正态分布的标准差 σ,**必须大于 0** | | `size` | int 或 tuple | None | 输出形状。`None` 时返回单个值;`(m, n)` 返回 m 行 n 列数组 | 返回值:`ndarray` 或标量,所有取值**恒大于 0**。 注意:`mean` 和 `sigma` 是 `ln(X)` 的均值和标准差,**不是** X 本身的均值和标准差。
### 参数对分布的影响 - `mean`(μ)控制分布的**位置**:μ 越大,样本整体越大 - `sigma`(σ)控制分布的**偏度/长尾程度**:σ 越大,右尾越长,分布越偏 X 本身的统计量与参数的关系: | 统计量 | 公式 | |--------|------| | 中位数 | `exp(μ)` | | 均值 | `exp(μ + σ²/2)` | | 方差 | `(exp(σ²) - 1) * exp(2μ + σ²)` | ```python import numpy as np np.random.seed(73) # sigma 越大,均值与中位数的差距越大(长尾越明显) for sigma in [0.2, 0.5, 1.0]: s = np.random.lognormal(mean=0.0, sigma=sigma, size=100000) print("sigma =", sigma, " 均值 =", round(s.mean(), 3), " 中位数 =", round(np.median(s), 3)) ```
np.random其他函数的用法和参数说明
### rand / randn / randint ```python import numpy as np np.random.seed(73) # rand: [0, 1) 均匀分布,参数直接传维度 a = np.random.rand(2, 3) # randn: 标准正态分布(均值0,标准差1),参数直接传维度 b = np.random.randn(2, 3) # randint: [low, high) 之间的随机整数 c = np.random.randint(low=0, high=10, size=(2, 3)) ``` | 函数 | 参数 | 说明 | |------|------|------| | `rand(d0, d1, ...)` | 各维度大小 | `[0, 1)` 均匀分布 | | `randn(d0, d1, ...)` | 各维度大小 | 标准正态分布 | | `randint(low, high=None, size=None)` | low 含、high 不含 | 随机整数;high 缺省时取 `[0, low)` | 注意:`rand` / `randn` 的维度是**多个独立参数**,不是元组;`randint` 的 `size` 才是元组。
### choice / shuffle / permutation ```python import numpy as np np.random.seed(73) # choice: 从给定数组中随机抽样 a = np.random.choice([10, 20, 30, 40, 50], size=3, replace=False) # replace=False 表示不放回抽样;可用 p 指定每个元素的概率 b = np.random.choice([0, 1], size=10, p=[0.7, 0.3]) # shuffle: 原地打乱数组(无返回值) arr = np.arange(10) np.random.shuffle(arr) # permutation: 返回打乱后的副本,原数组不变 perm = np.random.permutation(10) ``` | 函数 | 关键参数 | 说明 | |------|----------|------| | `choice(a, size, replace, p)` | `a` 候选集;`replace` 是否放回;`p` 抽样概率 | 随机抽样 | | `shuffle(x)` | 被打乱的数组 | **原地**打乱,返回 None | | `permutation(x)` | 整数或数组 | 返回打乱的**副本** |
### 常见分布函数 ```python import numpy as np np.random.seed(73) # uniform: [low, high) 均匀分布 u = np.random.uniform(low=0.0, high=1.0, size=5) # normal: 正态分布,loc 均值,scale 标准差 n = np.random.normal(loc=0.0, scale=1.0, size=5) # binomial: 二项分布,n 次试验,p 为成功概率 b = np.random.binomial(n=10, p=0.5, size=5) # poisson: 泊松分布,lam 为单位时间平均发生次数 p = np.random.poisson(lam=3.0, size=5) # exponential: 指数分布,scale = 1/λ e = np.random.exponential(scale=1.0, size=5) # beta / gamma / chisquare 等 be = np.random.beta(a=2.0, b=5.0, size=5) g = np.random.gamma(shape=2.0, scale=1.0, size=5) ``` | 函数 | 主要参数 | 分布 | |------|----------|------| | `uniform(low, high, size)` | 区间下界/上界 | 均匀分布 | | `normal(loc, scale, size)` | 均值/标准差 | 正态分布 | | `binomial(n, p, size)` | 试验次数/成功概率 | 二项分布 | | `poisson(lam, size)` | 平均发生次数 λ | 泊松分布 | | `exponential(scale, size)` | scale = 1/λ | 指数分布 | | `lognormal(mean, sigma, size)` | 底层正态的 μ/σ | 对数正态分布 |
参考文章