0

0

PyTorch 高级索引:高效实现每行动态列索引赋值

霞舞

霞舞

发布时间:2026-02-16 16:21:10

|

930人浏览过

|

来源于php中文网

原创

PyTorch 高级索引:高效实现每行动态列索引赋值

本文详解如何在 PyTorch 中避免显式 for 循环,使用扁平化索引或 scatter_ 实现“每行按不同列索引批量赋值”,显著提升张量操作效率。

本文详解如何在 pytorch 中避免显式 for 循环,使用扁平化索引或 `scatter_` 实现“每行按不同列索引批量赋值”,显著提升张量操作效率。

在 PyTorch 中,对二维张量按行进行非均匀列索引赋值(例如:第 i 行需将列 [2,3] 设为 -1,第 j 行仅设列 [1])是一个常见但易踩坑的操作。直接使用 x[torch.arange(n), list_of_lists] 会因子列表长度不一致触发 IndexError: shape mismatch——因为 PyTorch 的高级索引要求所有索引张量维度可广播,而变长列表无法直接转为同形张量。

✅ 推荐方案:扁平化索引(高效、简洁、原地修改)

核心思想是将二维索引 (row_i, col_j) 映射为一维线性索引:linear_idx = row_i * cols + col_j,再对 x.flatten() 进行单维索引。该方法零拷贝、原地修改、无内存冗余,性能最优。

import torch

n, m = 9, 4
x = torch.arange(0, n * m).reshape(n, m)
list_of_indices = [
    [], [2, 3], [1], [], [], [], [0, 1, 2, 3], [], [0, 3]
]

# 步骤1:生成全局线性索引(列表推导式)
indices = torch.tensor([
    i * m + j 
    for i, row_indices in enumerate(list_of_indices) 
    for j in row_indices
])

# 步骤2:对展平后的张量进行索引赋值(原地生效)
x.flatten()[indices] = -1

print(x)
# 输出与 for-loop 完全一致,但向量化执行

✅ 优势:x.flatten() 返回视图(view),不复制数据;indices 为一维 LongTensor,支持任意长度;全程 GPU 可加速。

多奥淘宝客程序API免费版 F8.0
多奥淘宝客程序API免费版 F8.0

多奥淘宝客程序免费版拥有淘宝客站点的基本功能,手动更新少,管理简单等优点,适合刚接触网站的淘客们,或者是兼职做淘客们。同样拥有VIP版的模板引擎技 术、强大的文件缓存机制,但没有VIP版的伪原创跟自定义URL等多项创新的搜索引擎优化技术,除此之外也是一款高效的API数据系统实现无人值守全自动 化运行的淘宝客网站程序。4月3日淘宝联盟重新开放淘宝API申请,新用户也可使用了

下载

⚠️ 注意事项与边界处理

  • 空子列表安全:推导式中 for j in [] 自动跳过,无需额外过滤。
  • 索引合法性:确保所有 j 满足 0 ≤ j
  • GPU 张量兼容:indices 需与 x 同设备:
    indices = indices.to(x.device)

? 替代方案:torch.scatter_(语义清晰,但稍冗余)

若需链式调用或强调“散射”语义,可用 scatter_,但需注意其返回修改后的张量视图,且需手动恢复形状

x_flat = x.flatten()
x_flat.scatter_(0, indices, -1)  # 原地修改 x_flat
x = x_flat.view_as(x)  # 恢复原始形状(view_as 保证 shape & device 一致)

⚠️ 注意:scatter_ 不支持 out= 参数的原地写入到 x.flatten() 的别名,必须显式 view_as;且当 indices 含重复值时,后写入者覆盖先写入者(符合 scatter 语义)。

? 总结

方法 是否原地 是否需恢复形状 性能 适用场景
x.flatten()[idx] = val ✅ 是 ❌ 否 ⭐⭐⭐⭐⭐ 默认首选,简洁高效
scatter_ + view_as ✅ 是 ✅ 是 ⭐⭐⭐⭐ 需显式 scatter 语义或后续链式操作

无论选择哪种方式,都应避免 Python for 循环——尤其在训练循环或大规模张量场景下,向量化索引可带来数倍性能提升。掌握线性索引映射是解锁 PyTorch 高级索引能力的关键一步。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pytorch是干嘛的
pytorch是干嘛的

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

445

2024.05.29

Python AI机器学习PyTorch教程_Python怎么用PyTorch和TensorFlow做机器学习
Python AI机器学习PyTorch教程_Python怎么用PyTorch和TensorFlow做机器学习

PyTorch 是一种用于构建深度学习模型的功能完备框架,是一种通常用于图像识别和语言处理等应用程序的机器学习。 使用Python 编写,因此对于大多数机器学习开发者而言,学习和使用起来相对简单。 PyTorch 的独特之处在于,它完全支持GPU,并且使用反向模式自动微分技术,因此可以动态修改计算图形。

27

2025.12.22

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

145

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

100

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

34

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

14

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

19

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

27

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

11

2026.02.12

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号