1. 程式人生 > >numpy中rollaxis()的理解

numpy中rollaxis()的理解

最近接觸到這個函式,發現在網上的部落格說的並不是很明白,有的說的有點過於複雜了(也可能是自己水平太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三個面的交點,我們在找這個點時,只是在新的空間裡三個軸的位置改變了,而每個軸的取值並沒有改變。