Numpy中的ravel_multi_index函數用法說明
最近遇到瞭ravel_multi_index這個函數,官方文檔看不明白,Google瞭一番好不容易才從一堆示例代碼裡理解函數的意義,記錄一下。
官方文檔在這
這個函數主要功能為把給定的一個多維數組(函數的第一個參數)看作索引數組,索引什麼呢?去索引一個形狀為dims(函數的第二個參數),值為依次增大的自然數的數組中的值(可看做由list(range(N))的數組reshape(dims)而來),意義即為用一個唯一的一維數來定位(保存)原數組的二維(或多維(i,j,k,…))的數對的信息。
把文檔裡的示例代碼貼一下來解釋:
>>> arr = np.array([[3,6,6],[4,5,1]]) >>> np.ravel_multi_index(arr, (7,6)) array([22, 41, 37]) >>> np.ravel_multi_index(arr, (7,6), order='F') array([31, 41, 13]) >>> np.ravel_multi_index(arr, (4,6), mode='clip') array([22, 23, 19]) >>> np.ravel_multi_index(arr, (4,4), mode=('clip','wrap')) array([12, 13, 13]) >>> np.ravel_multi_index((3,1,4,1), (6,7,8,9)) 1621
示例中arr即為要轉換的多維數組,把arr的內容當作索引,即[3,6,6]為橫坐標,[4,5,1]為縱坐標,去索引形狀為(7,6),內容為從0開始,從左往右,從上往下依次增大的自然數的數組中的值。
例如第一個要索引的數[3,4]即為(7,6)數組中第4行,第5列的的值,即為3*6+4=22,即為結果中的第一個數。依次類推。
瞭解函數功能後,其他參數具體可見官方文檔說明。
補充:numpy.unravel_index 與 numpy.ravel_multi_index的理解
遇到numpy.ravel_multi_index 與numpy.unravel_index 這兩個函數,查瞭網上的很多資料 都沒講的很清楚,記錄一下。
這兩個函數是相對應的:
numpy.unravel_index(indices, shape, order='C')
其中indices是表示一個一維數組的index,將這個一維數組轉換成大小為shape([col, row])shape矩陣決定瞭轉變後得到的數組的行和列的大小,進而得到index在新的二維矩陣 中的行index 和列index 其中order決定先是行index,還是先是列index ‘C’先是列index 再是行index ‘F’先是行index 再是列index
np.unravel_index([22, 41, 37], (7,6)) (array([3, 6, 6]), array([4, 5, 1]))
numpy.ravel_multi_index是numpy.unravel_index反過來的過程,
numpy.ravel_multi_index(multi_index, dims, mode='raise', order='C')
根據multi_index中不同數組代表的具體的索引,以及該數組的dims的大小 ,得到將該數組flat成一維數組 數據在一位數組中的位置。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- 淺談numpy.where() 的用法和np.argsort()的用法說明
- Numpy中的shape、reshape函數的區別
- Python Numpy中ndarray的常見操作
- Python數組變形的幾種實現方法
- Numpy中的shape函數的用法詳解