You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

numpy中axis参数含义疑问:拆分与排序行为差异为何不同?

NumPy中axis参数的理解误区解析

问题描述

我一直搞不懂NumPy里axis参数的含义,遇到了这样的困惑:
执行代码np.split(b1,[1,3],axis=0)时,结果是按行拆分数组;执行np.split(b1,[1,3],axis=1)时,结果是按列拆分数组,因此我以为axis=0对应行操作、axis=1对应列操作。

但运行以下排序代码时,结果却和我的认知相反:

v1=np.array([[26.50940987, 22.97569521, 22.85657049,  9.0536725 ],
       [25.98586589, 29.063503  , 16.32117152, 53.37755382],
       [23.57720158, 34.10171715, 24.7272822 , 26.84495276],
       [19.56007871, 43.61342762, 45.83942094, 16.36201912]])
v1=np.sort(v1,axis=0)
print(v1)

结果显示是按列排序,而axis=1时则是按行排序。为什么会有这种差异?我哪里理解错了?

解答

别把axis直接等同于“行操作”或“列操作”,这是最容易踩的误区!正确的理解是:axis指的是你要沿着哪个维度的方向执行操作,而非直接对应行或列。

拿二维数组举例,它的shape是(行数, 列数),axis=0对应第一个维度(行数方向),axis=1对应第二个维度(列数方向),结合不同函数的操作逻辑来看:

  • 对于np.split:当指定axis=0时,是沿着行数维度切割数组——相当于把原数组按“行的分组”拆分,所以你看到的是按行拆分的结果;axis=1则是沿着列数维度切割,自然就是按列拆分。
  • 对于np.sort:当指定axis=0时,是沿着行数维度对元素排序——也就是固定每一列(每一列是行数维度上的一组元素),单独对列内元素排序,所以最终结果是每一列内部有序,看起来像是“按列排序”;axis=1则是固定每一行,对行内元素排序,也就是按行排序。

换个更直白的说法:当指定axis=n时,NumPy会固定其他所有维度,只对第n个维度上的元素集合执行操作:

  • axis=0:固定列维度,操作每一列的元素;
  • axis=1:固定行维度,操作每一行的元素。

不同函数用同一个axis出现看似矛盾的“行/列”表现,本质是函数自身的操作逻辑(拆分vs排序)结合axis的维度方向共同作用的结果,而非axis直接对应行或列。


内容的提问来源于stack exchange,提问作者Necip Arda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:07:26