昊虹君 发表于 2022-11-9 11:44

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

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

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

B = np.array([[,
               ],
            [,
               ],
            [,
               ]])
运行结果如下:
http://pic1.hhai.cc/pic1/2022/2022-11/002/011.png

从其shape属性可以看出,B矩阵的尺寸为我们希望的三通道,两行,四列。
其具体的数据值如下:
http://pic1.hhai.cc/pic1/2022/2022-11/002/012.png
                                          
http://pic1.hhai.cc/pic1/2022/2022-11/002/013.png
                                          
http://pic1.hhai.cc/pic1/2022/2022-11/002/014.png


接下来就对矩阵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通道
代码如下:
# !/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np

B = np.array([[,
               ],
            [,
               ],
            [,
               ]])

C = B   # 选取矩阵B的0通道
运行结果如下:
http://pic1.hhai.cc/pic1/2022/2022-11/002/015.png

http://pic1.hhai.cc/pic1/2022/2022-11/002/016.png

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

B = np.array([[,
               ],
            [,
               ],
            [,
               ]])

C = B   # 选取矩阵B的1通道
运行结果如下:
http://pic1.hhai.cc/pic1/2022/2022-11/002/017.png

示例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([[,
               ],
            [,
               ],
            [,
               ]])

C = B   # 选取矩阵B的1通道
注意:切片操作的区间是左开右闭的,所以是D = B而不是D = B
运行结果如下:
http://pic1.hhai.cc/pic1/2022/2022-11/002/018.png
                                          
http://pic1.hhai.cc/pic1/2022/2022-11/002/019.png
                                          
http://pic1.hhai.cc/pic1/2022/2022-11/002/020.png

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

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

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

代码如下:
import numpy as np

B = np.array([[,
               ],
            [,
               ],
            [,
               ]])

E = B# 选取矩阵B的第1通道的第1行的第一种方法
运行结果如下:
http://pic1.hhai.cc/pic1/2022/2022-11/002/062.png
                                          
http://pic1.hhai.cc/pic1/2022/2022-11/002/063.png

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

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

代码如下:
import numpy as np

B = np.array([[,
               ],
            [,
               ],
            [,
               ]])

F = B# 选取矩阵B的第1通道的第1行的第二种方法
运行结果如下:
http://pic1.hhai.cc/pic1/2022/2022-11/002/064.png
                                          
http://pic1.hhai.cc/pic1/2022/2022-11/002/065.png


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

B = np.array([[,
               ],
            [,
               ],
            [,
               ]])

H = B# 选选取矩阵B的第1通道第1行的第1列的第二种方法
运行结果如下:
http://pic1.hhai.cc/pic1/2022/2022-11/002/021.png

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

B = np.array([[,
               ],
            [,
               ],
            [,
               ]])

K = B# 选取矩阵B的第1通道第1行的第1列到第3列的第二种方法
运行结果如下:
http://pic1.hhai.cc/pic1/2022/2022-11/002/022.png

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

B = np.array([[,
               ],
            [,
               ],
            [,
               ]])

L = B# 选取矩阵B的第1通道第1行的第1列到第3列的第一种方法
运行结果如下:
http://pic1.hhai.cc/pic1/2022/2022-11/002/023.png

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

B = np.array([[,
               ],
            [,
               ],
            [,
               ]])

M = B# 选取矩阵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
页: [1]
查看完整版本: 对Numpy库ndarray对象(矩阵)中数据元素的访问、选取操作示例