如何使用二维索引数组从三维 NumPy 数组中高效提取二维切片
发布时间 - 2026-01-30 00:00:00 点击率:次本文介绍如何利用 `np.choose` 从形状为 (10, 33, 66) 的 3d 数组中,依据形状为 (33, 66) 的二维索引数组,沿第一维(axis=0)精确选取对应元素,最终得到形状为 (33, 66) 的结果数组。
在 NumPy 中,当需要根据每个位置的索引从高维数组中“逐点选取”元素时(即所谓的“高级索引”或“花式索引”),np.choose 是一个简洁而高效的解决方案——尤其适用于沿首个轴(axis=0)进行索引的情形。
假设我们有如下数据:
import numpy as np # 构造示例 3D 数组:(10, 33, 66) data_3d = np.random.random((10, 33, 66)) # 构造 2D 索引数组:每个 (i, j) 位置指定应取 data_3d[k, i, j] 中的 k 值 index_2d = np.random.randint(0, 10, size=(33, 66)) # 值域 [0, 9]
目标是生成一个形状为 (33, 66) 的二维数组 result,其中:
result[i, j] == data_3d[index_2d[i, j], i, j]
✅ 正确做法:使用 np.choose
result = np.choose(index_2d, data_3d)
⚠️ 注意事项:
- np.choose 要求 index_2d 的值必须是 非负整数,且严格小于 data_3d.shape[0](即 0 ≤ index_2d[i,j]
- data_3d 会被自动视为一个包含 10 个 (33, 66) 子数组的序列(即 data_3d[0], data_3d[1], ..., data_3d[9]),np.choose 按 index_2d[i,j] 从中选择第 k 个子数组的 (i,j) 元素。
- 该操作等价于但显著快于显式循环或 np.stack(...)[index_2d, ...] 的广播写法(后者需构造大中间数组)。
? 替代方案(兼容性更强,推荐用于复杂场景): 若索引维度不固定或需更高灵活性(如索引其他轴),可改用 np.ogrid + 高级索引:
i_grid, j_grid = np.ogrid[:33, :66] result = data_3d[index_2d, i_grid, j_grid] # 形状自动广播为 (33, 66)
此写法更直观、可扩展性强,且对索引范围检查更明确(支持布尔索引、负索引等),是现代 NumPy 实践中的首选。
✅ 总结:
- 对「按二维索引沿第一维选取」任务,np.choose(index_2d, data_3d) 最简明;
- 对需调试、扩展或索引非首轴的场景,优先使用 data_3d[index_2d, i_grid, j_grid];
- 始终确保索引数组 dtype 为 in
t,值域合法,避免运行时错误。
# numpy
# Array
# int
# 循环
# 切片
# 值域
# 组中
# 是一个
# 适用于
# 更高
# 布尔
# 更强
# 首个
# 即所谓
# 快于
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
网站制作免费,什么网站能看正片电影?
利用JavaScript实现拖拽改变元素大小
如何快速搭建安全的FTP站点?
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
Python并发异常传播_错误处理解析【教程】
电商网站制作价格怎么算,网上拍卖流程以及规则?
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
如何在景安服务器上快速搭建个人网站?
Laravel Fortify是什么,和Jetstream有什么关系
怎么用AI帮你为初创公司进行市场定位分析?
java获取注册ip实例
公司网站制作价格怎么算,公司办个官网需要多少钱?
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
香港服务器部署网站为何提示未备案?
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何在IIS中配置站点IP、端口及主机头?
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
如何在万网主机上快速搭建网站?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
详解jQuery停止动画——stop()方法的使用
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
js实现点击每个li节点,都弹出其文本值及修改
详解Android——蓝牙技术 带你实现终端间数据传输
如何在企业微信快速生成手机电脑官网?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
Laravel怎么连接多个数据库_Laravel多数据库连接配置
html如何与html链接_实现多个HTML页面互相链接【互相】
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
如何在阿里云虚拟服务器快速搭建网站?
Laravel用户密码怎么加密_Laravel Hash门面使用教程
如何构建满足综合性能需求的优质建站方案?
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
Laravel怎么实现验证码(Captcha)功能
如何在阿里云虚拟主机上快速搭建个人网站?
如何在橙子建站中快速调整背景颜色?
如何在IIS中新建站点并解决端口绑定冲突?
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
网页设计与网站制作内容,怎样注册网站?
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
php485函数参数是什么意思_php485各参数详细说明【介绍】
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册


