1. 程式人生 > >numpy中的陣列切片

numpy中的陣列切片

       如同python中自帶的切片,numpy中也有類似的切片功能。接下來對兩個功能進行一下簡單的對比。

       首先測試Python自帶的功能,在shell視窗中測試如下:

In [1]: data =range(10)

In [2]: data

Out[2]: [0, 1, 2,3, 4, 5, 6, 7, 8, 9]

In [3]: data1 =data[3:7]

In [4]: data1

Out[4]: [3, 4, 5,6]

In [5]: data1[2] =123

In [6]: data1

Out[6]: [3, 4,123, 6]

In [7]: data

Out[7]: [0, 1, 2,3, 4, 5, 6, 7, 8, 9]

In [8]: data[5]=  234

In [9]: data

Out[9]: [0, 1, 2,3, 4, 234, 6, 7, 8, 9]

In [10]: data1

Out[10]: [3, 4,123, 6]

       通過上面的結果可以看出,源資料不會影響切片出來的資料,而切片出來的物件也不會影響源資料。如此看來,切片出來的資料是被複制後重新創建出來的。

       接下來再看一下numpy:

In [11]: data =range(10)

In [12]: data

Out[12]: [0, 1, 2,3, 4, 5, 6, 7, 8, 9]

In [13]: importnumpy as np

In [14]: data

Out[14]: [0, 1, 2,3, 4, 5, 6, 7, 8, 9]

In [15]: np_arr1 =np.array(data)

In [16]: np_arr1

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

In [17]: np_arr2 =np_arr1[2:7]

In [18]: np_a

np_arr1 np_arr2

In [18]: np_arr2

Out[18]: array([2,3, 4, 5, 6])

In [19]:np_arr2[1] = 123

In [20]: np_arr2

Out[20]:array([  2, 123,   4,  5,   6])

In [21]: np_arr1

Out[21]:array([  0,   1,  2, 123,   4,   5,  6,   7,   8,  9])

In [22]:np_arr1[5] = 432

In [23]: np_arr1

Out[23]:array([  0,   1,  2, 123,   4, 432,   6,  7,   8,   9])

In [24]: np_arr2

Out[24]:array([  2, 123,   4, 432,  6])

       從上面的結果可以看出,切片後生成的物件可以影響到原來的資料,而原來的資料也可以影響切片後的物件。由此可見,numpy中處理的資料位於同一塊記憶體儲存區域之中。而numpy很多時候適用於處理大資料的,而大資料的處理經常進行變動或者進行資料複製建立對計算機硬體的消耗是十分大的。而這也是numpy在處理上的一點獨到之處,通過獨特的資料結構保證大資料的處理效率。