2014-05-23 56 views
2

是否有一種使用列表或任何其他集合來索引數組的簡單方法,以便不進行復制(僅獲取數組視圖)。請不要試圖用下面的代碼段來回答這個問題---我用來索引元素的列表並不總是很短(即成千上萬個元素,而不是4個),並且列表是算法和因此數不一定有序等使用列表索引numpy數組時避免複製

例如在1,2-列下面的代碼和3在兩種情況下被選擇,但只在第一種情況下的數據的視圖返回:

>>> a[:,1:4] 
>>> b = a[:,1:4] 
>>> b.base is a 
True 
>>> c = a[:,[1,3,2]] 
>>> c.base is a 
False 

回答

5

花式索引(使用訪問數組元素的索引列表)總是生成一個副本,因爲numpy沒有辦法將它翻譯成相同數據的新視圖,但是具有不同的固定步幅和形狀,從一個特定的元素開始。

在引擎蓋下,numpy數組是一個指向數組內存中第一個元素的指針,dtype,shape以及有關在內存中移動多少以獲取每個維度(下一行,等等)和一些標誌。一些預先存在的內存視圖只是指向該數組中的某個元素,並以步幅和形狀擺弄。花式索引通常指定隨機訪問該預先存在的內存,並且不能將該數據強制爲必要的形式,因此必須進行復制。