Python Numpy使用技巧:如何仅转置数组最后若干维度,无需指定前置维度
Numpy 转置数组最后两个维度的简洁实现方案
最优方案:使用swapaxes方法
直接使用Numpy内置的swapaxes方法即可实现需求,该方法专门用于交换数组的两个指定轴,传入负索引就能匹配最后两个维度,完全不需要指定前置维度:
# 交换最后两个维度,返回视图无数据拷贝,效率和手动修改strides完全一致 a = a.swapaxes(-2, -1)
这个写法和你原有的transpose硬编码写法、手动修改strides+shape的效果100%一致,属于Numpy官方公开API,可读性和兼容性都远高于手动修改数组元数据的写法。
备选方案:transpose配合动态轴序列
如果你习惯用transpose实现逻辑,也可以通过动态构造轴序列省略前置维度的硬编码:
a = a.transpose(tuple(range(a.ndim - 2)) + (-1, -2))
效果验证示例
import numpy as np a = np.random.randn(2, 3, 4, 5) print(a.shape) # 输出 (2, 3, 4, 5) a_swap = a.swapaxes(-2, -1) print(a_swap.shape) # 输出 (2, 3, 5, 4) # 验证为无拷贝视图 print(np.shares_memory(a, a_swap)) # 输出 True
内容的提问来源于stack exchange,提问作者Sam-gege
相关产品推荐
相关产品推荐

