杨桃的Python进阶讲座17——数组array(七)三维数组和n维数组的索引和取值(配详细图解)

2023-11-14

本人CSDN博客专栏:https://blog.csdn.net/yty_7

Github地址:https://github.com/yot777/

 

三维数组的索引和取值

创建一个numpy三维数组z,如下所示:

>>> import numpy as np
>>> z=np.array([[[1,2,3,4],[5,6,7,8]],[[9,10,11,12],[13,14,15,16]]])
>>> print(z)
[[[ 1  2  3  4]
  [ 5  6  7  8]]

 [[ 9 10 11 12]
  [13 14 15 16]]]

三维数组没有了矩阵的行、列概念,但我们可以用shape()函数查看它的维度信息:

>>> np.shape(z)
(2, 2, 4)

三维数组z的维度是(2, 2, 4),是不是挺难理解的呢!

其实把(2, 2, 4)变型为(2, (2, 4)),即2个(2, 4)矩阵,就成了三维数组啦!

图示如下,可理解为三维数组z是由2(2, 4)的矩阵平面构成的

我们继续使用二维数组的索引方式来查看三维数组,如下:

如果[ ]以数字或者单冒号开头,表示取矩阵平面的全部元素,举例:

>>> z[0]             #取第0个矩阵平面的元素
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
>>> z[1]             #取第1个矩阵平面的元素
array([[ 9, 10, 11, 12],
       [13, 14, 15, 16]])
>>> z[:1]            #取从0开始到1-1=0个矩阵平面的元素
array([[[1, 2, 3, 4],
        [5, 6, 7, 8]]])

图示:

如果[ ]以冒号逗号(即:,)开头,表示取矩阵平面行元素,举例:

>>> z[:,0]       #取所有矩阵平面的第0行
array([[ 1,  2,  3,  4],
       [ 9, 10, 11, 12]])
>>> z[:,1]       #取所有矩阵平面的第1行
array([[ 5,  6,  7,  8],
       [13, 14, 15, 16]])

图示:

取指定某个矩阵平面某一行,使用[矩阵平面号][行号]来表示

取指定某个矩阵平面某一列,使用[矩阵平面号][:, 列号]来表示

举例:

>>> z[0][1]          #取第0个矩阵平面的第1行
array([5, 6, 7, 8])
>>> z[1][0]          #取第1个矩阵平面的第0行
array([ 9, 10, 11, 12])
>>> z[0][:,2]        #取第0个矩阵平面的第2列
array([3, 7])   
>>> z[1][:,3]        #取第1个矩阵平面的第3列
array([12, 16])

图示:

如果[ ]以两个冒号逗号(即:,:,)开头,表示取矩阵平面列元素,举例:

>>> z[:,:,0]         #取所有矩阵平面的第0列
array([[ 1,  5],
       [ 9, 13]])
>>> z[:,:,2]         #取所有矩阵平面的第2列
array([[ 3,  7],
       [11, 15]])

图示:

取三维数组的某个具体元素,使用[矩阵平面号][行号][列号]的方式来表示,举例:

>>> z[0][1][2]     #取第0个矩阵平面第1行第2列的数据
7
>>> z[1][1][1]     #取第1个矩阵平面第1行第1列的数据
14

图示:

n维数组的索引和取值

对于超过三维的n维数组,很难用直观的方法画出图形,但我们仍然可以仿照三维数组的原则进行索引和取值

n维数组的形状可以表示为:

最右侧 x1为一维(最终存放元素的地方),x2一维元素的个数x3二维元素的个数……最左侧的xn为n-1维元素的个数。

举例:

(6,2,7,3,4)是一个五维数组s,一维有4个元素,二维有3个一维元素的个数,三维有7个二维元素的个数,四维有2个三维元素的个数,五维有6个四维元素的个数,总元素个数是4*3*7*2*6=1008个

那么s[a]只有一对中括号的时候,总共6个元素,取值从s[0]到s[5])

s[a][b]有两对中括号的时候,总共6*2=12个元素,取值从s[0][0]到s[0][1],再从s[1][0]到s[1][1]……直到从s[5][0]到s[5][1]

s[a][b][c]有三对中括号的时候,总共6*2*7=84个元素,取值从s[0][0][0]到s[0][0][6],再从s[0][1][0]到s[0][1][6],

再从s[1][0][0]到s[5][1][6]

……

因此,可以采取多重循环的方式对五维数组s的元素进行遍历,从最内层到最外层:

第一层循环:从s[0][0][0][0][0]到s[0][0][0][0][3]    (4次循环)

第二层循环:从s[0][0][0][0][0]到s[0][0][0][2][3]     (3次循环)

第三层循环:从s[0][0][0][0][0]到s[0][0][6][2][3]     (7次循环)

第四层循环:从s[0][0][0][0][0]到s[0][1][6][2][3]     (2次循环)

第五层循环:从s[0][0][0][0][0]到s[5][1][6][2][3]     (6次循环)

遍历时,每一层循环都必须进行相应次数的下一层循环才行,因此总共进行6*2*7*3*4=1008次循环。

 

总结

三维数组是由二维矩阵平面构成的

如果[ ]以数字或者单冒号开头,表示取矩阵平面的全部元素

如果[ ]以冒号逗号(即:,)开头,表示取矩阵平面行元素

取指定某个矩阵平面某一行,使用[矩阵平面号][行号]来表示

取指定某个矩阵平面某一列,使用[矩阵平面号][:, 列号]来表示

如果[ ]以两个冒号逗号(即:,:,)开头,表示取矩阵平面列元素

取三维数组的某个具体元素,使用[矩阵平面号][行号][列号]的方式来表示

n维数组的形状可以表示为:

最右侧 x1为一维(最终存放元素的地方),x2一维元素的个数x3二维元素的个数……最左侧的xn为n-1维元素的个数。

遍历n维数组时,每一层循环都必须进行相应次数的下一层循环才行,因此总共进行xn*xn-1*……*x3*x2*x1次循环。

 

本人CSDN博客专栏:https://blog.csdn.net/yty_7

Github地址:https://github.com/yot777/

如果您觉得本篇本章对您有所帮助,欢迎关注、评论、点赞!Github欢迎您的Follow、Star!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

杨桃的Python进阶讲座17——数组array(七)三维数组和n维数组的索引和取值(配详细图解) 的相关文章

  • 上传时的 Google Drive API——这些额外的空行从何而来?

    总结一下该程序 我从我的 Google 云端硬盘下载一个文件 然后在本地计算机中打开并读取一个文件 file a txt 然后在我的计算机中打开另一个文件 file b txt 处于附加模式 并且在使用这个新的 file b 更新我的 Go
  • 检测到通过 ChromeDriver 启动的 Chrome 浏览器

    我正在尝试在 python 中使用 selenium chromedriver 来访问 www mouser co uk 网站 然而 从第一次拍摄开始 它就被检测为机器人 有人对此有解释吗 此后我使用的代码 options Options
  • 使用 Python 创建 MIDI

    本质上 我正在尝试从头开始创建 MIDI 并将它们放到网上 我对不同的语言持开放态度 但更喜欢使用Python 两种语言之一 如果这有什么区别的话 并且想知道我应该使用哪个库 提前致谢 看起来这就是您正在寻找的 适用于 Python 的简单
  • 如何使用 colorchecker 在 opencv 中进行颜色校准?

    我有数码相机获取的色彩检查器图像 我如何使用它来使用 opencv 校准图像 按照以下颜色检查器图像操作 您是想问如何进行颜色校准或如何使用 OpenCV 进行校准 为了进行颜色校准 您可以使用校准板的最后一行 灰色调 以下是您应该逐步进行
  • Pyqt-如何因另一个组合框数据而更改组合框数据?

    我有一个表 有 4 列 这 4 列中的两列是关于功能的 一个是特征 另一个是子特征 在每一列中 所有单元格都有组合框 我可以在这些单元格中打开txt 我想 当我选择电影院作为功能时 我只想看到子功能组合框中的电影名称 而不是我的 数据 中的
  • Pandas dataframe:每批行的操作

    我有一个熊猫数据框df我想计算每批行的一些统计信息 例如 假设我有一个batch size 200000 对于每批batch sizerows 我想要一列的唯一值的数量ID我的数据框 我怎样才能做这样的事情呢 这是我想要的一个例子 prin
  • 字符串中的注释和注释中的字符串

    我正在尝试使用 Python 和 Regex 计算 C 代码中包含的注释中的字符数 但没有成功 我可以先删除字符串以删除字符串中的注释 但这也会删除注释中的字符串 结果会很糟糕 是否有机会通过使用正则表达式来询问不匹配注释中的字符串 反之亦
  • 小部件之间的自定义信号

    尝试将信号从一个 gtk EventBox 子级发送到另一个 在 init HeadMode 第 75 行 上出现错误 类型错误 未知信号名称 消息发送 why usr bin env python coding utf8 import p
  • Python中列表中两个连续元素的平均值

    我有一个偶数个浮点数的列表 2 34 3 45 4 56 1 23 2 34 7 89 我的任务是计算 1 和 2 个元素 3 和 4 5 和 6 等元素的平均值 在 Python 中执行此操作的快捷方法是什么 data 2 34 3 45
  • 根据 Pandas 中的列表对多列进行排序

    感谢有关如何根据 pandas 中的倍数列表对给定多列进行排序的任何提示 如下所示 import pandas as pd sort a a d e sort b s1 s3 s6 sort c t1 t2 t3 df pd DataFra
  • 编辑 Jupyter Notebook 时 VS Code 中缺少“在选择中查找”

    使用 Jupyter Notebook 时 VSCode 中缺少 在选择中查找 按钮 它会减慢开发速度 所以我想请问有人知道如何激活它吗 第一张图显示了在 python 文件中的搜索 替换 第二张图显示了笔记本电脑中缺少的按钮 Python
  • CNTK 抱怨 LSTM 中的动态轴

    我正在尝试在 CNTK 中实现 LSTM 使用 Python 来对序列进行分类 Input 特征是固定长度的数字序列 时间序列 标签是 one hot 值的向量 Network input input variable input dim
  • 揭秘sharedctypes性能

    在 python 中 可以在多个进程之间共享 ctypes 对象 然而我注意到分配这些对象似乎非常昂贵 考虑以下代码 from multiprocessing import sharedctypes as sct import ctypes
  • Python Django-如何从输入文件标签读取文件?

    我不想将文件保存在我的服务器上 我只想在下一页中读取并打印该文件 现在我有这个 index html
  • GradientTape 根据损失函数是否被 tf.function 修饰给出不同的梯度

    我发现计算的梯度取决于 tf function 装饰器的相互作用 如下所示 首先 我为二元分类创建一些合成数据 tf random set seed 42 np random seed 42 x tf random normal 2 1 y
  • 使用 Conda 更新特定模块会删除大量软件包

    我最近开始使用 Anaconda Python 发行版 因为它提供了许多开箱即用的数据分析库 使用 conda 创建环境和安装软件包也轻而易举 但是当我想更新 Python 本身或任何其他模块时 我遇到了一些严重的问题 我事先被告知我的很多
  • 以编程方式使用 Sphinx 特定指令解析 .rst 文件

    我希望能够在 Python 中解析基于 sphinx 的 rst 以便进一步处理和检查 就像是 import sphinx p sphinx parse path to file rst do something with p 似乎在 do
  • PIL - 需要抖动,但限制调色板会导致问题

    我是 Python 新手 正在尝试使用 PIL 来执行 Arduino 项目所需的解析任务 这个问题涉及到Image convert 方法以及调色板 抖动等选项 我有一些硬件能够一次仅显示 16 种颜色的图像 但它们可以指定为 RGB 三元
  • python 日志记录会刷新每个日志吗?

    当我使用标准模块将日志写入文件时logging 每个日志会分别刷新到磁盘吗 例如 下面的代码会将日志刷新 10 次吗 logging basicConfig level logging DEBUG filename debug log fo
  • 使用 Python 将对象列表转为 JSON

    我在转换时遇到问题Object实例到 JSON ob Object list name scaping myObj base url u number page for ob in list name json string json du

随机推荐

  • 正则匹配html内容中的图片路径

    正则匹配html内容中的图片路径 let imgReg
  • 事不避难,知难不难

    My first article
  • Qt 中引入ffmpeg 动态库

    1 前期准备 在qt引入ffmpeg动态库的时候 需要准备ffmpeg的动态库和头文件 2 打开qt项目 在qt项目的 pro文件中添加以下几行代码 INCLUDEPATH PWD thirtLib ffmpeg4 2 include wi
  • 使用R语言添加抖动数据点

    使用R语言添加抖动数据点 在数据可视化中 抖动 jitter 是一种常用的技术 用于在散点图中添加一定程度的随机扰动 以解决数据重叠的问题 本文将介绍如何使用R语言添加抖动数据点 并提供相应的源代码 首先 我们需要准备一组数据用于绘制散点图
  • HTTP的演变

    这个问题之前一直没有关注过 后来在面试的过程中 面试官总喜欢问http1 0和http1 1之间的区别是啥 改进是啥以及优缺点 在今天进行一个总结 Http1 0和Http1 1的对比 这里讲俩放在一起进行对比学习 相较于Http1 0而言
  • Java调用Python脚本报错cv2.error: OpenCV(4.8.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src

    Java调用python脚本报错cv2 error OpenCV 4 8 0 D a opencv python opencv python opencv modules imgproc src resize cpp 4062 error
  • Android开机动画

    Android开机动画 1 BootLoader开机图片 2 Kernel开机图片 3 系统启动时 BootAnimation 动画 3 1 bootanimation zip位置 3 2 bootanimation启动 3 3 Surfa
  • linux保存git用户名密码

    1 创建git credentials gt vim git credentials https username password github com gitlab或github地址 2 执行git命令 gt git config gl
  • leetcode分类刷题:二分查找(Binary Search)(四、基于值域的数组/矩阵类型)

    基于值域的二分法与基于定义域的题型不同 它的目标是从一 特殊排序序列 中确定 第k个元素值 而不像基于定义域的题型是从排序序列中找小于等于特定target值的第一个索引 同时 针对 特殊排序序列 往往需要嵌套使用双指针法进行操作 进一步增加
  • mysql数据库备份与表备份

    一 Mysql中的数据备份 Mysql中数据备份使用的命令是 mysqldump命令将数据库中的数据备份成一个文本文件 表的结构和表中的数据将存储在生成的文本文件中 mysqldump命令的 工作原理很简单 它先查出需要备份的表的结构 再在
  • 转码日记——Javascript笔记(13)修改css样式、事件冒泡和委派

    使用JS控制css样式 1 修改css样式 语法 元素 style 样式名称 样式值 样式值必须是一个字符串 修改box1的样式 box1 style width 300px 如果css中还有 如background color 这种名称在
  • 程序员修仙之路--优雅快速的统计千万级别uv(留言送书)

    菜菜 咱们网站现在有多少PV和UV了 Y总 咱们没有统计pv和uv的系统 预估大约有一千万uv吧 写一个统计uv和pv的系统吧 网上有现成的 直接接入一个不行吗 别人的不太放心 毕竟自己写的 自己拥有主动权 给你两天时间 系统性能不要太差呀
  • Head First 设计模式 C#实现

    Head First 设计模式 文章目录 Head First 设计模式 完整源码 设计模式入门 具体设计模式 策略模式 观察者模式 装饰者模式 工厂模式 抽象工厂模式 单例模式 命令模式 适配器模式 外观模式 模版方法模式 迭代器模式 组
  • 指针以及内存分配

    1 指针很灵活 这使得指针很难管理 在定义指针时 将在栈中开辟一块内存存放指针的地址 栈内的内存由系统分配和释放 指针的地址内存只是存放指针的地址 不存放指针指向的数据 值得注意的是 定义指针时指针会随机指向一块内存 如int p p会指向
  • 243. 一个简单的整数问题2(树状数组)

    输入样例 10 5 1 2 3 4 5 6 7 8 9 10 Q 4 4 Q 1 10 Q 2 4 C 3 6 3 Q 2 4 输出样例 4 55 9 15 解析 一般树状数组都是单点修改 区间查询或者单点查询 区间修改 这道题都是区间操作
  • 从C语言到C++(语法基础一)

    一 关键字的添加 C 是对C的 增强 几乎引入了一倍的关键字 C语言常用关键字 C 98关键字 二 命名空间 在写C语言程序时 当你写了一个函数把它命名为max 且此时包含头文件stdlib h时你会发现编译会报错 这是C语言的缺陷之一 因
  • 【漏洞复现】 Sudo缓存溢出提权漏洞(CVE-2021-3156)

    说明 此博客为本人的漏洞复现学习过程记录 前言 漏洞原理 本次的漏洞存在于Sudo上 一个基于堆的缓冲区溢出漏洞 CVE 2021 3156 该漏洞被命名为 Baron Samedit 在sudo解析命令行参数的方式中发现了基于堆的缓冲区溢
  • C++面试知识点

    strcpy函数实现 char strcpy char dest const char src assert dest NULL src NULL 检查指针的有效性 char res dest while dest src 0 return
  • Idea 插件下载缓慢,无法下载的解决方式

    要给idea装一个插件 但今天的idea死活下不下来插件 总报错 Plugin JProfiler was not installed Cannot download https plugins jetbrains com pluginMa
  • 杨桃的Python进阶讲座17——数组array(七)三维数组和n维数组的索引和取值(配详细图解)

    本人CSDN博客专栏 https blog csdn net yty 7 Github地址 https github com yot777 三维数组的索引和取值 创建一个numpy三维数组z 如下所示 gt gt gt import num