Python numpy.transpose 详解

前言

看Python代码时,碰见 numpy.transpose 用于高维数组时挺让人费解,通过一番画图分析和代码验证,发现 transpose 用法还是很简单的。

正文

Numpy 文档 numpy.transpose 中做了些解释,transpose 作用是改变序列,下面是一些文档Examples:


代码1:

<span style="color:#000000"><code class="language-python">x <span style="color:#669900">=</span> np<span style="color:#999999">.</span>arange<span style="color:#999999">(</span><span style="color:#98c379">4</span><span style="color:#999999">)</span><span style="color:#999999">.</span>reshape<span style="color:#999999">(</span><span style="color:#999999">(</span><span style="color:#98c379">2</span><span style="color:#999999">,</span><span style="color:#98c379">2</span><span style="color:#999999">)</span><span style="color:#999999">)</span>
</code></span>
  • 1

输出1:

<span style="color:#000000"><code class="language-python"><span style="color:#5c6370">#x 为:</span>
array<span style="color:#999999">(</span><span style="color:#999999">[</span><span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">,</span> <span style="color:#98c379">1</span><span style="color:#999999">]</span><span style="color:#999999">,</span>
       <span style="color:#999999">[</span><span style="color:#98c379">2</span><span style="color:#999999">,</span> <span style="color:#98c379">3</span><span style="color:#999999">]</span><span style="color:#999999">]</span><span style="color:#999999">)</span>
</code></span>
  • 1
  • 2
  • 3

代码2:

<span style="color:#000000"><code class="language-python"><span style="color:#c678dd">import</span> numpy <span style="color:#c678dd">as</span> np
x<span style="color:#999999">.</span>transpose<span style="color:#999999">(</span><span style="color:#999999">)</span>
</code></span>
  • 1
  • 2

输出2:

<span style="color:#000000"><code>array([[0, 2],
       [1, 3]])
</code></span>
  • 1
  • 2

对于二维 ndarray,transpose在不指定参数是默认是矩阵转置。如果指定参数,有如下相应结果:
代码3:

<span style="color:#000000"><code class="language-python">x<span style="color:#999999">.</span>transpose<span style="color:#999999">(</span><span style="color:#999999">(</span><span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#98c379">1</span><span style="color:#999999">)</span><span style="color:#999999">)</span>
</code></span>
  • 1

输出3:

<span style="color:#000000"><code class="language-python"><span style="color:#5c6370"># x 没有变化</span>
array<span style="color:#999999">(</span><span style="color:#999999">[</span><span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">,</span> <span style="color:#98c379">1</span><span style="color:#999999">]</span><span style="color:#999999">,</span>
       <span style="color:#999999">[</span><span style="color:#98c379">2</span><span style="color:#999999">,</span> <span style="color:#98c379">3</span><span style="color:#999999">]</span><span style="color:#999999">]</span><span style="color:#999999">)</span>
</code></span>
  • 1
  • 2
  • 3

代码4:

<span style="color:#000000"><code class="language-python">x<span style="color:#999999">.</span>transpose<span style="color:#999999">(</span><span style="color:#999999">(</span><span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#98c379">0</span><span style="color:#999999">)</span><span style="color:#999999">)</span>
</code></span>
  • 1

输出4:

<span style="color:#000000"><code class="language-python"><span style="color:#5c6370"># x 转置了</span>
array<span style="color:#999999">(</span><span style="color:#999999">[</span><span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">,</span> <span style="color:#98c379">2</span><span style="color:#999999">]</span><span style="color:#999999">,</span>
       <span style="color:#999999">[</span><span style="color:#98c379">1</span><span style="color:#999999">,</span> <span style="color:#98c379">3</span><span style="color:#999999">]</span><span style="color:#999999">]</span><span style="color:#999999">)</span>
</code></span>
  • 1
  • 2
  • 3

这个很好理解:
对于x,因为:

代码5:

<span style="color:#000000"><code class="language-python">x<span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">]</span><span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">]</span> <span style="color:#669900">==</span> <span style="color:#98c379">0</span>
x<span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">]</span><span style="color:#999999">[</span><span style="color:#98c379">1</span><span style="color:#999999">]</span> <span style="color:#669900">==</span> <span style="color:#98c379">1</span>
x<span style="color:#999999">[</span><span style="color:#98c379">1</span><span style="color:#999999">]</span><span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">]</span> <span style="color:#669900">==</span> <span style="color:#98c379">2</span>
x<span style="color:#999999">[</span><span style="color:#98c379">1</span><span style="color:#999999">]</span><span style="color:#999999">[</span><span style="color:#98c379">1</span><span style="color:#999999">]</span> <span style="color:#669900">==</span> <span style="color:#98c379">3</span>
</code></span>
  • 1
  • 2
  • 3
  • 4

我们不妨设第一个方括号“[]”为 0轴 ,第二个方括号为 1轴 ,则x可在 0-1坐标系 下表示如下:
这里写图片描述

代码6:

<span style="color:#000000"><code class="language-python">因为 x<span style="color:#999999">.</span>transpose<span style="color:#999999">(</span><span style="color:#999999">(</span><span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#98c379">1</span><span style="color:#999999">)</span><span style="color:#999999">)</span> 表示按照原坐标轴改变序列,也就是保持不变
而 x<span style="color:#999999">.</span>transpose<span style="color:#999999">(</span><span style="color:#999999">(</span><span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#98c379">0</span><span style="color:#999999">)</span><span style="color:#999999">)</span> 表示交换 ‘<span style="color:#98c379">0</span>轴’ 和 ‘<span style="color:#98c379">1</span>轴’,所以就得到如下图所示结果:
</code></span>
  • 1
  • 2

这里写图片描述

注意,任何时候你都要保持清醒,告诉自己第一个方括号“[]”为 0轴 ,第二个方括号为 1轴
此时,transpose转换关系就清晰了。


我们来看一个三维的:
代码7:

<span style="color:#000000"><code class="language-python"><span style="color:#c678dd">import</span> numpy <span style="color:#c678dd">as</span> np

<span style="color:#5c6370"># A是array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])</span>
A <span style="color:#669900">=</span> np<span style="color:#999999">.</span>arange<span style="color:#999999">(</span><span style="color:#98c379">16</span><span style="color:#999999">)</span>

<span style="color:#5c6370"># 将A变换为三维矩阵</span>
A <span style="color:#669900">=</span> A<span style="color:#999999">.</span>reshape<span style="color:#999999">(</span><span style="color:#98c379">2</span><span style="color:#999999">,</span><span style="color:#98c379">2</span><span style="color:#999999">,</span><span style="color:#98c379">4</span><span style="color:#999999">)</span>
<span style="color:#c678dd">print</span><span style="color:#999999">(</span>A<span style="color:#999999">)</span>
</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

输出7:

<span style="color:#000000"><code class="language-python">A <span style="color:#669900">=</span> array<span style="color:#999999">(</span><span style="color:#999999">[</span><span style="color:#999999">[</span><span style="color:#999999">[</span> <span style="color:#98c379">0</span><span style="color:#999999">,</span>  <span style="color:#98c379">1</span><span style="color:#999999">,</span>  <span style="color:#98c379">2</span><span style="color:#999999">,</span>  <span style="color:#98c379">3</span><span style="color:#999999">]</span><span style="color:#999999">,</span>
            <span style="color:#999999">[</span> <span style="color:#98c379">4</span><span style="color:#999999">,</span>  <span style="color:#98c379">5</span><span style="color:#999999">,</span>  <span style="color:#98c379">6</span><span style="color:#999999">,</span>  <span style="color:#98c379">7</span><span style="color:#999999">]</span><span style="color:#999999">]</span><span style="color:#999999">,</span>
            
           <span style="color:#999999">[</span><span style="color:#999999">[</span> <span style="color:#98c379">8</span><span style="color:#999999">,</span>  <span style="color:#98c379">9</span><span style="color:#999999">,</span> <span style="color:#98c379">10</span><span style="color:#999999">,</span> <span style="color:#98c379">11</span><span style="color:#999999">]</span><span style="color:#999999">,</span>
            <span style="color:#999999">[</span><span style="color:#98c379">12</span><span style="color:#999999">,</span> <span style="color:#98c379">13</span><span style="color:#999999">,</span> <span style="color:#98c379">14</span><span style="color:#999999">,</span> <span style="color:#98c379">15</span><span style="color:#999999">]</span><span style="color:#999999">]</span><span style="color:#999999">]</span><span style="color:#999999">)</span>
</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5

我们对上述的A表示成如下三维坐标的形式:

在这里插入图片描述

所以对于如下的变换都很好理解啦:
代码8:

<span style="color:#000000"><code class="language-python">A<span style="color:#999999">.</span>transpose<span style="color:#999999">(</span><span style="color:#999999">(</span><span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#98c379">2</span><span style="color:#999999">)</span><span style="color:#999999">)</span>  <span style="color:#5c6370">#保持A不变</span>
A<span style="color:#999999">.</span>transpose<span style="color:#999999">(</span><span style="color:#999999">(</span><span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#98c379">2</span><span style="color:#999999">)</span><span style="color:#999999">)</span>  <span style="color:#5c6370">#将 0轴 和 1轴 交换</span>
</code></span>
  • 1
  • 2

 0轴 和 1轴 交换:

在这里插入图片描述
此时,输出

代码9:

<span style="color:#000000"><code class="language-python">A<span style="color:#999999">.</span>transpose<span style="color:#999999">(</span><span style="color:#999999">(</span><span style="color:#98c379">1</span><span style="color:#999999">,</span><span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#98c379">2</span><span style="color:#999999">)</span><span style="color:#999999">)</span> <span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">]</span><span style="color:#999999">[</span><span style="color:#98c379">1</span><span style="color:#999999">]</span><span style="color:#999999">[</span><span style="color:#98c379">2</span><span style="color:#999999">]</span>	<span style="color:#5c6370">#根据上图这个结果应该是10</span>
</code></span>
  • 1

后面不同的参数以此类推。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值