一个例子让你搞懂numpy中的axis

Numpy操作中axis的理解

axis就是数组不同维度的表示,对于不同的axis进行运算,实际上就是沿着

为什么会有axis这个概念?

因为在numpy模块中,大多数处理的是矩阵或者多维数组。为了帮助实现对数组和矩阵的各种功能,就有了axis。表示数组和矩阵的各个维度。注意矩阵总是二维的。

实例讲解——在axis上的操作

下面首先使用Numpy生成一个三维数组:

# 生成矩阵
>>> import numpy as np
>>> np.arange(16).reshape(2,4,2)
>>> print(a)
[[[ 0  1]
  [ 2  3]
  [ 4  5]
  [ 6  7]]

 [[ 8  9]
  [10 11]
  [12 13]
  [14 15]]]

使用np.shape()函数就可以获取数组各维度的尺寸,已知a是一个三维数组,如下所示2,4,2就可以视为数组a在0,1,2三个维度上的大小。

>>> print(np.shape(a))
(2, 4, 2)

下面我们看下直接使用sum对数组各维度求和的结果:

>>> a.sum(axis=0)
array([[ 8, 10],
       [12, 14],
       [16, 18],
       [20, 22]])
>>> a.sum(axis=1)
array([[12, 16],
       [44, 48]])
>>> a.sum(axis=2)
array([[ 1,  5,  9, 13],
       [17, 21, 25, 29]])

可以看出,在维度0上求和得到一个4*2的数组,在维度1上求和得到2*2的数组,在维度2上求和得到一个2*4的数组。可以发现,numpy对数组在不同的axis上进行运算,实际上是沿着该axis发生变化的方向进行操作的。

比如在axis = 0时,沿着维度0变化的方向进行运算,可以视为对维度(1, 2)进行切片,然后求和,求解过程如下所示:

>>> a[0,:,:]
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7]])
>>> a[1,:,:]
array([[ 8,  9],
       [10, 11],
       [12, 13],
       [14, 15]])
>>> a[0,:,:]+a[1,:,:]
array([[ 8, 10],
       [12, 14],
       [16, 18],
       [20, 22]])

在axis=1时,验证维度1变化的方向进行运算,可以视为对维度(0,2)进行切片,然后求和,求解过程如下所示:

>>> sum = np.zeros((2,2), dtype=np.int)
>>> print(sum)
[[0 0]
 [0 0]]
>>> for i in range(4):
...     print('第%d个切片如下所示' % (i))
...     print(a[:, i, :])
...     sum = sum + a[:, i, :]
...0个切片如下所示
[[0 1]
 [8 9]]1个切片如下所示
[[ 2  3]
 [10 11]]2个切片如下所示
[[ 4  5]
 [12 13]]3个切片如下所示
[[ 6  7]
 [14 15]]
>>> print(sum)
[[12 16]
 [44 48]]
>>> a.sum(axis=1)
array([[12, 16],
       [44, 48]])

同上面两个例子,大家也可以同样尝试下在第2个维度上的求和,以及其他求和、求均值以及求最大最小值。

### NumPy 中 `axis` 参数的作用 #### 1. 基本定义 在 NumPy 数组中,`axis` 参数用于指定操作的方向或维度。具体来说,`axis=i` 表示沿着数组的第 i 个下标变化方向进行操作[^1]。 #### 2. 维度与轴的关系 NumPy数组可以是一维、二维或多维结构。对于不同维度的数组,`axis` 参数的意义如下: - **一维数组**: 对于形状为 `(n,)` 的一维数组,只有单个轴(`axis=0`),表示沿整个数组长度方向的操作。 ```python import numpy as np one_dim = np.array([1, 2, 3]) sum_one_dim = np.sum(one_dim, axis=0) # 结果为 6 ``` - **二维数组**: 形状为 `(m, n)` 的二维数组有两个轴: - `axis=0`: 沿着列方向操作,即对每一列应用函数。 - `axis=1`: 沿着行方向操作,即对每一行应用函数。 ```python two_dim = np.array([[1, 2], [3, 4]]) col_sum = np.sum(two_dim, axis=0) # 结果为 array([4, 6]) row_sum = np.sum(two_dim, axis=1) # 结果为 array([3, 7]) ``` - **多维数组**: 高维数组有多个轴,例如三维数组 `(a, b, c)` 可以通过设置不同的 `axis` 来控制操作的具体方向。 ```python three_dim = np.random.rand(2, 3, 4) dim_0_sum = np.sum(three_dim, axis=0).shape # (3, 4),按第一个维度求和 dim_1_sum = np.sum(three_dim, axis=1).shape # (2, 4),按第二个维度求和 dim_2_sum = np.sum(three_dim, axis=2).shape # (2, 3),按第三个维度求和 ``` #### 3. 函数行为差异 某些 NumPy 函数在使用 `axis` 参数时表现出特定的行为模式。例如,在统计类函数(如 `np.min`, `np.max`, `np.median` 等)中,`axis` 定义了数据缩减的方向;而在增删改查类函数(如 `np.append`)中,则可能扩展或修改该方向上的数据[^3]。 #### 4. 实际案例解析 考虑以下例子来进一步理解 `axis` 参数的实际作用: ```python import numpy as np arr = np.arange(8).reshape((2, 2, 2)) print("原始数组:") print(arr) # 按照 axis=0 进行求和 sum_axis_0 = np.sum(arr, axis=0) print("\n按照 axis=0 求和后的结果:") print(sum_axis_0) # 按照 axis=1 进行求和 sum_axis_1 = np.sum(arr, axis=1) print("\n按照 axis=1 求和后的结果:") print(sum_axis_1) # 按照 axis=2 进行求和 sum_axis_2 = np.sum(arr, axis=2) print("\n按照 axis=2 求和后的结果:") print(sum_axis_2) ``` 上述代码展示了如何针对不同轴执行累加运算,并观察其返回的结果形状变化。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值