在 Python 中複製二維陣列
二維陣列是以行和列表示資料的陣列陣列。
可以使用兩個索引訪問二維陣列中的元素。第一個索引是指陣列中的子陣列,第二個索引是指各個元素。
二維陣列遵循以下語法。
array_name = [[d1, d2, d3, d4, ..., dn], [c1, c2, c3, c4, ...., cn]]
第一個子陣列代表行,而第二個子陣列代表表的列。
製作物件的副本是處理和修改陣列的一個重要方面。
這使我們可以自由地迭代和修改諸如陣列之類的物件而不會遇到錯誤。建立副本還允許我們保留原始物件,而不是對副本執行操作。
Python 提供了一系列工廠函式,可用於在 Python 中建立陣列或任何其他可變物件的副本。這些可變物件包括字典、集合和列表。
使用 NumPy copy()
函式建立二維陣列的副本
NumPy 提供了 copy()
功能。copy()
函式可以實現如下所示。
import numpy as np
x = np.array([[23, 34, 45], [24, 45, 78]])
y = x.copy()
print(y)
# making changes to the copy of array
y[0][2] = 65
print(y)
# printing original 2d array
print(x)
輸出:
[[23 34 45]
[24 45 78]]
[[23 34 65]
[24 45 78]]
[[23 34 45]
[24 45 78]]
在示例程式碼中,我們建立了原始陣列的副本並更改了副本。但是,我們保留了陣列的原始副本,列印在最後一行。
使用 copy.deepcopy()
函式建立二維陣列的副本
使用深拷貝功能,我們可以通過遞迴地將原始物件中的物件新增到新物件中來建立新的複合物件。
這意味著對新物件(一個陣列)所做的更改不會影響原始陣列。我們將使用 copy 模組中可用的 deepcopy()
函式來實現此方法。
複製模組提供了從 Python 物件(例如列表和陣列)複製元素的功能。deepcopy()
函式可用於建立二維陣列的副本,如下例所示。
import copy
x = [[24, 23, 25], [32, 43, 54]]
y = copy.deepcopy(x)
# a copy of the original array
print(y)
# making changes to the copy of the array
y[0][2] = 100
print(y)
# original array
print(x)
輸出:
[[24, 23, 25], [32, 43, 54]]
[[24, 23, 100], [32, 43, 54]]
[[24, 23, 25], [32, 43, 54]]
在 Python 中建立二維陣列的淺拷貝
同樣,淺拷貝方法也會建立一個複合物件來表示原始物件。與插入原始物件的副本的深拷貝不同,淺拷貝僅引用原始物件中的物件。
因此,淺拷貝不會遞迴,只允許我們將一個物件的引用複製到另一個物件中。這意味著一個物件的變化不會影響另一個物件。
如下所示,可以使用 view()
函式實現淺拷貝。
import numpy as np
x = np.array([[24, 23, 25], [32, 43, 54]])
y = x.view()
# a copy of the original array
# making changes to the copy of the array
y[0][2] = 100
print(y)
# original array
print(x)
輸出:
[[ 24 23 100]
[ 32 43 54]]
[[ 24 23 100]
[ 32 43 54]]
在這種情況下,更改一個陣列的值會更改原始陣列中的值。但是,這兩個陣列仍然引用不同的物件。
使用 id()
函式,我們可以驗證兩個陣列是否引用了不同的物件。這是一個返回物件標識的內建函式,可以如下所示實現。
import numpy as np
x = np.array([[24, 23, 25], [32, 43, 54]])
print(id(x))
y = x.view()
print(id(y))
# a copy of the original array
# making changes to the copy of the array
y[0][2] = 100
print(y)
# original array
print(x)
輸出:
139636169252912
139636169253008
[[ 24 23 100]
[ 32 43 54]]
[[ 24 23 100]
[ 32 43 54]]
或者,我們也可以使用 copy()
函式建立二維陣列的淺拷貝。
copy 模組提供了 copy()
函式,該函式提供了不同的函式來複制列表、陣列和其他物件中的元素。如下所示,可以實現 copy
函式來建立淺拷貝。
import numpy as np
import copy
x = np.array([[24, 23, 25], [32, 43, 54]])
y = copy.copy(x)
# a copy of the original array
# making changes to the copy of the array
y[0][2] = 100
print(y)
# original array
print(x)
輸出:
[[ 24 23 100]
[ 32 43 54]]
[[24 23 25]
[32 43 54]]
Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.
LinkedIn