1. 程式人生 > >NumPy數組基本的索引和切片

NumPy數組基本的索引和切片

復制 標量 內存問題 數據 利用 emp 內存 性能 設計

對一維數組來說,NumPy數組的索引切片與Python列表的功能差不多:

>>> arr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> arr[3]
3
>>> arr[2:6]
array([2, 3, 4, 5])
>>> arr[3:]
array([3, 4, 5, 6, 7, 8, 9])

但是,特別註意的是,如果要將一個標量值賦值給一個切片,這個修改會直接反映到源數組上(即使你已經新建了一個變量來保存),NumPy數組切片是原始數組的視圖。

>>> arr_temp = arr[4:6]
>>> arr_temp array([4, 5]) >>> arr_temp[1]=7 >>> arr array([0, 1, 2, 3, 4, 7, 6, 7, 8, 9])

因為NumPy設計的目的是處理大數據,所以如果要不斷復制數據的話會帶來巨大的性能和內存問題。因此,NumPy選擇所有切片都使用初始視圖來提高效率。

對高維數組,可以對各個元素進行遞歸訪問。為了方便,可以傳入以逗號隔開的索引列表來選取:

>>> arr2=np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> arr2[1]
array([
4, 5, 6]) >>> arr2[1][1] 5 >>> arr2[1,1] 5

再比如這個:

>>> arr2[1:,2]
array([6, 9])

前一個1:表示從索引1到結尾,即[[4,5,6],[7,8,9]],後一個2是下一個維度的索引2,即6,9,因此返回了[6,9]。

除了基本的索引,還有一種叫花式索引的操作,指的是利用整數數組進行索引。花式索引與切片不同,會把數據復制到新數組中。

NumPy數組基本的索引和切片