赞
踩
为了说明这个问题,初始化一个矩阵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矩阵的尺寸为我们希望的三通道,两行,四列。
其具体的数据值如下:
# !/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通道
运行结果如下:
# !/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通道
运行结果如下:
关于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]
运行结果如下:
有两种方法可以实现这个操作。
方法一:用“[ ]”区分不同的维度
不推荐此种方法,原因见博文 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行的第二种方法
代码如下:
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列的第二种方法
方法一:
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列的第一种方法
这个有多种写法实现,这里给一种最好用的就行了,我们没必要刻意去把茴香豆的茴字的四种写法都搞清楚。
代码如下:
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列
利用元组或列表选取非连续的通道、行或列的方法我已写在另一篇博文中,链接如下:
Python中使用元组或列表对ndarray的某个维度进行非连续选取和调序
由于这部分内容较多,所以写在了另一篇博文中,链接 https://www.hhai.cc/thread-121-1-1.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。