对Numpy库ndarray对象

对Numpy库ndarray对象,第1张

为了说明这个问题,选初始化一个矩阵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通道
  • 示例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:选取非连续的通道、行或列的方法
  • 总结

示例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对象切片 *** 作的参数意义

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/792429.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存