2015-10-18 192 views
0

只見一段代碼如下:切片在numpy的陣列

a = np.zeros((10,10,10)) 
b = a[:,:,::-1] 

b是相同的。該切片的目的是什麼?

+5

這基本上顛倒了沿着最後一個軸的元素順序。當你在一個全零的數組上使用它時,你將不會注意到它的差異。嘗試一個隨機數組。 – Divakar

+0

啊!我知道了。謝謝 –

回答

0

用這樣一個小代碼例子不可能明確地回答「目的是什麼」。這裏是我的猜測:

將代碼片段後,ab是不同的意見到相同的數據數組。由於Python通過引用傳遞對象,因此如果將值分配給b,那麼相同的值將出現在a中,但最後一個索引會顛倒過來。如果您有一個數據集和一個函數,但您想要像處理最後一個數據索引時那樣處理數據,則將b而不是a轉換爲該函數可有效地在a上運行,但最終索引會顛倒過來。

要點是:您可以通過對b的內容進行操作來操作a的內容,但操作順序在最後一個軸上是相反的。

例如,按最後一個索引的升序對b進行排序實際上按最後一個索引的降序排列a。下面是一個簡化的例子:

a = np.rand(4, 2) 
a[:, 0] = [4, 2, 1, 3] 
b = a[::-1, :] 

a具有其第一列未排序,b具有以相反的順序相同的數據。現在

b.sort(axis=0) 

b內容以升序排序第一列,並a內容上的第一列,但按降序排序。