numpy中陣列元素的切片複製
阿新 • • 發佈:2019-02-10
程式碼1:
#!/usr/bin/python
import numpy as np
arr1 = np.arange(10)
print(arr1)
slice_data = arr1[3:5]
print(slice_data)
slice_data[0] = 123
print(slice_data)
print(arr1)
類似的程式碼之前應用過,簡單看了一下numpy中的陣列切片。程式的執行結果如下:
In [2]: %run exp01.py
[0 1 2 3 4 5 6 7 8 9]
[3 4]
[123 4]
[ 0 1 2 123 4 5 6 7 8 9]
由此得出來的結論是:切片後的變數與原始的資料共享同一資料儲存。而這種特點是專門針對大資料的處理而定製的。然而,在日常的使用中總有需要對資料進行拷貝的時候,此時需要的便是顯式的資料複製操作。程式修改如下:
#!/usr/bin/python
import numpy as np
arr1 = np.arange(10)
print(arr1)
slice_data = arr1[3:5].copy()
print(slice_data)
slice_data[0] = 123
print(slice_data)
print(arr1)
程式的執行結果如下:
In [3]: %run exp01.py
[0 1 2 3 4 5 6 7 8 9]
[3 4]
[123 4]
[0 1 2 3 4 5 6 7 8 9]
由上面的結果可以看出,通過切片後複製操作生成的新的資料物件的操作與原始的資料是獨立的。新的資料物件的變化並不會影響到原始資料的資訊。
#!/usr/bin/python
import numpy as np
arr1 = np.arange(10)
print(arr1)
slice_data = arr1[3:5]
print(slice_data)
slice_data[0] = 123
print(slice_data)
print(arr1)
類似的程式碼之前應用過,簡單看了一下numpy中的陣列切片。程式的執行結果如下:
In [2]: %run exp01.py
[0 1 2 3 4 5 6 7 8 9]
[3 4]
[123 4]
[ 0 1 2 123 4 5 6 7 8 9]
由此得出來的結論是:切片後的變數與原始的資料共享同一資料儲存。而這種特點是專門針對大資料的處理而定製的。然而,在日常的使用中總有需要對資料進行拷貝的時候,此時需要的便是顯式的資料複製操作。程式修改如下:
#!/usr/bin/python
import numpy as np
arr1 = np.arange(10)
print(arr1)
slice_data = arr1[3:5].copy()
print(slice_data)
slice_data[0] = 123
print(slice_data)
print(arr1)
程式的執行結果如下:
In [3]: %run exp01.py
[0 1 2 3 4 5 6 7 8 9]
[3 4]
[123 4]
[0 1 2 3 4 5 6 7 8 9]
由上面的結果可以看出,通過切片後複製操作生成的新的資料物件的操作與原始的資料是獨立的。新的資料物件的變化並不會影響到原始資料的資訊。