Numpy中的(axis=?)助解

在阅读开源项目代码时,总是被numpy中的(axis=?)搞得懵逼,特别是维度较高的时候。近期读了几篇博客终于给笔者整明白了。

下面通过示例说明numpy中axis的使用。首先对numpy中axis取值进行说明:一维数组时axis=0,二维数组时axis=0,1,维数越高,则axis可取的值越大,数组n维时,axis=0,1,…,n。为了方便下面的理解,我们这样看待:在numpy中数组都有着[ ]标记,则axis=0对应着最外层的[ ],axis=1对应第二外层的[ ],以此类推,axis=n对应第n外层的[ ]。【0,1,2,3,...是从外开始剥,-n,-n+1,...,-3,-2,-1是从里开始剥】做完运算后要移除对应层的[ ]。

(1)axis = 0表示对最外层[ ]里的最大单位块  做块与块之间的运算,计算完之后移除最外层[ ]:

因为只有一层[ ],所以直接对这一层里的最大单位块1,2,3做运算;做完加法后本应是[6],但是移除最外层[ ]后,最终结果返回的是6。

有两层[ ],最外层[ ]里的最大单位块分别为[1,2],[3,4],对这两个单位块做块与块之间的运算,[1,2]+[3,4] = [4, 6];做完加法后本应是[[4, 6]],但是移除最外层[ ]后,原来的两层[ ]变成一层[ ],所以返回结果为 [4, 6]。

有三层[ ],最外层[]里的最大单位块分别为[[1,2],[3,4]],[[11,12],[13,14]],对这两个单位块做块与块之间的运算,[[1,2],[3,4]] + [[11,12],[13,14]] = [[12, 14], [16, 18]];做完加法后本应是[[[12, 14], [16, 18]]],但是移除最外层[]后,原来的三层[]变成两层[],所以返回结果为[[12, 14], [16, 18]]。


(2)axis= 1表示对第二外层[ ]里的最大单位块做块与块之间的运算,同时移除第二外层[ ]:

 因为只有一层[ ],找不到第二外层,所以报错。

有两层[ ],第二外层[ ]里的最大单位块有两组(因为有两个第二外层[ ]),第一组是1,2,第二组是3,4,分别对这两个单位块做块与块之间的运算,第一组结果为1+2=3,第二组结果为3+4=7;
做完加法后本应是[[3],[7]],但是移除第二外层[ ]后,原来的两层[]变成一层[ ],所以返回结果为[3, 7]。

有三层[ ],第二外层[ ]里的最大单位块有两组(因为有两个第二外层[ ]),第一组是[1,2],[3,4],第二组是[11,12], [13,14],分别对这两个单位块做块与块之间的运算,第一组结果为[1,2]+[3,4] = [ 4, 6],第二组结果为[11,12]+[13,14] = [24, 26];
做完加法后本应是[[[ 4, 6]], [[24, 26]]],但是移除第二外层[ ]后,原来的三层[ ]变成两层[ ],所以返回结果为[[ 4, 6], [24, 26]]。

(3)axis= 2表示对第三外层[ ]里的最大单位块做块与块之间的运算,同时移除第三外层[ ]:


有三层[ ],第三外层[ ]里的最大单位块有四组(因为有四个第三外层[ ]),第一组是1, 2,第二组是3,4,第三组是11,12,第四组是13,14,第一组1+2=3,第二组3+4=7,第三组11+12=23,第四组13+14=27.
做完加法后本应是[[[3],[7]], [[23], [27]]],但是移除第三外层[ ]后,原来的三层[ ]变成两层[ ],所以返回结果为[[ 3, 7], [23, 27]]。

 axis = 3,4,5类似。

 上面的?略有疑惑,不够目前还没有见过有人代码用负数,影响不大。

参考:Python之NumPy(axis=0/1/2...)的透彻理解——通过np.sum(axis=?)实例进行说明_sky_kkk的博客-优快云博客

NumPy 中,`axis` 参数用于指定操作沿着数组的哪个轴进行。理 `axis=0` 和 `axis=1` 的区别需要结合数组的维度结构。 ### `axis=0` 的作用 当设置 `axis=0` 时,操作会沿着数组的**第一个维度(行方向)**进行。这意味着 NumPy 会沿着行的方向对列执行操作。例如,在一个二维数组中,`axis=0` 会将每一列的数据作为一个整体进行处理。 以下是一个示例,展示 `axis=0` 的效果: ```python import numpy as np x = np.array([[11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25], [26, 27, 28, 29, 30], [31, 32, 33, 34, 35]]) y = np.sum(x, axis=0) print(y) # [105 110 115 120 125] ``` 在这个例子中,`np.sum(x, axis=0)` 对每一列的所有元素求和,最终输出一个一维数组,其中每个元素是对应列的总和[^2]。 ### `axis=1` 的作用 当设置 `axis=1` 时,操作会沿着数组的**第二个维度(列方向)**进行。这意味着 NumPy 会沿着列的方向对行执行操作。例如,在一个二维数组中,`axis=1` 会将每一行的数据作为一个整体进行处理。 以下是一个示例,展示 `axis=1` 的效果: ```python y = np.sum(x, axis=1) print(y) # [ 65 90 115 140 165] ``` 在这个例子中,`np.sum(x, axis=1)` 对每一行的所有元素求和,最终输出一个一维数组,其中每个元素是对应行的总和[^2]。 ### 高维数组中的 `axis` 操作 对于更高维度的数组,`axis` 参数的作用方式类似。例如,在一个四维数组中,`axis=3` 表示沿着第四个维度(最内层的轴)进行操作。 以下是一个四维数组的示例: ```python import numpy as np a = np.array([[[[1, 2], [1, 3], [1, 4]], [[1, 7], [1, 6], [1, 5]], [[1, 2], [1, 3], [1, 4]]]]) print(np.sum(a, axis=3)) # Sum along the fourth axis print(np.sum(a, axis=3).shape) # Resulting shape print(np.sum(a, axis=3, keepdims=True)) # Keep the summed axis as dimension of 1 print(np.sum(a, axis=3, keepdims=True).shape) # Resulting shape with keepdims ``` 在这个例子中,`axis=3` 表示沿着最内层的轴(即每个子数组的最后一个维度)进行求和操作。通过 `keepdims=True`,可以保留被操作轴的维度为 1[^1]。 ### 总结 - `axis=0`:沿着行方向操作,对列进行操作。 - `axis=1`:沿着列方向操作,对行进行操作。 - 在更高维数组中,`axis=i` 表示沿着第 `i` 个维度进行操作。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值