numpy学习笔记13:np.random.choice和np.cumsum的解释
numpy学习笔记13:steps = np.random.choice([-1, 1], size=num_steps)
steps = np.random.choice([-1, 1], size=num_steps) positions = np.cumsum(steps)
1、steps = np.random.choice([-1, 1], size=num_steps)详细解释
以下是关于代码 steps = np.random.choice([-1, 1], size=1000)
的详细解释:
1. 代码功能
这段代码使用 NumPy 的 random.choice
函数,生成一个包含 1000 个元素 的数组 steps
。每个元素的值随机从 [-1, 1]
中选择,且每个值的选取概率均等(默认均匀分布)。
2. 分步解析
(1) np.random.choice
函数
-
作用:从给定的一维数组中随机抽取元素。
-
关键参数:
-
a
:输入数组,这里为[-1, 1]
。 -
size
:输出数组的形状,这里为1000
,表示生成 1000 个元素。 -
replace
(可选):是否允许重复抽样(默认True
)。 -
p
(可选):指定每个元素的概率(默认均匀分布)。
-
(2) 输入数组 [-1, 1]
-
代码会从这两个值中随机选择:
-
-1
:可表示“向左移动”、“减少”或“负方向”。 -
1
:可表示“向右移动”、“增加”或“正方向”。
-
(3) size=1000
-
生成一个长度为 1000 的一维数组,例如:
print(steps.shape) # 输出 (1000,)
3. 生成结果示例
输出的 steps
数组可能如下(部分值):
array([ 1, -1, 1, 1, -1, -1, 1, ..., -1, 1])
4. 概率特性
-
默认均匀分布:每个元素(
-1
和1
)的选取概率均为 0.5。 -
验证概率:
# 统计 -1 和 1 的数量 count_neg1 = np.sum(steps == -1) # 约 500 次 count_1 = np.sum(steps == 1) # 约 500 次 print(f"-1 的比例: {count_neg1 / 1000:.2f}") print(f"1 的比例: {count_1 / 1000:.2f}")
5. 应用场景
(1) 随机游走模拟
-
生成步长序列,模拟粒子在直线上的随机运动:
position = np.cumsum(steps) # 累计和表示位置变化
(2) 二值决策模型
-
例如模拟硬币正反面(
-1
为反面,1
为正面)。
(3) 噪声生成
-
生成二元噪声信号,用于测试算法鲁棒性。
6. 扩展用法
(1) 非均匀概率
若需调整概率(如 -1
出现概率为 0.3,1
为 0.7):
steps = np.random.choice([-1, 1], size=1000, p=[0.3, 0.7])
(2) 生成多维数组
生成形状为 (100, 10)
的二维数组:
steps_2d = np.random.choice([-1, 1], size=(100, 10))
7. 与其他方法的对比
方法 | 特点 | 示例 |
---|---|---|
np.random.choice | 灵活指定值和概率,支持多维输出 | np.random.choice([-1,1], size=1000) |
np.random.randint | 生成整数区间内的随机值,但不支持自定义列表 | np.random.randint(0, 2, size=1000)*2 -1 |
np.sign(np.random.randn) | 生成 -1 和 1,服从标准正态分布概率 | np.sign(np.random.randn(1000)) |
总结
-
核心功能:从
[-1, 1]
中随机生成 1000 个值,每个值概率均等。 -
应用场景:随机游走、二值决策、噪声模拟等。
-
扩展性:可通过参数调整概率、输出形状和值的范围。
2、positions = np.cumsum(steps)详细解释
代码示例解释
以下是一个简单的示例,展示 np.cumsum
函数的工作原理:
python
import numpy as np
# 定义一个示例数组
steps = np.array([1, -2, 3, -1])
# 计算累积和
positions = np.cumsum(steps)
print("原始数组 steps:", steps)
print("累积和数组 positions:", positions)
代码执行过程
- 对于
steps
数组[1, -2, 3, -1]
,计算累积和的过程如下:- 第一个位置的累积和就是
steps
数组的第一个元素,即1
。 - 第二个位置的累积和是
steps
数组前两个元素的和,即1 + (-2) = -1
。 - 第三个位置的累积和是
steps
数组前三个元素的和,即1 + (-2) + 3 = 2
。 - 第四个位置的累积和是
steps
数组所有元素的和,即1 + (-2) + 3 + (-1) = 1
。
- 第一个位置的累积和就是
- 所以,最终得到的
positions
数组为[1, -1, 2, 1]
。