numpy.transpose 如何适用于此示例?
How does numpy.transpose work for this example?
我很难理解 numpy.transpose 的实际工作原理。
例如
a_value = array([[[0, 1],
[2, 3]],
[[4, 5],
[6, 7]]])
当我这样做时
np.transpose(a_value, (2, 1, 0))
我明白了
array([[[0, 4],
[2, 6]],
[[1, 5],
[3, 7]]])
如何手动推导出这个转置?我需要直观地理解上述案例中的公式或步骤,以便将其推广到更高的维度。
中所示
numpy.transpose(a, axes=None)
axes : list of ints, optional
By default, reverse the dimensions, otherwise permute the axes according to the values given.
第二个参数是排列值所使用的轴。例如,如果初始元素的索引是 (x,y,z)
(其中 x
是第 0 个轴,y
是第 1 个轴,z
是第 2 个轴),则位置根据您为 axes
提供的参数,结果数组中的该元素变为 (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.reshape(z, y, x)
和 np.transpose(0, 1, 2)
的参数。
np.reshape()
使用我们矩阵的维度,想想 (sheets, rows, columns)
,来指定它的布局。
np.transpose()
用整数0、1、2表示我们要交换的坐标轴,分别对应z、y、x。
例如,如果我们有 2 sheet 个 3 行 5 列的矩阵中的数据...
我们可以采取下一步,从列表的角度思考。因此,2x3x5 矩阵的 z, y, x
或 sheets, rows, columns
表示是...
[[[ 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]]]
...但是我们将此数据输入的模块需要一个布局,使得 sheet 1 包含我们每个 sheet 和 sheet 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.reshape(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个参数,每个轴一个。 axes=(0, 1, 2, 3) 没有变化,因为请求的结果排序与开始排序相同。
为了根据需要仅转置 (4,4) 数组,我使用 axes=(0, 1, 3, 2) -- 请交换最后两个轴。
我很难理解 numpy.transpose 的实际工作原理。 例如
a_value = array([[[0, 1],
[2, 3]],
[[4, 5],
[6, 7]]])
当我这样做时
np.transpose(a_value, (2, 1, 0))
我明白了
array([[[0, 4],
[2, 6]],
[[1, 5],
[3, 7]]])
如何手动推导出这个转置?我需要直观地理解上述案例中的公式或步骤,以便将其推广到更高的维度。
numpy.transpose(a, axes=None)
axes : list of ints, optional By default, reverse the dimensions, otherwise permute the axes according to the values given.
第二个参数是排列值所使用的轴。例如,如果初始元素的索引是 (x,y,z)
(其中 x
是第 0 个轴,y
是第 1 个轴,z
是第 2 个轴),则位置根据您为 axes
提供的参数,结果数组中的该元素变为 (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.reshape(z, y, x)
和 np.transpose(0, 1, 2)
的参数。
np.reshape()
使用我们矩阵的维度,想想 (sheets, rows, columns)
,来指定它的布局。
np.transpose()
用整数0、1、2表示我们要交换的坐标轴,分别对应z、y、x。
例如,如果我们有 2 sheet 个 3 行 5 列的矩阵中的数据...
我们可以采取下一步,从列表的角度思考。因此,2x3x5 矩阵的 z, y, x
或 sheets, rows, columns
表示是...
[[[ 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]]]
...但是我们将此数据输入的模块需要一个布局,使得 sheet 1 包含我们每个 sheet 和 sheet 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.reshape(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个参数,每个轴一个。 axes=(0, 1, 2, 3) 没有变化,因为请求的结果排序与开始排序相同。
为了根据需要仅转置 (4,4) 数组,我使用 axes=(0, 1, 3, 2) -- 请交换最后两个轴。