您现在的位置是:首页 > 正文

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

2024-02-01 06:35:43阅读 2

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

# !/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np

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

运行结果如下:
在这里插入图片描述
从其shape属性可以看出,B矩阵的尺寸为我们希望的三通道,两行,四列。
其具体的数据值如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

示例1:选取矩阵B的0通道

# !/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np

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

C = B[0]   # 选取矩阵B的0通道

运行结果如下:
在这里插入图片描述
在这里插入图片描述

示例2:选取矩阵B的1通道

# !/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np

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

C = B[1]   # 选取矩阵B的1通道

运行结果如下:
在这里插入图片描述

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

关于ndarray对象切片操作的详细介绍,可参见博文 https://www.hhai.cc/thread-117-1-1.html

# !/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np

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

D = B[0:2]  # 同时选取矩阵的第0通道和第1通道

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

示例4:选取矩阵B的第1通道的第1行

有两种方法可以实现这个操作。

方法一:用“[ ]”区分不同的维度
不推荐此种方法,原因见博文 https://www.hhai.cc/thread-118-1-1.html

import numpy as np

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

E = B[1][1]  # 选取矩阵B的第1通道的第1行的第一种方法

运行结果如下:
在这里插入图片描述
在这里插入图片描述
方法二:用逗号分隔不同的维度
推荐此种方法,原因见博文 https://www.hhai.cc/thread-118-1-1.html

import numpy as np

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

F = B[1, 1]  # 选取矩阵B的第1通道的第1行的第二种方法

在这里插入图片描述
在这里插入图片描述

示例5:选取矩阵B的第1通道第1行的第1列

代码如下:

import numpy as np

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

H = B[1, 1, 1]  # 选选取矩阵B的第1通道第1行的第1列的第二种方法

在这里插入图片描述

示例6:选取矩阵B的第1通道第1行的第1列到第3列

方法一:

import numpy as np

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

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

在这里插入图片描述
方法二:
由于第三列就是最后一列,所以可下像下面这样写:

import numpy as np

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

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

在这里插入图片描述

示例7:选取矩阵B的第1通道第0行和第1行的第1列到第3列

这个有多种写法实现,这里给一种最好用的就行了,我们没必要刻意去把茴香豆的茴字的四种写法都搞清楚。
代码如下:

import numpy as np

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

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

在这里插入图片描述
在这里插入图片描述

示例8:利用元组或列表选取非连续的通道、行或列的方法

利用元组或列表选取非连续的通道、行或列的方法我已写在另一篇博文中,链接如下:
Python中使用元组或列表对ndarray的某个维度进行非连续选取和调序

示例9:通过数组矩阵进行高级索引操作

由于这部分内容较多,所以写在了另一篇博文中,链接 https://www.hhai.cc/thread-121-1-1.html

网站文章

  • GPT带我学-设计模式-模板模式

    GPT带我学-设计模式-模板模式

    GPT教我学习模板模式

    2024-02-01 06:00:20
  • 2019研究生学费估计参考

    2019研究生学费估计参考

    2019研究生学费估计 研究生考试的时间点: 预报名时间 为2018年9月24日至9月27日,每天9:00—22:00 网上报名时间 为2018年10月10日至10月31日,每天9:00-22:00 登录“中国研究生招生信息网”(http://yz.chsi.com.cn或http

    2024-02-01 06:00:12
  • jqgrid单元格合并

    jqgrid单元格合并

    jqgrid是动态加载数据的,所以我们得动态的给每个需要合并的单元格设定id

    2024-02-01 06:00:05
  • 数据库进阶——什么是事务

    数据库进阶——什么是事务

    事务 事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元。 事务的语法 事务的特性 事务并发问题 事务隔离级别 不同隔离级别的锁的情况 隐式提交 1、...

    2024-02-01 05:59:35
  • 共生·敏捷·进化,第二届全球DSO大会强势来袭!

    共生·敏捷·进化。12月1日,DSO 2022将于北京正式开幕。

    2024-02-01 05:59:28
  • 简单C语言的词法分析器(Java实现)

    简单C语言的词法分析器(Java实现)

    一、C语言子集的单词符号及内置码单词符号种别编号助记符内置码while1whilenullif2ifnullelse3elsenullswitch4switchnullcase5casenull标识符6idid的实际内容常数7numnmu的实际内容+8+null-9-nu...

    2024-02-01 05:59:18
  • springboot整合Elasticsearch简单操作

    springboot整合Elasticsearch简单操作

    以下步骤均参考Elasticsearch操作文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java...

    2024-02-01 05:58:47
  • 怎样修改iis 服务器日期,怎么在IIS里设置服务器端缓存时间?

    设置IIS缓存的方法1.测试,可以缓存整个Share工程(经测试IIS中的缓存测试对ASPX页面不起作用,估计与页面压缩的设置原理一样);2.需要设置缓存的工程: Share,Portal(根据IIS...

    2024-02-01 05:58:40
  • 盘点6个实用的Python 技巧

    盘点6个实用的Python 技巧

    每种产品具体的特征都不一样,如果用静态属性的将字典转成对象的话,代码会非常乱而且无法管理,但如果用动态属性的话,下面三行代码就能搞定(用 setattr())。当登录时,你需要输入你的用户名和密码,用...

    2024-02-01 05:58:07
  • SUCTF-2019-EasySQL

    SUCTF-2019-EasySQL

    看一下源代码 Give me your flag, I will tell you if the flag is right.

    2024-02-01 05:58:00