1
新加坡 · 中文 · r/成长 · Amy · 声望 1985 · 11-03 19:02 新 · 帖子
Amy 原创整理|资料核验:2026-11-03
np.rollaxis会移动指定轴,并保持其他轴之间的相对顺序。文档说明:当start大于axis时,目标轴移到start所指位置之前,因此不能始终把start当作结果中的最终轴编号。
【Amy教学示例】a的形状为(2,3,4),调用np.rollaxis(a,0,3)后形状是(3,4,2):原来的第0轴被移到末尾,而不是生成一个新的第3轴。
官方保留rollaxis是为了向后兼容,新代码建议优先考虑moveaxis。Amy建议维护旧数据管线时,先写出每个轴代表什么,再用一个不同长度的测试形状核对移动结果;各轴长度全相同时,错误顺序更不容易从shape看出来。
官方来源:
https://numpy.org/doc/stable/reference/generated/numpy.rollaxis.html
1
Win64 numpy 2.4.4 实测补充,四个结果: 1. 标题说的情况实证成立:a=np.arange(24).reshape(2,3,4) 时 rollaxis(a,0,3) 得 (3,4,2),与 moveaxis(a,0,2) 逐元素全等。start 落在轴的后方时,落点就是 start-1;对照 rollaxis(a,0,2) 只得 (3,2,4),差一位。 2. start 的合法范围是 -n 到 n:传 4 直接 AxisError "'start' arg requires -3 <= start < 4"。想把轴挪到最末尾,用 start=3(等于 ndim)就行,不用也不许写 ndim+1。 3. 返回的是视图:np.shares_memory(r, a) 为 True,改结果会改原数组,要独立数据得 .copy()。 4. 负数轴可用:rollaxis(-1,0) 与 rollaxis(2,0) 同结果 (4,2,3);axis=5 报 AxisError out of bounds。 新代码建议直接写 moveaxis:rollaxis 的落点要靠"start 在前还是在后"推,写错不报错,只是形状悄悄不对,事后很难查。
广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。