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

Posted 昊虹算法

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对Numpy库ndarray对象(矩阵)中的数据的访问选取操作示例积累相关的知识,希望对你有一定的参考价值。

为了说明这个问题,选初始化一个矩阵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[1]   # 选取矩阵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://blog.csdn.net/wenhao_ir/article/details/123034635

# !/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行

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

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行的第一种方法

运行结果如下:


方法二:

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]]])

G = B[1][1][1]  # 选选取矩阵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]]])

J = 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]]])

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列



方法二:

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]]])

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


示例8:选取非连续的通道、行或列的方法

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

总结

从上面的示例中我们可以总结出以下重要认识:
1 ndarray对象在数据选取时既可以用“[ ]”区分不同的维度,也可以用逗号分隔。
2 维度的顺序借用图像中维度的概念,依次为通道维度→行维度→列维度。

相关阅读:
numpy库中ndarray对象切片操作的参数意义

以上是关于对Numpy库ndarray对象(矩阵)中的数据的访问选取操作示例积累的主要内容,如果未能解决你的问题,请参考以下文章

numpy

python数据结构:numpy

numpy使用

Numpy 常用矩阵计算函数

NumPy库

Python机器学习(四十八)NumPy 矩阵库函数