NumPy中多维数组的切片,除了支持常规的切片方式外,还可以通过整数数组切片、布尔数组切片,以及多种方式的灵活组合。
但是,NumPy切片的强大功能不止于此,除了通过切片获得子数组外,还可以通过切片进行数组的升维等维度变换操作,从而满足矩阵计算等场景对矩阵形状的需求。
本文就来介绍通过切片的方式实现多维数组的维度变换。
本文的主要内容有:
1、什么是newaxis
2、利用newaxis实现数组的维度变换
3、利用Ellipsis简化切片操作
什么是newaxis前面已经介绍了关于NumPy多维数组进行切片的各种方式,基本已经满足了日常的业务需求。但是,除了切片获取子数组之外,有时候,我们还需要将数组的维度进行变换,比如数组的升维,这时候也可以通过切片来实现。
在切片操作中,我们一般在[]中填入各个维度切片的数字或者stride等,如果填入None会怎么样呢?
可以看到,a[None]的方式,实际上是对原数组进行了升维操作。
所以,我们可以通过在切片中引入None,实现对数组的维度变换。但是,在切片中组合进去None,有时候不太直观,所以,NumPy引入了一个常量:newaxis。
newaxis实际上是None的别名,通过以下代码可以验证:
之所以使用newaxis,因为在NumPy中,多维数组的每一个维度,其实都是一个数据轴(axis),添加一个维度,就相当于新增一个数据轴。
关于轴的概念,这里简单解释说明一下:
轴(axis)是NumPy中描述数组维度的概念。每个维度都有一个对应的轴,通常从0开始计数。例如,对于一个形状为(3, 4, 5)的三维数组,轴0对应第一个维度(3),轴1对应第二个维度(4),轴2对应第三个维度(5)。
而NumPy中的切片操作,都是验证特定的轴进行的。比如一个二维数组中,第一个轴对应行,第二个轴对应列。切片的操作可以分别在行和列上进行。
所谓的升维操作,会增加一个新的轴,所以使用newaxis更加直观。
利用newaxis实现数组的维度变换利用newaxis和切片进行组合,其实可以实现更加复杂的数据选择和形状的调整。
1、行向量与列向量
2、可以在任意位置新增轴
可以在任意两个轴之间添加新的轴,也可以添加多个轴,还可以将添加轴与切片进行组合操作:
利用Ellipsis简化切片操作在Python中有一个内置常量Ellipsis,表示为...(注意,是三个英文句号,而不是英文省略号,否则语法报错)。
它是一个单例对象,属于EllipsisType类型。Ellipsis主要用于占位符或者表示“等等”含义的场景。在NumPy库中,Ellipsis也可以用于数组切片,表示“所有其他轴”,从而在简化多维数组的切片操作。
首先看一下Python中的Ellipsis
NumPy中,也可以使用Ellipsis对象,通常用于其他所有轴的含义:
总结本文对NumPy中的切片操作进行了相应的扩展,同时引入newaxis常量和Ellipsis对象的概念,介绍了NumPy中关于轴的概念,以及升维与切片组合实现更加复杂的切片需求的实现。
以上就是本文的全部内容了,感谢您的拨冗阅读!