Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
被numpy和#x27所困扰;s转置_Numpy_Linear Algebra - Fatal编程技术网

被numpy和#x27所困扰;s转置

被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))反转张量的转置

让我们看一个非常简单的例子:一个形状为(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))反转张量的转置 使用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