当我们在NumPy中操作数组时,复制和查看是常见的操作。但是,虽然看起来这两个操作非常相似,实际上它们在实现上的差别很大。在这里,我们将详细地讨论NumPy中的复制和查看。
复制
在NumPy中,复制一个数组有两种方式:浅复制和深复制。
浅复制
浅复制是指创建一个新的数组对象,但并不对数组中的数据进行复制。这意味着,新的数组与原始数组共享相同的数据。在浅复制中,只有数组对象本身是新的,而数组元素是共享的。
使用view()
函数来创建浅复制。下面是一个使用浅复制创建新数组的示例:
import numpy as np
# 原始数组
x = np.array([1, 2, 3, 4, 5])
# 创建浅复制
y = x.view()
# 修改y数组中的元素
y[1] = 0
# 输出两个数组的值
print(x) # [1 0 3 4 5]
print(y) # [1 0 3 4 5]
在上面的示例中,我们使用view()函数创建了一个浅复制。修改新数组中的元素时,原始数组中相应的元素也会发生更改。
深复制
深复制是指创建一个新的数组对象,并对数组中的数据进行复制。这意味着,新的数组与原始数组不共享数据。在深复制中,包括数组元素在内的所有内容都是新的。
使用copy()
函数来创建深复制。下面是一个使用深复制创建新数组的示例:
import numpy as np
# 原始数组
x = np.array([1, 2, 3, 4, 5])
# 创建深复制
y = x.copy()
# 修改y数组中的元素
y[1] = 0
# 输出两个数组的值
print(x) # [1 2 3 4 5]
print(y) # [1 0 3 4 5]
在上面的示例中,我们使用copy()
函数创建了一个深复制。修改新数组中的元素时,原始数组中相应的元素不会发生更改。
查看
可以使用view()
函数和reshape()
函数来创建数组的视图,它们可以用来查看数组的数据而不需要复制。视图是原始数组的一部分,它们与原始数组共享相同的数据块。
使用view()函数
使用view()
函数可以创建一个新的数组对象,该对象与原始数组共享相同的数据块。该函数会创建一个新的数组对象,但该对象与原始数组共享相同的数据。这意味着,如果在新数组中修改元素,则原始数组中相应的元素也会发生更改。
下面是一个使用view()
函数创建新数组的示例:
import numpy as np
# 原始数组
x = np.array([1, 2, 3, 4, 5])
# 创建视图
y = x.view()
# 修改y数组中的元素
y[1] = 0
# 输出两个数组的值
print(x) # [1 0 3 4 5]
print(y) # [1 0 3 4 5]
在示例中,我们使用view()
函数创建了一个数组视图,并修改了新数组中的元素。此更改也反映在原始数组中。
使用reshape()函数
使用reshape()
函数可以改变数组的形状,而不需要复制数组。该函数将返回一个新的数组对象,但该选项与原始数组共享相同的数据块。这意味着,如果在新数组中修改元素,则原始数组中相应的元素也会发生更改。
下面是一个使用reshape()
函数创建新数组的示例:
import numpy as np
# 原始数组
x = np.array([1, 2, 3, 4, 5])
# 改变数组的形状
y = x.reshape((1, 5))
# 修改y数组中的元素
y[0][1] = 0
# 输出两个数组的值
print(x) # [1 0 3 4 5]
print(y) # [[1 0 3 4 5]]
在示例中,我们使用reshape()
函数改变了数组的形状,并修改了新数组中的元素。此更改也反映在原始数组中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NumPy数组中的复制和查看 - Python技术站