如何在Python中改变张量中间维度的顺序?
嗨,这个问题很容易解决!你需要的是反转数组的第二个维度(NumPy里维度索引从0开始,所以对应axis=1)。这里有两种简洁的实现方式:
方法1:使用切片操作(最直观)
切片是NumPy里处理维度反转最常用的方式,语法简单易懂:
import numpy as np # 假设你的原数组名为arr reversed_arr = arr[:, ::-1, :]
- 第一个
::保留所有第一维度的元素(也就是你示例里的Xa、Xb、Xc这三组) ::-1:将第二维度的元素完全反转(把每个组里的[Xa0,Xa1,Xa2]变成[Xa2,Xa1,Xa0])- 最后一个
::保留每个元素的XY坐标对,不做修改
方法2:使用np.flip()函数(语义更清晰)
如果你想要代码可读性更强,可以用NumPy专门提供的flip函数,指定要翻转的维度:
reversed_arr = np.flip(arr, axis=1)
这里axis=1明确告诉程序要沿着第二个维度翻转,和切片方法的效果完全一致。
验证示例
用你给出的字符串数组测试一下:
arr = np.array([[['Xa0', 'Ya0'], ['Xa1', 'Ya1'], ['Xa2', 'Ya2']], [['Xb0', 'Yb0'], ['Xb1', 'Yb1'], ['Xb2', 'Yb2']], [['Xc0', 'Yc0'], ['Xc1', 'Yc1'], ['Xc2', 'Yc2']]], dtype='<U3') # 用切片反转 print(arr[:, ::-1, :])
输出结果就是你想要的格式:
array([[['Xa2', 'Ya2'], ['Xa1', 'Ya1'], ['Xa0', 'Ya0']], [['Xb2', 'Yb2'], ['Xb1', 'Yb1'], ['Xb0', 'Yb0']], [['Xc2', 'Yc2'], ['Xc1', 'Yc1'], ['Xc0', 'Yc0']]], dtype='<U3')
另外要说明的是,这两种方法对浮点数元素同样适用,因为只是调整维度内的元素顺序,不会改变元素本身的类型或值。
内容的提问来源于stack exchange,提问作者An old man in the sea.
相关产品推荐
相关产品推荐

