NumPy 數組的複製與視圖 NumPy 數組的複製和視圖是兩種不同的方式來創建新數組,它們之間存在著重要的區別。 複製 複製 會創建一個包含原始數組相同元素的新數組,但這兩個數組擁有獨立的記憶體空間。這意味著對複製進行的任何更改都不會影響原始數組,反之亦然。 創建副本可以使用以下方法: arr.co ...
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
,關註後即可獲取最新文章推送
看完如果覺得有幫助,歡迎點贊、收藏、關註