当前位置: 首页 > article >正文

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]

http://www.kler.cn/a/595567.html

相关文章:

  • Docker 速通(总结)
  • 【Unity基础】Unity中角色动画的三种实现方式
  • DAY13 线程池、死锁、线程状态、计时器
  • 如何在ubuntu上安装zookeeper
  • 在 Elasticsearch 中探索基于 NVIDIA 的 GPU 加速向量搜索
  • w265基于Spring Boot库存管理系统
  • 【C++】static、内部类
  • Vue.js 过滤器(Filters):简化文本格式化的利器
  • 测试Claude3.7 sonnet画蛋白质
  • 「AI+办公」共学(四):办公综合应用
  • 实现拖拽图片验证的基本步骤
  • AI 时代的通信新范式:MCP(模块化通信协议)的优势与应用
  • 关于神经网络中的激活函数
  • 第2.1节:AWK脚本结构
  • Resume全栈项目(.NET)
  • 华为总部-华为东莞松山湖基地参观游学攻略
  • 【DeepSeek 学C+】effective modern c+ 条款七 初始化
  • PurpleLlama大模型安全全套检测方案
  • OpenCV ML 模块使用指南
  • 机器学习-04-分类算法-02贝叶斯算法案例