Python中使用元组或列表对ndarray矩阵的某个维度进行选取和调序的操作

大家应该都知道,numpy库中的ndarray可以用所谓的三帽号规则进行切片操作(详情可见我之前写的博文,链接 https://blog.csdn.net/wenhao_ir/article/details/123034635 ),但是当对某个维度作离散选择时怎么操作呢?比如在二维数组中,我想在行维度上只选择第3行和第4行怎么办?这个时候可以用Python中的元组进行选择操作。所谓Python中的元组简单理解就是以小括号括起来的序列…什么?什么叫元组?好吧,我懒得打字,直接上截图吧!

关于列表的相关概念见下面的截图:
Python中使用元组或列表对ndarray矩阵的某个维度进行选取和调序的操作_第1张图片
关于元组的介绍见下面的截图:
在这里插入图片描述
说那么多不如举两个例子…
比如在二维数组A中,我只想取A的第3行和第4行赋给B,该怎么操作呢?代码如下:

import numpy as np

A = np.array([[1, 2, 3, 4, 5],
              [6, 7, 8, 9, 10],
              [11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25]], dtype='int')

B = A[(2, 4), :]

设断点,A和B里的数据情况如下:
Python中使用元组或列表对ndarray矩阵的某个维度进行选取和调序的操作_第2张图片
可见,实现了把A的第2行和第4行选取了出来赋给了B。

有时候,我们还想把A在行的维度上进行调换,比如我把第0行第4行进行调换,怎么操作呢?可以像下面这样操作。

import numpy as np

A = np.array([[1, 2, 3, 4, 5],
              [6, 7, 8, 9, 10],
              [11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25]], dtype='int')

C = A[(4, 1, 2, 3, 0), :]

运行结果如下,可见实现了调换:
Python中使用元组或列表对ndarray矩阵的某个维度进行选取和调序的操作_第3张图片
同样可在二维矩阵的列维度上进行选取和调序操作,比如只选取第1列和第3列就可以写下面的代码:

A = np.array([[1, 2, 3, 4, 5],
              [6, 7, 8, 9, 10],
              [11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25]], dtype='int')

B = A[:, (1, 3)]

同样,想把第0列和第4列进行调换就可以写下面的代码:

A = np.array([[1, 2, 3, 4, 5],
              [6, 7, 8, 9, 10],
              [11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25]], dtype='int')

C = A[:, (4, 1, 2, 3, 0)]

当维度大于2时,也可做同样的操作。做图像处理的同学都知道,彩色图像有三个通道,比如BGR图像,就有B通道、G通道和R通道,有时候我需要对这些通道做一个调换,怎么办呢?比如我要把BGR图像转化成RGB图像,下面这条语句就可以搞定了:

img2 = img[:, :, (2, 1, 0)]

为什么上面这句话能搞定,你可能还需要阅读下面这篇文章:
OpenCV-Python中的函数cv.imread()读取到的图像的数据存储结构是怎样的?

2022-07-15 13:38:49增补以下内容:
通过对Numpy库的系统学习,发现除了用元组选取非连续的行、列、元素,还可以用两个以列表形式存在的行向量或列向量,详情见 https://blog.csdn.net/wenhao_ir/article/details/125714322(搜索关键词“和下面这种索引方法对比一下,会更容易记忆、理解和区分”)

你可能感兴趣的:(python基础,面向对象编程,pycharm,python)