「Python数据科学」NumPy切片与newaxis的结合,实现更灵活的操作

南宫理的日志录 2024-12-23 13:49:40
引言

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中关于轴的概念,以及升维与切片组合实现更加复杂的切片需求的实现。

以上就是本文的全部内容了,感谢您的拨冗阅读!

0 阅读:5
南宫理的日志录

南宫理的日志录

深耕IT科技,探索技术与人文的交集