numpy轉置及軸對換transpose函式簡單例子理解 axis 01 交換,圖視覺化 numpy轉置及軸對換transpose函式簡單例子理解
阿新 • • 發佈:2018-11-16
原
我們先看函式的原型:
函式中的的a即所建立的arr陣列,axes即所要重新排列的維度,在reshape中有三個引數就是三個軸。而三個軸自動被編號為0軸,1軸,2軸,我們可以將其看成index(索引) 為了更加容易理解transpose函式畫了一個arr陣列的三維圖如下 上面就是一個2×2×4的立方體,對應於reshape中的三個引數,也對應著三個索引0,1,2。
觀察軸對換後的三維圖,從0軸到2軸, 很容易寫出變換後的陣列
上面的三種方法,簡單的轉置用T即可,其實也是軸對換,而對於高維陣列可以選用swapaxes和transpose方法。
這裡也有自己理解時看的一些其他人的解答,大家也可以看看幫助理解: [問答] numpy中.transpose函式的用法
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>