NumPy数组中的复制和查看

  • Post category:Python

介绍:

NumPy是一个Python程序库,用于处理大型多维数组和矩阵。同样的,NumPy中的数组又分为两类:复制数组和查看数组。复制数组会创建数组副本,对副本进行修改不影响原数组;查看数组不会创建副本,而是返回原数组的视图,对视图进行修改将影响原数组。深入了解这两种数组类型,对于NumPy应用非常重要。

一、复制数组

  1. 通过.copy()方法

使用.copy()方法可以创建新的数组副本。在复制过程中,会将原始数组所有的属性以及元素值复制到副本中。以下示例展示如何使用copy方法来创建新的数组副本:

import numpy as np

# 创建原始数组 a
a = np.array([[1, 2, 3], [4, 5, 6]])

# 使用copy()方法创建 b 数组副本
b = a.copy()

# 修改 b 数组
b[0][0] = 100

print("a:", a)
print("b:", b)

输出结果为:

a: [[1 2 3]
 [4 5 6]]
b: [[100   2   3]
 [  4   5   6]]

由此可以看出,通过copy()方法创建的数组副本是独立的副本,对副本进行修改不会影响原数组。

  1. 通过np.copy()方法

使用np.copy()方法同样可以实现创建新的数组副本。这种方法复制的原理与上述copy()方法类似,只不过这种方法更灵活,可以设置复制的范围,更加灵活。以下示例展示如何使用np.copy()方法来创建新的数组副本:

import numpy as np

# 创建原始数组 a
a = np.array([[1, 2, 3], [4, 5, 6]])

# 使用np.copy()方法创建 b 数组副本
b = np.copy(a)

# 修改 b 数组
b[0][0] = 100

print("a:", a)
print("b:", b)

输出结果为:

a: [[1 2 3]
 [4 5 6]]
b: [[100   2   3]
 [  4   5   6]]

同样,np.copy()方法创建的数组副本也是独立的副本。

二、查看数组

  1. 通过np.view()方法

使用np.view()方法可以创建新的数组视图,该视图不会创建新的数组,而是返回原数组的视图。这意味着,原数组和视图数组共享相同的数据内存块,对视图进行修改也会影响原数组,下面是一个简单的例子:

import numpy as np

# 创建原始数组 a
a = np.array([[1, 2, 3], [4, 5, 6]])

# 创建视图数组 b,与a共享相同的数据内存块
b = a.view()

# 修改 b 数组
b[0][0] = 100

print("a:", a)
print("b:", b)

输出结果为:

a: [[100   2   3]
 [  4   5   6]]
b: [[100   2   3]
 [  4   5   6]]

由此可见,视图存在于原数组的数据内存块中,修改视图也会对原数组造成影响。

  1. 通过np.ndarray.view()方法

除了np.view()方法之外,我们还可以使用np.ndarray.view()方法来创建数组的视图。以下是一个简单的例子:

import numpy as np

# 创建原始数组 a
a = np.array([[1, 2, 3], [4, 5, 6]])

# 创建视图数组 b,与a共享相同的数据内存块
b = a.view(np.float32)

# 修改 b 数组
b[0][0] = 100.0

print("a:", a)
print("b:", b)

输出结果为:

a: [[ 1  2  3]
 [ 4  5  6]]
b: [[ 100.    2.    3.]
 [  4.    5.    6.]]

从输出结果中可以看到,通过np.float32参数设置了视图数组的数据类型,从而创建了一个浮点数类型的视图数组。修改视图数据后,原数组同样受到了影响。

总结:

通过上述两种方式,我们可以灵活地对NumPy中的数组进行复制和查看。复制会创建新的数组副本,而查看可以返回原数组的视图,实现不同结果的计算和处理,更加高效。