Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.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
Python 对于这个例子,numpy.transpose是如何工作的?_Python_Numpy_Transpose - Fatal编程技术网

Python 对于这个例子,numpy.transpose是如何工作的?

Python 对于这个例子,numpy.transpose是如何工作的?,python,numpy,transpose,Python,Numpy,Transpose,我很难理解numpy.transpose实际上是如何工作的。 比如说 a_value = array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]]) 当我这么做的时候 np.transpose(a_value, (2, 1, 0)) 我明白了 如何手动导出此转置?在上面的例子中,我需要直观地理解公式或步骤,这样我就可以把它推广到更高的维度 如 numpy.转

我很难理解numpy.transpose实际上是如何工作的。 比如说

a_value = array([[[0, 1],
                  [2, 3]],

                 [[4, 5],
                  [6, 7]]])
当我这么做的时候

np.transpose(a_value, (2, 1, 0))
我明白了

如何手动导出此转置?在上面的例子中,我需要直观地理解公式或步骤,这样我就可以把它推广到更高的维度

numpy.转置(a,轴=无)

轴:整数列表,可选 默认情况下,反转尺寸标注,否则根据给定的值排列轴

第二个参数是用来排列值的轴。也就是说,例如,如果初始元素的索引是
(x,y,z)
(其中
x
是第0轴,
y
是第1轴,
z
是第2轴),则该元素在结果数组中的位置变为(z,y,x)(即第2轴先,然后是第1轴,最后是第0轴),基于您为
轴提供的参数

由于您正在转置一个形状数组
(2,2,2)
,因此转置后的形状也是
(2,2,2)
,并且位置会随着-

(0,0,0) -> (0,0,0)
(1,0,0) -> (0,0,1)
(0,1,0) -> (0,1,0)
(1,1,0) -> (0,1,1)
...

由于您选择的轴很小,让我们为其他轴解释一下。范例-

In [54]: A = np.arange(30).reshape((2, 3, 5))
In [55]: A
Out[55]:
array([[[ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14]],

       [[15, 16, 17, 18, 19],
        [20, 21, 22, 23, 24],
        [25, 26, 27, 28, 29]]])

In [56]: np.transpose(A,(1,2,0))
Out[56]:
array([[[ 0, 15],
        [ 1, 16],
        [ 2, 17],
        [ 3, 18],
        [ 4, 19]],

       [[ 5, 20],
        [ 6, 21],
        [ 7, 22],
        [ 8, 23],
        [ 9, 24]],

       [[10, 25],
        [11, 26],
        [12, 27],
        [13, 28],
        [14, 29]]])
这里,第一个元素
(0,0,0)
成为结果中的
(0,0,0)
元素

第二个元素
(0,0,1)
成为结果中的
(0,1,0)
元素。等等-

(0,0,0) -> (0,0,0)
(0,0,1) -> (0,1,0)
(0,0,2) -> (0,2,0)
...
(2,3,4) -> (3,4,2)
...

这里有更多的澄清:

不要混淆
np.重塑(z,y,x)
np.转置(0,1,2)
的参数

np.reformate()
使用我们矩阵的维度,想想
(表、行、列)
,来指定它的布局

np.transpose()
使用整数0、1和2表示要交换的轴,并分别对应于z、y和x

例如,如果我们在一个由2张表、3行和5列组成的矩阵中有数据

我们可以采取下一步,从列表的角度来思考。因此,2x3x5矩阵的
z,y,x
表、行、列
表示是

 [[[ 0,  1,  2,  3,  4],
    [ 5,  6,  7,  8,  9],
    [10, 11, 12, 13, 14]],

   [[15, 16, 17, 18, 19],
    [20, 21, 22, 23, 24],
    [25, 26, 27, 28, 29]]]
…但是我们将这些数据输入到的模块需要这样的布局:工作表1包含每个工作表的第一行,工作表2包含第二行,依此类推。然后,我们需要使用np.transpose(1,0,2)来转置数据。这将交换z轴和y轴,并转置数据

 [[[ 0,  1,  2,  3,  4],
   [15, 16, 17, 18, 19]],

  [[ 5,  6,  7,  8,  9],
   [20, 21, 22, 23, 24]],

  [[10, 11, 12, 13, 14],
   [25, 26, 27, 28, 29]]]
请注意与使用np.reforme(3,2,5)的区别,因为这不会转置数据——只会重新排列数据

[[[ 0,  1,  2,  3,  4],
 [ 5,  6,  7,  8,  9]],

 [[10, 11, 12, 13, 14],
  [15, 16, 17, 18, 19]],

 [[20, 21, 22, 23, 24],
  [25, 26, 27, 28, 29]]]

axes=参数是希望在结果中排列起始轴的方式

在我的例子中,我有一个形状数组(2,1997,4,4),我只想转置(4,4)子数组

axes=()在这里需要4个参数,每个轴一个。轴=(0,1,2,3)不会产生任何更改,因为请求的结果排序与开始排序相同


若要按我的需要仅转置(4,4)数组,我使用axes=(0,1,3,2)--请只交换最后两个轴。

您是否阅读了文档,即
帮助(numpy.transpose)
?您只需“排列”维度。如果您传递置换
(2,1,0)
,那么位于位置
[x,y,z]
的元素现在将位于位置
[z,y,x]
,或者位于位置
[z,x,y]
进行置换
(3,0,1)
,感谢您的简单解释。
[[[ 0,  1,  2,  3,  4],
 [ 5,  6,  7,  8,  9]],

 [[10, 11, 12, 13, 14],
  [15, 16, 17, 18, 19]],

 [[20, 21, 22, 23, 24],
  [25, 26, 27, 28, 29]]]