NumPy作为Python科学计算的核心库,提供了丰富的数据生成方法。本文将结合实例代码,详细解析7种最常用的数据生成方式。
np.linspace(start, stop, num)
生成闭区间内指定数量的等分点:
# 生成[-5, 5]内的9个等分点(包含端点)
x = np.linspace(-5, 5, 9)
# 结果:[-5. -3.75 -2.5 ... 3.75 5. ]
特点:
endpoint=False
关闭)np.arange(start, stop, step)
生成固定步长的序列:
# 生成[-5, 5)步长为1的整数序列
x = np.arange(-5, 5, 1)
# 结果:[-5 -4 -3 ... 3 4]
注意事项:
np.random.uniform(low, high, size)
生成指定区间内的均匀分布随机数:
# 生成10个[-5,5)的随机数
x = np.random.uniform(-5, 5, 10)
# 示例值:[-4.57, -0.18, 3.08,...]
np.random.rand(d0,d1,...)
生成[0,1)区间的均匀分布:
# 生成3x2矩阵
x = np.random.rand(3, 2)
# 示例值:[[0.297, 0.374],...]
np.random.normal(loc, scale, size)
生成指定参数的正态分布:
# 均值5,标准差2的10个样本
x = np.random.normal(5, 2, 10)
# 示例值:[0.78, 5.08, 4.88,...]
np.random.randint(low, high, size)
生成整型随机数:
# 生成10个[-5,5)的整数
x = np.random.randint(-5, 5, 10)
# 示例值:[0, 3, -2,...]
np.logspace(start, stop, num)
生成对数等分序列:
# 10^(-5)到10^5生成10个点
x = np.logspace(-5, 5, 10)
# 结果:[1e-05, 1.29e-04,...1e+05]
等价于:
10 ** np.linspace(-5, 5, 10)
方法 | 输出类型 | 区间特性 | 典型应用场景 |
---|---|---|---|
linspace | 等间隔浮点数 | start, stop | 曲线绘制、插值计算 |
arange | 步长序列 | [start, stop) | 整数序列生成、简单循环 |
uniform | 均匀分布 | [low, high) | 随机模拟、参数采样 |
normal | 正态分布 | 实数域 | 统计建模、噪声生成 |
logspace | 对数序列 | 10^start到10^stop | 频谱分析、指数级数实验 |
randint | 离散整数 | [low, high) | 索引生成、随机选择 |
from __future__ import annotations
import numpy as np
# 在区间 [start, stop] 内生成 num 个等间隔的点
# [-5. -3.75 -2.5 -1.25 0. 1.25 2.5 3.75 5. ]
x1 = np.linspace(-5 , 5 , 9)
print('从[-5, 5]中生成 9 个等间隔的点' , x1)
# 根据固定步长 step 生成区间 [start, stop) 内的值。
# [-5 -4 -3 -2 -1 0 1 2 3 4]
x2 = np.arange(-5 , 5 , 1)
print('根据步长生成取值点' , x2)
# 从均匀分布中采样,生成区间 [low, high) 内的随机数
"""
[-4.56820017 -0.18091668 3.08155666 2.16653036
-0.8515069 0.96415316 0.11633998 -2.79085614
-0.60676836 4.38393604]
"""
x3 = np.random.uniform(-5 , 5 , 10)
print('从[-5, 5)内均匀分布采样 10 个值' , x3)
# 生成 [0.0, 1.0) 内的均匀分布随机数
# 如果需要指定范围,则更建议直接使用 uniform
# 如果需要将 rand 进行区间平移,则建议使用 a + (b-a) * rand(m, n) 的方式
"""
生成 3 行 2 列随机数
[[0.29727613 0.37456884]
[0.52293124 0.1991879 ]
[0.14484268 0.43416269]]
"""
x4 = np.random.rand(3 , 2)
print('从[0.0, 1.0]中均匀采样 N * M 矩阵的随机数' , x4)
# 生成均值为5,标准差为2的正态分布
"""
[0.7802702 5.07719875 4.88372568 4.10761569
1.84558326 -2.16768918 2.39629007 4.1577861
4.58703296 6.02016378]
"""
x5 = np.random.normal(5 , 2 , 10)
print('生成均值为5,标准差为2的正态分布' , x5)
# 在对数尺度下生成等间隔的点,如 [10^start, 10^stop]
"""
[1.00000000e-05 1.29154967e-04 1.66810054e-03 2.15443469e-02
2.78255940e-01 3.59381366e+00 4.64158883e+01 5.99484250e+02
7.74263683e+03 1.00000000e+05]
"""
x6 = np.logspace(-5 , 5 , 10)
print('在对数尺度[10^-5, 10^5]范围内生成10个等间隔的点' , x6)
# 生成 [low, high) 区间内的随机整数(左闭右开)
# low:最小值(包含),必须指定。
# high:最大值(不包含),若省略则默认 low 为 0,high 为传入的第一个参数
# size:输出数组的形状(如标量、元组),默认为 None(返回单个整数)
x7 = np.random.randint(-5 , 5 , 10) # [ 0 3 3 3 -2 -1 -1 -4 -1 1]
print('在[-5, 5]内生成 10 个随机整数' , x7)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。