NumPy 陣列的複製與檢視
NumPy 陣列的複製和檢視是兩種不同的方式來建立新陣列,它們之間存在著重要的區別。
複製
複製 會建立一個包含原始陣列相同元素的新陣列,但這兩個陣列擁有獨立的記憶體空間。這意味著對複製進行的任何更改都不會影響原始陣列,反之亦然。
建立副本可以使用以下方法:
arr.copy()
:建立一個新的陣列,該陣列包含與原始陣列相同元素的副本。
np.array(arr)
:將陣列轉換為新的 NumPy 陣列。
arr[:]
:使用切片建立整個陣列的副本。
示例:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
# 建立副本
copy = arr.copy()
# 修改副本
copy[2] = 100
# 列印原始陣列和副本
print(arr)
print(copy)
輸出:
[ 1 2 3 4 5]
[ 1 2 100 4 5]
檢視
檢視 是對原始陣列資料的引用,不擁有獨立的記憶體空間。這意味著對檢視進行的任何更改都會直接反映在原始陣列中,反之亦然。
建立檢視可以使用以下方法:
arr.view()
:建立一個新的陣列,該陣列是原始陣列資料的檢視。
arr[start:end]
:使用切片建立原始陣列的檢視。
arr.reshape()
:改變陣列的形狀,但不改變底層資料。
示例:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
# 建立檢視
view = arr.view()
# 修改檢視
view[2] = 100
# 列印原始陣列和檢視
print(arr)
print(view)
輸出:
[ 1 2 100 4 5]
[ 1 2 100 4 5]
檢查陣列是否擁有資料
我們可以使用 arr.base
屬性來檢查陣列是否擁有其資料。如果 arr.base
為 None
,則陣列擁有自己的資料,否則它是一個檢視。
示例:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
copy = arr.copy()
view = arr.view()
print(copy.base) # None
print(view.base) # <ndarray object at 0x00000222588287E0>
練習
使用以下程式碼建立陣列 arr
:
import numpy as np
arr = np.array([10, 20, 30, 40, 50])
並使用以下方法建立 arr
的副本:
arr.copy()
np.array(arr)
arr[:]
在每個方法之後,列印原始陣列和副本,並驗證它們是否相等。
在評論中分享您的程式碼和結果。
Sure, here is the requested Markdown formatted content:
獲取陣列的形狀
NumPy 陣列的形狀描述了陣列中元素的組織方式,並由包含每個維度中元素數量的元組表示。
獲取陣列形狀
可以使用 arr.shape
屬性獲取 NumPy 陣列的形狀。它返回一個元組,其中每個元素表示相應維度的長度。
示例:
import numpy as np
# 建立一個二維陣列
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 獲取陣列形狀
print(arr.shape)
輸出:
(2, 3)
這意味著陣列包含 2 行和 3 列。
形狀元組的含義
形狀元組中的每個元素表示相應維度的長度。例如,如果形狀為 (2, 3, 4)
,則陣列具有:
2 個行
3 列
每個元素 4 個值
使用 ndmin
建立具有特定形狀的陣列
我們可以使用 ndmin
引數來建立具有指定形狀的新陣列,即使原始資料不具有該形狀。ndmin
引數指定要建立的最小維度數。如果原始資料具有比 ndmin
更高的維度,則形狀將保留。如果維度數不足,則將新增新維度,並用 1 填充元素。
示例:
import numpy as np
# 使用 ndmin=5 建立一個包含值 1,2,3,4 的向量
arr = np.array([1, 2, 3, 4], ndmin=5)
print(arr)
print(arr.shape)
輸出:
[[[[1 2 3 4]]]]
(1, 1, 1, 1, 4)
練習
建立以下形狀的 NumPy 陣列,並列印它們的形狀:
一個包含 10 個元素的一維陣列。
一個包含 5 行 4 列的二維陣列。
一個包含 2 x 3 x 2 的三維陣列。
在評論中分享您的程式碼和輸出。
最後
為了方便其他裝置和平臺的小夥伴觀看往期文章:
微信公眾號搜尋:Let us Coding
,關注後即可獲取最新文章推送
看完如果覺得有幫助,歡迎點贊、收藏、關注