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数组中的复制和查看的完整攻略,希望对您有所帮助。