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在處理上的一點獨到之處,通過獨特的資料結構保證大資料的處理效率。