讲师中心 微信公众号
AI工具推荐 视频效率加速

PyTorch 教程:高效构建布朗运动轨迹张量(避免内存共享与列表拼接陷阱)

落枫小哥_7751

落枫小哥_7751

发布时间:2026-01-17 13:28:47

|

241人浏览过

|

来源于php中文网

原创

PyTorch 教程:高效构建布朗运动轨迹张量(避免内存共享与列表拼接陷阱)

本文详解如何在 pytorch 中正确模拟多起点一维布朗运动,并将各时间步轨迹高效合并为单个二维张量,重点规避 `+=` 原地操作导致的内存共享错误,以及使用 `torch.cat` 替代低效列表追加。

在科学计算与随机过程建模中,常需对多个初始点并行模拟布朗运动(Wiener 过程)。例如,给定初始位置向量 dataset(形状为 (n, 1)),我们希望生成长度为 k+1 的轨迹——对应时间点 t=0, dt, 2dt, ..., t,最终输出形状应为 (n, k+1) 的张量,其中每行代表一个起点的完整路径。

关键挑战在于:不能使用原地更新(如 x += ...)。若直接修改同一张量对象并反复 append 到 Python 列表中,所有列表元素实际指向同一内存地址,导致最终所有时间步的值完全相同——这会彻底破坏布朗运动的时序演化特性。

正确做法是:每次基于上一时刻状态创建新张量(即 path[-1] + ...),确保每步状态独立;最后用 torch.cat(..., dim=-1) 沿最后一维(列方向)拼接所有 (n, 1) 张量,得到 (n, k+1) 结果。

A Python CLI skill for Cutout.Pro visual APIs — background removal, face cutout, and photo enhancement. Supports file upload & image URL input.
A Python CLI skill for Cutout.Pro visual APIs — background removal, face cutout, and photo enhancement. Supports file upload & image URL input.

调用 Cutout.Pro 视觉处理 API 进行背景移除、人像抠图和照片增强,支持文件上传与图片 URL 输入。

下载

以下是完整、可运行的实现:

import torch
import numpy

def brownian_motion(x, t, dt):
    """
    模拟多起点一维布朗运动

    Args:
        x (Tensor): 初始位置,shape = (n, 1)
        t (float): 终止时间
        dt (float): 时间步长

    Returns:
        Tensor: 轨迹矩阵,shape = (n, k+1),每行是一个样本的路径
    """
    k = int(t / dt)  # 时间步数(不含 t=0)
    path = [x]  # 初始化:t=0 时刻

    for _ in range(k):
        # 生成标准正态增量:shape 同 x
        dW = torch.normal(mean=torch.zeros_like(x), std=torch.ones_like(x))
        # 更新:非原地操作,生成新张量
        next_x = path[-1] + numpy.sqrt(dt) * dW
        path.append(next_x)

    # 沿列维度拼接:(n,1) + (n,1) + ... → (n, k+1)
    return torch.cat(path, dim=-1)

# 示例验证
data = torch.normal(0, 1, size=(1, 3))
dataset = torch.tensor(data.T).float()  # shape: (3, 1)
print("初始位置:")
print(dataset)

result = brownian_motion(dataset, t=0.02, dt=0.01)
print("\n布朗运动轨迹(t=0, 0.01, 0.02):")
print(result)

注意事项:

  • ✅ 使用 torch.cat(..., dim=-1) 是 PyTorch 推荐的张量拼接方式,比 torch.stack(要求新增维度)更贴合本例需求;
  • ❌ 避免 x += ... 或 x.copy_(...),它们会覆盖原始数据,破坏历史状态;
  • ⚠️ 若 t/dt 非整数,int() 截断可能导致精度损失,生产环境建议改用 math.floor() 或显式处理余数;
  • ? 对于大规模模拟(如 n > 10^4, k > 10^3),可考虑向量化实现(如预生成全部 dW 矩阵),进一步提升性能。

通过该方法,你不仅能获得结构清晰、内存安全的轨迹张量,还为后续批量训练、梯度回传或物理约束嵌入奠定了坚实基础。

热门AI工具

更多
讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5379

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2725

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

3348

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

2425

2025.08.29

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

598

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1476

2023.11.14

python中append的含义
python中append的含义

本专题整合了python中append的相关内容,阅读专题下面的文章了解更多详细内容。

2084

2025.09.12

pytorch是干嘛的
pytorch是干嘛的

pytorch是一个基于python的深度学习框架,提供以下主要功能:动态图计算,提供灵活性。强大的张量操作,实现高效处理。自动微分,简化梯度计算。预构建的神经网络模块,简化模型构建。各种优化器,用于性能优化。想了解更多pytorch的相关内容,可以阅读本专题下面的文章。

1903

2024.05.29

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

0

2026.09.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn