numpy中rollaxis()的理解
阿新 • • 發佈:2018-12-25
最近接觸到這個函式,發現在網上的部落格說的並不是很明白,有的說的有點過於複雜了(也可能是自己水平太low),下面是自己對於這個函式的理解
rollaxis(a, axis, start = 0)
這個函式的用處是翻滾陣列的軸axis,對於軸的理解我們可以藉助3緯的空間座標系,我們都知道,空間直角座標系的維度是3維,相對應的就有3個軸,按照一般的順序,依次是x, y, z滿足右手螺旋法則,而通過呼叫rollaxis函式我們改變x, y, z軸的順序,從3維延伸到高維,也是一樣的原理。
引數:
a —— 輸入的陣列
axis —— 需要移動的軸(按照其文件應該是往後翻滾的軸,但是我通過一些程式測試發現這樣理解更容易)
start —— axis翻滾到這個軸的前面(注意是前面),其他軸的相對位置不變
注意:假設給出一個5維陣列,那麼它的軸編碼依次是0,1,2,3,4 而start的取值範圍是0,1,2,3,4,5
下面我們通過程式直觀瞭解一下
>>> a = np.ones((3,4,5,6)) >>> np.rollaxis(a, 3, 1).shape (3, 6, 4, 5) >>> np.rollaxis(a, 2).shape (5, 3, 4, 6)>>> np.rollaxis(a, 1, 4).shape (3, 5, 6, 4)
接下來我們需要證實一下,某一軸翻滾之後,某一值得索引會有什麼變化
如下圖:
import numpy as np #生成4維隨機陣列 b = np.random.randn(3,4,5,6) #隨意獲取陣列中一個值 >>> b[2,3,4,5] -1.8748822368949825 #將軸3移到軸1的前面 c=np.rollaxis(b, 3, 1) #查詢值-1.8748822368949825在c中的索引 -1.8748822368949825 >>> np.where(c==-1.8748822368949825)#輸出索引是c[2,5,3,4] (array([2], dtype=int64), array([5], dtype=int64), array([3], dtype=int64), array([4], dtype=int64))
通過執行程式我們發現值的索引的變化和軸的變化是一致的
至於理解,我們可以藉助3維的空間直角座標系,假設我們取x=1, y=2, z=3,其所代表的含義是這三個面相交於一點,假設這個點的值是5,,然後我們將z軸移到y軸的前面,可以肯定的是空間已經改變了,也就是說原來值為5的那個點的位置已經沒有意義了,但是他還是x=1, y=2, z=3三個面的交點,我們在找這個點時,只是在新的空間裡三個軸的位置改變了,而每個軸的取值並沒有改變。