昊虹AI笔记网

 找回密码
 立即注册
搜索
查看: 966|回复: 0
收起左侧

对Numpy库ndarray对象(矩阵)中数据元素的访问、选取操作示例

[复制链接]

239

主题

241

帖子

926

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
926
昊虹君 发表于 2022-11-9 11:44 | 显示全部楼层 |阅读模式
对Numpy库ndarray对象(矩阵)中数据元素的访问、选取操作示例

为了说明这个问题,初始化一个矩阵B,其尺寸为两行四列三通道。
初始化矩阵B的代码如下:
  1. import numpy as np

  2. B = np.array([[[11, 12, 13, 14],
  3.                [15, 16, 17, 18]],
  4.               [[19, 20, 21, 22],
  5.                [23, 24, 25, 26]],
  6.               [[27, 28, 29, 30],
  7.                [31, 32, 33, 34]]])
复制代码

运行结果如下:


从其shape属性可以看出,B矩阵的尺寸为我们希望的三通道,两行,四列。
其具体的数据值如下:

                                          

                                          



接下来就对矩阵B的数据进行一系列访问和选取操作。
目录
  • 示例1:选取矩阵B的0通道
  • 示例2:选取矩阵B的1通道
  • 示例3:使用ndarray对象的切片操作同时选取矩阵的0通道和1通道
  • 示例4:选取矩阵B的第1通道的第1行
  • 示例5:选取矩阵B的第1通道第1行的第1列
  • 示例6:选取矩阵B的第1通道第1行的第1列到第3列
  • 示例7:选取矩阵B的第1通道第0行和第1行的第1列到第3列
  • 示例8:利用元组或列表选取非连续的通道、行或列的方法
  • 示例9:通过数组矩阵进行高级索引操作


示例1:选取矩阵B的0通道
代码如下:
  1. # !/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import numpy as np

  4. B = np.array([[[11, 12, 13, 14],
  5.                [15, 16, 17, 18]],
  6.               [[19, 20, 21, 22],
  7.                [23, 24, 25, 26]],
  8.               [[27, 28, 29, 30],
  9.                [31, 32, 33, 34]]])

  10. C = B[0]   # 选取矩阵B的0通道
复制代码

运行结果如下:




示例2:选取矩阵B的1通道
  1. # !/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import numpy as np

  4. B = np.array([[[11, 12, 13, 14],
  5.                [15, 16, 17, 18]],
  6.               [[19, 20, 21, 22],
  7.                [23, 24, 25, 26]],
  8.               [[27, 28, 29, 30],
  9.                [31, 32, 33, 34]]])

  10. C = B[1]   # 选取矩阵B的1通道
复制代码

运行结果如下:


示例3:使用ndarray对象的切片操作同时选取矩阵的0通道和1通道

关于ndarray对象切片操作的详细介绍,可参见博文 https://www.hhai.cc/thread-117-1-1.html
  1. # !/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import numpy as np

  4. B = np.array([[[11, 12, 13, 14],
  5.                [15, 16, 17, 18]],
  6.               [[19, 20, 21, 22],
  7.                [23, 24, 25, 26]],
  8.               [[27, 28, 29, 30],
  9.                [31, 32, 33, 34]]])

  10. C = B[1]   # 选取矩阵B的1通道
复制代码

注意:切片操作的区间是左开右闭的,所以是D = B[0:2]而不是D = B[0:1]
运行结果如下:

                                          

                                          


示例4:选取矩阵B的第1通道的第1行
有两种方法可以实现这个操作。

方法一:用“[ ]”区分不同的维度

不推荐此种方法,原因见博文 https://www.hhai.cc/thread-118-1-1.html

代码如下:
  1. import numpy as np

  2. B = np.array([[[11, 12, 13, 14],
  3.                [15, 16, 17, 18]],
  4.               [[19, 20, 21, 22],
  5.                [23, 24, 25, 26]],
  6.               [[27, 28, 29, 30],
  7.                [31, 32, 33, 34]]])

  8. E = B[1][1]  # 选取矩阵B的第1通道的第1行的第一种方法
复制代码

运行结果如下:

                                          


方法二:用逗号分隔不同的维度

推荐此种方法,原因见博文 https://www.hhai.cc/thread-118-1-1.html

代码如下:
  1. import numpy as np

  2. B = np.array([[[11, 12, 13, 14],
  3.                [15, 16, 17, 18]],
  4.               [[19, 20, 21, 22],
  5.                [23, 24, 25, 26]],
  6.               [[27, 28, 29, 30],
  7.                [31, 32, 33, 34]]])

  8. F = B[1, 1]  # 选取矩阵B的第1通道的第1行的第二种方法
复制代码

运行结果如下:

                                          



示例5:选取矩阵B的第1通道第1行的第1列
代码如下:
  1. import numpy as np

  2. B = np.array([[[11, 12, 13, 14],
  3.                [15, 16, 17, 18]],
  4.               [[19, 20, 21, 22],
  5.                [23, 24, 25, 26]],
  6.               [[27, 28, 29, 30],
  7.                [31, 32, 33, 34]]])

  8. H = B[1, 1, 1]  # 选选取矩阵B的第1通道第1行的第1列的第二种方法
复制代码

运行结果如下:


示例6:选取矩阵B的第1通道第1行的第1列到第3列
代码如下:
  1. import numpy as np

  2. B = np.array([[[11, 12, 13, 14],
  3.                [15, 16, 17, 18]],
  4.               [[19, 20, 21, 22],
  5.                [23, 24, 25, 26]],
  6.               [[27, 28, 29, 30],
  7.                [31, 32, 33, 34]]])

  8. K = B[1, 1, 1:4]  # 选取矩阵B的第1通道第1行的第1列到第3列的第二种方法
复制代码

运行结果如下:


方法二:
由于第三列就是最后一列,所以可下像下面这样写:
  1. import numpy as np

  2. B = np.array([[[11, 12, 13, 14],
  3.                [15, 16, 17, 18]],
  4.               [[19, 20, 21, 22],
  5.                [23, 24, 25, 26]],
  6.               [[27, 28, 29, 30],
  7.                [31, 32, 33, 34]]])

  8. L = B[1, 1, 1:]  # 选取矩阵B的第1通道第1行的第1列到第3列的第一种方法
复制代码

运行结果如下:


示例7:选取矩阵B的第1通道第0行和第1行的第1列到第3列
这个有多种写法实现,这里给一种最好用的就行了,我们不做把茴香豆的茴字的四种写法都搞清楚的人
方法一:
  1. import numpy as np

  2. B = np.array([[[11, 12, 13, 14],
  3.                [15, 16, 17, 18]],
  4.               [[19, 20, 21, 22],
  5.                [23, 24, 25, 26]],
  6.               [[27, 28, 29, 30],
  7.                [31, 32, 33, 34]]])

  8. M = B[1, 0:2, 1:]  # 选取矩阵B的第1通道第0行和第1行的第1列到第3列
复制代码

运行结果略。

示例8:利用元组或列表选取非连续的通道、行或列的方法
利用元组或列表选取非连续的通道、行或列的方法我已写在另一篇博文中,链接如下:
https://www.hhai.cc/thread-119-1-1.html

示例9:通过数组矩阵进行高级索引操作
由于这部分内容较多,所以写在了另一篇博文中,链接 https://www.hhai.cc/thread-121-1-1.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|昊虹AI笔记网 ( 蜀ICP备2022024117号-1 )

GMT+8, 2024-4-27 04:57 , Processed in 0.027279 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表