被numpy和#x27所困扰;s转置
让我们看一个非常简单的例子:一个形状为(2,3,4)的数组,忽略值被numpy和#x27所困扰;s转置,numpy,linear-algebra,Numpy,Linear Algebra,让我们看一个非常简单的例子:一个形状为(2,3,4)的数组,忽略值 >>> a.shape (2, 3, 4) 当我们将其转置并打印尺寸时: >>> a.transpose([1,2,0]).shape (3, 4, 2) 我的意思是:取轴索引2作为第一个,然后取轴索引0作为第二个,最后取轴索引1作为第三个。我应该得到(4,2,3),对吗 嗯,我想也许我不完全理解逻辑。因此,我阅读了文档,其中写道: 使用转置(a,argsort(axes))反转张量的转置
>>> a.shape
(2, 3, 4)
当我们将其转置并打印尺寸时:
>>> a.transpose([1,2,0]).shape
(3, 4, 2)
我的意思是:取轴索引2作为第一个,然后取轴索引0作为第二个,最后取轴索引1作为第三个。我应该得到(4,2,3),对吗
嗯,我想也许我不完全理解逻辑。因此,我阅读了文档,其中写道:
使用转置(a,argsort(axes))反转张量的转置
使用axes关键字参数时
所以我试过了
>>> c = np.transpose(a, [1,2,0])
>>> c.shape
(3, 4, 2)
>>> np.transpose(a, np.argsort([1,2,0])).shape
(4, 2, 3)
还有一个完全不同的形状
有人能解释一下吗?谢谢。np.argsort([1,2,0])返回类似于[2,0,1]的数组
所以
装作
np.transpose(a, [2,0,1]).shape
不是
argsort([1,2,0])返回类似于[2,0,1]的数组
所以
装作
np.transpose(a, [2,0,1]).shape
不是
这样做的目的是将a.shape[1]维度放在第一位a.shape[2]
排名第二,而a.shape[0]
排名第三:
In [262]: np.array(a.shape)[idx]
Out[262]: array([3, 4, 2])
转置
无参数是轴顺序的完全反转。它是熟悉的2d转置(行变成列,列变成行)的扩展:
“不做任何事”转置:
In [265]: a.transpose(0,1,2).shape
Out[265]: (2, 3, 4)
您有一个初始轴顺序和最终轴顺序;如果您不经常使用大小为3或更大的列表,描述交换可能很难可视化
有些人发现使用swapaxes
更容易,这只改变了轴的顺序<代码>滚动轴是另一种方式
我更喜欢使用转置
,因为它可以做其他人能做的任何事情;所以我只需要开发一个直观的工具
argsort
注释的操作方式如下:
In [278]: a.transpose(idx).transpose(np.argsort(idx)).shape
Out[278]: (2, 3, 4)
也就是说,将其应用于一次转置的结果,以恢复原始顺序
这样做的目的是将a.shape[1]维度放在第一位a.shape[2]
排名第二,而a.shape[0]
排名第三:
In [262]: np.array(a.shape)[idx]
Out[262]: array([3, 4, 2])
转置
无参数是轴顺序的完全反转。它是熟悉的2d转置(行变成列,列变成行)的扩展:
“不做任何事”转置:
In [265]: a.transpose(0,1,2).shape
Out[265]: (2, 3, 4)
您有一个初始轴顺序和最终轴顺序;如果您不经常使用大小为3或更大的列表,描述交换可能很难可视化
有些人发现使用swapaxes
更容易,这只改变了轴的顺序<代码>滚动轴是另一种方式
我更喜欢使用转置
,因为它可以做其他人能做的任何事情;所以我只需要开发一个直观的工具
argsort
注释的操作方式如下:
In [278]: a.transpose(idx).transpose(np.argsort(idx)).shape
Out[278]: (2, 3, 4)
也就是说,将其应用于一次转置的结果,以恢复原始顺序。也
moveaxis
非常感谢您的澄清所以moveaxis
非常感谢您的澄清Tank非常感谢感谢感谢James