1. 程式人生 > >numpy轉置及軸對換transpose函式簡單例子理解 axis 01 交換,圖視覺化 numpy轉置及軸對換transpose函式簡單例子理解

numpy轉置及軸對換transpose函式簡單例子理解 axis 01 交換,圖視覺化 numpy轉置及軸對換transpose函式簡單例子理解

numpy轉置及軸對換transpose函式簡單例子理解

2018年02月01日 22:03:20 閱讀數:162
																														</div>
			<div class="operating">
													</div>
		</div>
	</div>
</div>
<article>
	<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post">
							<div class="article-copyright">
				版權宣告:本文為博主原創文章,未經博主允許不得轉載。					https://blog.csdn.net/qq_38650993/article/details/79233872				</div>
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f76675cdea.css">
					<div class="htmledit_views">

陣列轉置和軸對換

最近學習numpy的相關函式發現這個軸對換十分難理解,所以自己也寫了點東西幫助自己理解。

1、利用陣列中的T屬性進行轉置

arr = np.arange(15).reshape((3,5))

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

arr.T
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])

2、transpose,應用於高維陣列

arr = np.arange(12).reshape((2,2,3))

arr
array([[[ 0, 1, 2],
[ 3, 4, 5]],

   [[ 6,  7,  8],
    [ 9, 10, 11]]])

arr.transpose((1,0,2))
array([[[ 0, 1, 2],
[ 6, 7, 8]],

   [[ 3,  4,  5],
    [ 9, 10, 11]]])</code></pre><br>
用T進行低維度的轉置很容易就能理解,而對於高維陣列需要進行軸對換,就比較費腦子了。
我們先看函式的原型:
transpose(a, axes=None)  
    Permute the dimensions of an array.

函式中的的a即所建立的arr陣列,axes即所要重新排列的維度,在reshape中有三個引數就是三個軸。而三個軸自動被編號為0軸,1軸,2軸,我們可以將其看成index(索引) 為了更加容易理解transpose函式畫了一個arr陣列的三維圖如下 上面就是一個2×2×4的立方體,對應於reshape中的三個引數,也對應著三個索引0,1,2。
先看0軸,即從上往下看,有兩個陣列
[0, 1, 2,
 3, 4, 5]
[6, 7, 8,
 9, 10, 11]

再看1軸,也為兩個陣列
[0, 1, 2,
6, 7, 8]
[3, 4, 5,
9, 10, 11]

2軸四個陣列:
[0, 3,
6, 9] 後三類推
此時我們在回到transpose的axes引數,我們用的是(1, 0, 2),也就是說,我們將軸的順序重新排列,即將這裡的1軸與0軸調換得到一個新的2×2×4的陣列。




觀察軸對換後的三維圖,從0軸到2軸, 很容易寫出變換後的陣列
array([[[ 0,  1,  2],
        [ 6,  7,  8]],
   [[ 3,  4,  5],
    [ 9, 10, 11]]])</code></pre>

另外對於索引的變化也與transpose的重新排列順序一致

例如數值3的初始索引為[0,1,0],變換後即是[1,0,0]

3、swapaxesfang方法

In [86]: arr = np.arange(12).reshape(2,2,3)

In [87]: arr
Out[87]:
array([[[ 0, 1, 2],
[ 3, 4, 5]],

   [[ 6,  7,  8],
    [ 9, 10, 11]]])

In [88]: arr.swapaxes(1,0)
Out[89]: 
array([[[ 0,  1,  2],
     [ 6,  7,  8]],

     [[ 3,  4,  5],
      [ 9, 10, 11]]])

知道了transpose函式後swapaxes方法也就容易理解,這裡引數1,0即對應了transpose中的(1,0),也同樣將0軸和1軸進行對換得到新的陣列。


上面的三種方法,簡單的轉置用T即可,其實也是軸對換,而對於高維陣列可以選用swapaxes和transpose方法。
這裡也有自己理解時看的一些其他人的解答,大家也可以看看幫助理解: [問答] numpy中.transpose函式的用法
numpy之轉置(transpose)和軸對換

				<script>
					(function(){
						function setArticleH(btnReadmore,posi){
							var winH = $(window).height();
							var articleBox = $("div.article_content");
							var artH = articleBox.height();
							if(artH > winH*posi){
								articleBox.css({
									'height':winH*posi+'px',
									'overflow':'hidden'
								})
								btnReadmore.click(function(){
									articleBox.removeAttr("style");
									$(this).parent().remove();
								})
							}else{
								btnReadmore.parent().remove();
							}
						}
						var btnReadmore = $("#btn-readmore");
						if(btnReadmore.length>0){
							if(currentUserName){
								setArticleH(btnReadmore,3);
							}else{
								setArticleH(btnReadmore,1.2);
							}
						}
					})()
				</script>
				</article>