0

0

如何使用高级索引从多维 NumPy 数组中提取多个指定位置的元素

聖光之護

聖光之護

发布时间:2026-01-04 15:24:10

|

635人浏览过

|

来源于php中文网

原创

如何使用高级索引从多维 NumPy 数组中提取多个指定位置的元素

本文详解 numpy 高级索引机制,说明为何直接用二维索引数组 `a[idx]` 会导致维度膨胀,并演示如何正确传入各轴索引以精准提取多个标量元素。

在 NumPy 中,对多维数组进行批量元素提取时,直接将一个形状为 (N, D) 的索引数组 idx 用于 a[idx] 并不会按预期返回 N 个标量值——相反,它会触发“基本索引广播”行为:NumPy 将 idx 视为对第 0 轴的索引,然后将剩余维度(即 a 的后 D 维)完整复制,最终导致输出形状为 (N,) + a.shape[1:]。正如示例中 a 形状为 (3, 3, 3)、idx 为 (2, 3),a[idx] 实际等价于 a[[0, 0], ...] 和 a[[0, 1], ...] 的组合,结果为 (2, 3, 3, 3),完全偏离目标。

要真正实现“提取 N 个坐标点对应的标量值”,必须使用 NumPy 高级索引(Advanced Indexing),即为每一维单独提供一维索引数组。核心原则是:所有轴的索引数组必须长度一致(均为 N),且沿对应维度广播

✅ 正确做法如下:

import numpy as np

a = np.random.random((3, 3, 3))
idx = np.array([[0, 0, 0],   # → 提取 a[0, 0, 0]
                [0, 1, 2]])  # → 提取 a[0, 1, 2]

# 分别提取 idx 的每列作为各轴索引(高级索引)
b = a[idx[:, 0], idx[:, 1], idx[:, 2]]

print(b.shape)  # (2,)
print(b)        # [a[0,0,0], a[0,1,2]] —— 两个标量组成的 1D 数组

? 关键说明:

天谱乐
天谱乐

唱鸭旗下AI音乐创作平台,为您提供个性化音乐创作体验!

下载
  • idx[:, 0] 是第 0 轴索引(形状 (2,)),idx[:, 1] 是第 1 轴索引,idx[:, 2] 是第 2 轴索引;
  • NumPy 将这三者视为“并行索引对”,执行 (i0,i1,i2) → a[i0,i1,i2] 的逐点映射;
  • 所有索引数组必须可广播(此处均为 (2,),完美匹配);
  • 若 a 是 4D 数组,idx 应为 (N, 4),调用方式为 a[idx[:,0], idx[:,1], idx[:,2], idx[:,3]]。

⚠️ 注意事项:

  • 切勿混用基本索引与高级索引导致意外广播(如 a[idx, :] 在 idx 为二维时仍会出错);
  • 索引值必须在各自维度范围内,越界将引发 IndexError;
  • 对于动态维度数,可借助 tuple(idx.T) 简洁表达:a[tuple(idx.T)](因 idx.T 形状为 (3, 2),解包后等价于 idx[:,0], idx[:,1], idx[:,2])。

总结:多维数组的批量坐标提取,本质是高级索引问题。牢记“每轴一索引、长度对齐、逐点映射”三原则,即可精准、高效地获取所需元素。

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
免费看漫画app合集_2026免费漫画app排行榜入口
免费看漫画app合集_2026免费漫画app排行榜入口

2026年免费漫画APP合集来啦!为你精心整理最新免费漫画APP排行榜入口,涵盖漫蛙漫画、香香漫画、包子漫画等热门神器,海量正版国漫、日漫、韩漫资源全免费阅读,无需付费解锁章节!高清全彩画质、每日极速更新,支持离线下载、智能推荐、条漫阅读模式,热血、恋爱、悬疑、古风、搞笑等题材应有尽有。无论你是追新番老粉还是小白漫迷,这里都能让你一站式追漫到爽,告别广告干扰和会员套路!赶紧点击入口下载体验,开启2026无限免费漫画之旅吧!

0

2026.01.07

Java响应式编程Project Reactor_Java响应式编程怎么用Project Reactor
Java响应式编程Project Reactor_Java响应式编程怎么用Project Reactor

Project Reactor是基于Java的非阻塞响应式编程库,实现了 Reactive Streams规范,通过Flux (0..N元素流) 和 Mono (0..1元素流) 抽象,提供了丰富的操作符来处理异步数据流,是构建高效、事件驱动、支持背压的现代JVM应用(特别是与Spring WebFlux集成)的基础。

0

2026.01.07

Python 深度学习框架与TensorFlow入门
Python 深度学习框架与TensorFlow入门

本专题深入讲解 Python 在深度学习与人工智能领域的应用,包括使用 TensorFlow 搭建神经网络模型、卷积神经网络(CNN)、循环神经网络(RNN)、数据预处理、模型优化与训练技巧。通过实战项目(如图像识别与文本生成),帮助学习者掌握 如何使用 TensorFlow 开发高效的深度学习模型,并将其应用于实际的 AI 问题中。

4

2026.01.07

Python 深度学习框架与TensorFlow入门
Python 深度学习框架与TensorFlow入门

本专题深入讲解 Python 在深度学习与人工智能领域的应用,包括使用 TensorFlow 搭建神经网络模型、卷积神经网络(CNN)、循环神经网络(RNN)、数据预处理、模型优化与训练技巧。通过实战项目(如图像识别与文本生成),帮助学习者掌握 如何使用 TensorFlow 开发高效的深度学习模型,并将其应用于实际的 AI 问题中。

0

2026.01.07

漫蛙2入口地址合集
漫蛙2入口地址合集

本专题整合了漫蛙2入口汇总,阅读专题下面的文章了解更多详细内容。

189

2026.01.06

AO3中文版地址汇总
AO3中文版地址汇总

本专题整合了AO3中文版地址合集,阅读专题下面的文章了解更多详细内容。

146

2026.01.06

python cv2模块教程大全
python cv2模块教程大全

本专题整合了python cv2模块相关教程,阅读专题下面的文章了解更多详细教程。

42

2026.01.06

python创建txt文件教程大全
python创建txt文件教程大全

本专题整合了python创建txt文件相关教程,阅读专题下面的文章了解更多详细内容。

21

2026.01.06

python去掉字符串空格教程大全
python去掉字符串空格教程大全

本专题整合了python去掉字符串空格教程大全,阅读专题下面的文章了解更多详细内容。

2

2026.01.06

热门下载

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

精品课程

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

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