numpy中对于axis的理解

本文深入解析NumPy中的轴概念,对比数学物理维度,阐述如何通过axis参数实现数组的行、列求和、排序和argsort等操作,适用于高级numpy数组处理。

写在前面

我们知道axis这个东西经常出现在numpy的sum、argsort等一系列有关于数组的操作中,numpy中的轴axis是很重要的,许多numpy的操作根据axis的取值不同,作出的操作也不相同。可以说,axis让numpy的多维数组变的更加灵活,但也让numpy变得越发难以理解。因此,弄清楚axis的作用显得尤为重要。作为一个很基本同时很重要的概念,博主觉得很有必要详细深入了解一下这一名词。
下面把博主的一些发现分享给大家。

简单了解axis


axis 中文翻译指“轴”、“枢轴”。我们可以看一下英文官网的解释:

关于axis

NumPy 的主要对象是同构多维数组。 它是一个元素表(通常是数字),所有类型都相同,由非负整数元组索引。 在 NumPy 中,维度称为轴。

例如,3D 空间 [1, 2, 1] 中一个点的坐标有一个轴。 该轴有 3 个元素,因此我们说它的长度为 3。在下图中的示例中,该数组有 2 个轴。 第一个轴的长度为 2,第二个轴的长度为 3。

[[1., 0., 0.],
 [0., 1., 2.]]

实际上这个维度称为轴并不是很好理解,必须说明这里的轴维度和我们数学物理上面的是有很大区别的

与数学物理方面的区别


我们现随机建立一个3×3的数组。

>>> import numpy as np
>>> np.random.rand(3, 3)
array([[0.14828241, 0.67698515, 0.22729984],
       [0.78760285, 0.71820171, 0.43459394],
       [0.85447318, 0.72708047, 0.56316259]])

该矩阵由于形状是3×3的,所以我们在线性代数里面认为这个矩阵维度是三(秩为三),但是在numpy的数组中,这个array的维数只有2,分别有axis=0,axis=1这两个轴,而axis=0的轴长度为3,axis=1的轴长度也为3.所以这里我们格外注意一下。

进一步理解


我们进行一下有关axis的操作,例如求和:

>>> c = np.arange(9).reshape(3,3)
>>> c
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> c.sum(axis=0)
array([ 9, 12, 15])
>>> c.sum(axis=1)
array([ 3, 12, 
### NumpyAxis参数的作用及示例解释 #### Axis参数的核心概念 在Numpy中,`axis` 表示的是数组的轴(维度)。对于一个多维数组来说,每一维都可以看作是一个方向或者一条线。当执行某些操作(如求和、最大值等)时,可以通过 `axis` 参数指定沿着哪个方向进行计算。如果不理解 `axis` 的含义,则很难高效地利用Numpy处理复杂的数据结构。 例如,给定一个三维数组 `arrs = np.arange(24).reshape((3, 2, 4))`,其形状为 `(3, 2, 4)`,即该数组有三个维度:第一个维度大小为3,第二个维度大小为2,第三个维度大小为4[^1]。 --- #### 示例解析 以下是几个具体的例子来说明 `axis` 的作用: ##### 示例1:求和操作 (`np.sum`) 考虑如下代码: ```python import numpy as np arrs = np.arange(24).reshape((3, 2, 4)) print("原始数组:") print(arrs) # 沿着不同的轴求和 print("\n沿着 axis=0 求和 (按第0维压缩):") print(np.sum(arrs, axis=0)) print("\n沿着 axis=1 求和 (按第1维压缩):") print(np.sum(arrs, axis=1)) print("\n沿着 axis=2 求和 (按第2维压缩):") print(np.sum(arrs, axis=2)) ``` - **`axis=0`**: 对应于最外层维度的操作。这意味着将相同位置上的元素相加,最终结果会减少第一维的长度。 - **`axis=1`**: 针对中间维度的操作。这相当于固定其他维度不变的情况下,对该维度内的元素逐项求和。 - **`axis=2`**: 处理最内层维度。这是指在同一平面内,针对每行或列依次累加。 运行以上代码可以直观看到不同 `axis` 值带来的变化[^1]。 --- ##### 示例2:寻找最大值 (`np.max`) 再来看另一个常用场景——查找某特定轴的最大值: ```python a = np.array([[78, 34, 87, 25, 83], [25, 67, 97, 22, 13], [78, 43, 87, 45, 89]]) print("原二维数组:") print(a) print("\n沿 axis=0 查找最大值:") print(a.max(axis=0)) print("\n沿 axis=1 查找最大值:") print(a.max(axis=1)) ``` 在这里, - 当设置 `axis=0` 时,比较各列对应位置处数值并返回最高者; - 若设定为 `axis=1` 则是在各行内部选取峰值[^4]。 --- #### 更复杂的案例:拼接数组 (`np.concatenate`) 除了基本运算之外,像连接两个或多组数据这样的任务也需要依赖 `axis` 来定义组合的方向。比如下面这段程序展示了如何通过调整此选项改变输出形式: ```python X = np.arange(620 * 128 * 88).reshape(620, 1, 128, 88) y = np.arange(620) bottoms = [] bottoms.append(X) bottoms.append(y[:, None]) result_X, result_y = np.concatenate(bottoms[:-1], axis=1), bottoms[-1] print(result_X.shape) # 输出新的形状 ``` 在这个片段里,我们把多个张量按照第二维度堆叠起来形成一个新的特征集合[^5]。 --- ### 总结 综上所述,掌握 `axis` 是精通 NumPy 关键一步。无论是简单的统计还是高级变换都需要清晰认识各个维度间关系以及它们相互影响的方式。只有这样才能充分发挥这个强大工具的优势完成各种数据分析工作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值