NumPy数组中的复制和查看

  • Post category:Python

NumPy是Python中一种用于创建、操作多维数组的工具包,对于数据分析、机器学习等领域有着广泛的应用。在NumPy中,数组的复制和查看是非常重要的操作,因为它们能够决定数组数据的修改方式和存储方式。

复制操作

在NumPy数组中,有两种复制操作方式:浅复制和深复制。浅复制是指创建一个新的数组对象,但该数组和原始数组共享数据的存储空间。这意味着,如果修改了原始数组或其浅复制数组中的任何一个,那么另一个数组也会被修改。深复制则是创建一个完全独立的新数组对象,它拥有自己的数据存储空间,并且不与原始数组共享数据。

使用NumPy中的copy()方法可以轻松地进行数组的浅复制操作,示例代码如下:

import numpy as np

a = np.array([1, 2, 3])

# 这里进行浅复制操作
b = a.copy()

# 修改b的值
b[0] = 99

# 输出a和b
print(a)
print(b)

输出结果为:

[1 2 3]
[99 2 3]

可以看出,对于原始数组a进行了浅复制后,修改复制数组b的值并不会影响到原始数组a。这是因为两个数组拥有不同的存储空间。

使用NumPy中的deepcopy()方法可以进行数组的深复制操作,示例代码如下:

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])

# 这里进行深复制操作
b = np.copy(a)

# 修改b的值
b[0][0] = 99

# 输出a和b
print(a)
print(b)

输出结果为:

[[1 2 3]
 [4 5 6]]
[[99  2  3]
 [ 4  5  6]]

可以看出,对于原始数组a进行了深复制后,修改复制数组b的值也不会影响到原始数组a。这是因为两个数组拥有不同的存储空间和数据。

查看操作

在NumPy数组中,查看操作是指创建一个新的数组视图,它与原始数组共享数据的存储空间,并且可以操作和修改原始数组的数据。因此,在查看操作中,若修改了新数组视图中的值,那么原始数组的数据也会被修改。

使用NumPy中的view()方法可以创建数组的新视图,示例代码如下:

import numpy as np

a = np.array([1, 2, 3])
b = a.view()

# 修改b的值
b[0] = 99

# 输出a和b
print(a)
print(b)

输出结果为:

[99  2  3]
[99  2  3]

可以看出,对于原始数组a进行了查看操作后,修改查看数组b的值也会影响到原始数组a。因为两个数组共享数据存储空间。

需要注意的是,当数组进行切片操作时也会进行查看操作,示例代码如下:

import numpy as np

a = np.array([1, 2, 3, 4])
b = a[1:3]

# 修改b的值
b[0] = 99

# 输出a和b
print(a)
print(b)

输出结果为:

[ 1 99  3  4]
[99  3]

与前面的示例类似,修改切片数组b的值也会影响到原始数组a。

总结来说,当需要对数组进行修改操作时,请谨慎使用NumPy的浅复制和查看操作,尽可能使用深复制操作来创建独立的数组对象。