numpy.transpose解析

举报
darkpard 发表于 2022/02/10 19:01:11 2022/02/10
【摘要】 python常用框架工具之numpy——华为AI学习笔记9 提到了numpy.transpose()用于3维及以上矩阵时不太好理解,但没有进一步展开,今天来对它做一些探索和解析。1. transpose简介先来看下numpy.transpose的函数说明import numpy as nphelp(np.transpose)Help on function transpose in modu...

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的默认值同样是原矩阵各维度的倒序。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。