NumPy数组中的复制和查看

  • Post category:Python

NumPy是Python中的一种科学计算库,提供了很多高效的数组操作。在NumPy中,无论是复制还是查看数组,都是非常常用的操作。但是,复制和查看数组的方式却又有很多种,这就需要我们详细讲解NumPy数组中的复制和查看的完整攻略,下面将针对这两者具体介绍。

复制数组

在NumPy中,我们可以使用copy()函数或者数组的视图操作完成复制数组的操作。

使用copy()函数

在NumPy中,可以使用copy()函数实现数组的复制操作。例如,我们有一个一维数组:

import numpy as np

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

现在我们要将arr1数组复制给arr2数组,可以使用copy()函数,示例如下:

arr2 = arr1.copy()

此时,arr1和arr2两个数组已经没有关联了,对于arr2的任何操作都不会影响到arr1。示例代码:

arr1 = np.array([1, 2, 3, 4, 5])
arr2 = arr1.copy()
arr2[0] = 6
print("arr1:", arr1)  # [1 2 3 4 5]
print("arr2:", arr2)  # [6 2 3 4 5]

可以看到,修改arr2的第一个元素并不会影响到arr1,两个数组是独立的。

视图操作

除了使用copy()函数,NumPy还提供了可以返回视图而非复制的许多操作,例如:

  • 数组的切片操作是一种视图操作。
  • reshape()函数返回一个新的数组对象,但是数组数据的引用仍然指向原始数组数据。

下面以数组切片操作为例,示例代码如下:

arr1 = np.array([1, 2, 3, 4, 5])
arr2 = arr1[2:4]
arr2[0] = 6
print("arr1:", arr1)  # [1 2 6 4 5]
print("arr2:", arr2)  # [6 4]

可以看到,修改arr2的第一个元素会影响到原数组arr1。因此,需要谨慎使用视图操作。

查看数组

在NumPy中,有多种方式可以查看数组。常用的方式如下:

ndarray.view()函数

ndarray.view()函数返回一个新的数组对象,它和原数组共享同一数据缓存区,但是可以使用不同的数据类型和/或形状来查看同一数据。简单的说,它是一个新的数组对象,但是数据的来源和源数组是相同的。

示例代码如下:

arr1 = np.array([1, 2, 3, 4, 5])
arr2 = arr1.view(dtype=np.int16)
print("arr1:", arr1)
print("arr2:", arr2)

运行结果:

arr1: [1 2 3 4 5]
arr2: [1 2 3 4 5]

可以看到,arr2是一个新的数组,但是数据的来源是arr1数组。这种查看方式可以节省内存空间。

ndarray.flatten()函数

ndarray.flatten()函数是将一个多维数组转成一维数组的函数,返回的是一个一维数组。

示例代码如下:

arr1 = np.array([[1, 2], [3, 4], [5, 6]])
arr2 = arr1.flatten()
print("arr1:", arr1)
print("arr2:", arr2)

运行结果:

arr1: [[1 2]
 [3 4]
 [5 6]]
arr2: [1 2 3 4 5 6]

可以看到,arr2是一个一维数组,它的数据来源是arr1数组。

以上就是关于NumPy数组中的复制和查看的完整攻略,希望对您有所帮助。