numpy.transpose解析
python常用框架工具之numpy——华为AI学习笔记9 提到了numpy.transpose()用于3维及以上矩阵时不太好理解,但没有进一步展开,今天来对它做一些探索和解析。
1. transpose简介
先来看下numpy.transpose的函数说明
import numpy as np
help(np.transpose)
Help on function transpose in module numpy:
transpose(a, axes=None) Reverse or permute the axes of an array; returns the modified array.
For an array a with two axes, transpose(a) gives the matrix transpose.
Parameters
----------
a : array_like
Input array.
axes : tuple or list of ints, optional
If specified, it must be a tuple or list which contains a permutation of
[0,1,..,N-1] where N is the number of axes of a. The i'th axis of the
returned array will correspond to the axis numbered ``axes[i]`` of the
input. If not specified, defaults to ``range(a.ndim)[::-1]``, which
reverses the order of the axes.
Returns
-------
p : ndarray
`a` with its axes permuted. A view is returned whenever
possible.
See Also
--------
moveaxis
argsort
Notes
-----
Use `transpose(a, argsort(axes))` to invert the transposition of tensors
when using the `axes` keyword argument.
Transposing a 1-D array returns an unchanged view of the original array.
Examples
--------
>>> x = np.arange(4).reshape((2,2))
>>> x
array([[0, 1],
[2, 3]])
>>> np.transpose(x)
array([[0, 2],
[1, 3]])
>>> x = np.ones((1, 2, 3))
>>> np.transpose(x, (1, 0, 2)).shape
(2, 1, 3)
也就是说transpose共有两个参数。一个必备参数,类似矩阵的形式;一个关键字参数,用来表示维度的顺序。
2. transpose在二维矩阵中的运用
2.1. axes参数缺省
在二维矩阵中,当axes参数缺省时,transpose函数刚好是二维矩阵的转置。
2.2. axes参数为(0, 1)
当axes参数为(0, 1)时,transpose函数的结果为原矩阵。
2.3. axes参数为(1, 0)
当axes参数为(1, 0)时,transpose函数的结果与缺省一致。
2.4. 原理
继续用上述例子来说明
矩阵a有两个维度,分别表示为维度0和维度1。a的元素的下标依次为维度0和维度1。
当b=np.transpose(a, (0, 1))时,b由a的元素组成,并且下标顺序与a一致,结果是b=a。
当b=np.transpose(a, (1, 0))时,b还是由a的元素组成,但下标顺序与a不一致,先是维度1再是维度0,即
其结果是
显然,当axes参数缺省时,默认为(1, 0)。
3. transpose在三维矩阵中的运用
当矩阵扩展到三维,我们在二维矩阵下得到的原理是否仍然适用?
三维矩阵已经不容易表示,我们先借用numpy的输出结果来展示,举例如下:
即
a的维度依次为维度0,维度1和维度2,transpose的axes参数共有3!种不同的排列,下面举例来验证我们从二维矩阵下猜测的原理。
3.1. 参数(0, 1, 2)
transpose后没有变化,符合我们的判断。
3.2. 参数(0, 2, 1)
当b=np.transpose(a, (0, 2, 1))时,
判断与结果一致。
3.3. 参数(1, 0, 2)
当b=np.transpose(a, (1, 0, 2))时,
判断与结果一致。
3.4. 总结
可见,我们在二维矩阵下总结出的规律完全适用于更三维矩阵,它应该也适用于更多维的矩阵,此处不再赘述。
3.5. 补充探索多维下的axes默认值
三维矩阵axes参数缺省时
可见,多维下axes的默认参数很可能是原矩阵的倒序排列。我们也用更高一维的案例来验证其准确性。
可以看到,四维下axes的默认值同样是原矩阵各维度的倒序。
- 点赞
- 收藏
- 关注作者
评论(0)