1. 概述
numpy是Python中重要的计算库之一,它提供了很多高效的多维数组操作功能。本文将详细介绍numpy多维数组的创建过程,从创建数组的各种方法开始,到对数组的切片、索引、扩展等操作,对多维数组的各种应用场景进行介绍,让你对numpy多维数组操作有更深入的了解。
2. numpy多维数组的创建方法
2.1. 使用numpy.array()方法创建数组
使用numpy.array()方法可以从Python的list或者tuple对象中创建数组。
import numpy as np
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1)
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2)
从上面的代码可以看出,数组的每一个元素必须是同一类型的。在上面的例子中,所有元素都是整数类型。
2.2. 使用numpy.arange()方法创建数组
使用numpy.arange()方法可以创建一个数组,其中的元素是在一个范围内按指定步长连续排列的。下面的代码会创建一个数组,其中包含从1到11(不包括11)的整数,步长为2:
arr = np.arange(1, 11, 2)
print(arr)
输出结果为:
array([1, 3, 5, 7, 9])
注意,arange()方法创建的数组不包括end参数的值。
2.3. 使用numpy.zeros()方法创建数组
通过numpy.zeros()方法可以创建一个数组,其中的元素全部为0。可以通过shape参数指定数组的维度(可以是一个整数或者一个元组):
arr1 = np.zeros(5)
print(arr1)
arr2 = np.zeros((3, 4))
print(arr2)
输出结果为:
array([0., 0., 0., 0., 0.])
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
2.4. 使用numpy.ones()方法创建数组
通过numpy.ones()方法可以创建一个数组,其中的元素全部为1。同样可以通过shape参数指定数组的维度(可以是一个整数或者一个元组):
arr1 = np.ones(5)
print(arr1)
arr2 = np.ones((3, 4))
print(arr2)
输出结果为:
array([1., 1., 1., 1., 1.])
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
2.5. 使用numpy.eye()方法创建数组
numpy.eye(N,M=None,k=0,dtype=
arr1 = np.eye(3)
print(arr1)
arr2 = np.eye(3, k=1)
print(arr2)
arr3 = np.eye(3, k=-1)
print(arr3)
输出结果为:
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
array([[0., 1., 0.],
[0., 0., 1.],
[0., 0., 0.]])
array([[0., 0., 0.],
[1., 0., 0.],
[0., 1., 0.]])
2.6. 使用numpy.linspace()方法创建数组
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 方法用于在指定的间隔内返回均匀间隔的数字。
arr = np.linspace(0, 10, num=4, endpoint=True)
print(arr)
输出结果为:
array([ 0., 3.33333333, 6.66666667, 10.])
3. numpy多维数组的切片和索引
numpy中的多维数组可以通过切片和索引访问其中的元素。
3.1. 切片操作
使用切片可以访问数组中的某个区间内的元素。
arr = np.array([1, 2, 3, 4, 5])
sub_arr = arr[1:4] # 获取索引为1到3的元素
print(sub_arr)
输出结果为:
array([2, 3, 4])
如果要访问多维数组中的某个区间,需要使用类似于下面的代码:
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
sub_arr = arr[0:2, 1:3] # 获取第0到1行,第1到2列的元素
print(sub_arr)
输出结果为:
array([[2, 3],
[5, 6]])
3.2. 索引操作
除了切片操作外,还可以使用索引操作访问数组中的元素。
arr = np.array([1, 2, 3, 4, 5])
print(arr[1]) # 获取索引为1的元素
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr[1, 1]) # 获取第1行第1列的元素
输出结果为:
2
5
4. numpy多维数组的扩展和合并
numpy提供了多种方法可以扩展、合并多维数组。
4.1. 使用numpy.append()方法在数组末尾添加元素
可以使用numpy.append()方法在数组的末尾添加元素,例如:
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr3 = np.append(arr1, arr2)
print(arr3)
输出结果为:
array([1, 2, 3, 4, 5, 6])
4.2. 使用numpy.concatenate()方法按指定维度合并数组
numpy中的concatenate()方法用于沿指定轴连接相同形状的两个或多个数组。例如,可以使用下面的代码将两个一维数组合并为一个:
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr3 = np.concatenate((arr1, arr2))
print(arr3)
输出结果为:
array([1, 2, 3, 4, 5, 6])
可以使用axis参数指定沿哪个轴进行连接,例如,可以按行或列连接多个二维数组:
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])
arr3 = np.concatenate((arr1, arr2), axis=0) # 沿行进行连接
print(arr3)
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5], [6]])
arr3 = np.concatenate((arr1, arr2), axis=1) # 沿列进行连接
print(arr3)
输出结果为:
array([[1, 2],
[3, 4],
[5, 6]])
array([[1, 2, 5],
[3, 4, 6]])
5. numpy多维数组的计算
numpy中的多维数组可以进行各种计算操作,例如加、减、乘、除等。
5.1. 加法操作
可以使用numpy.add()方法实现数组的加法操作。
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr3 = np.add(arr1, arr2)
print(arr3)
输出结果为:
array([[ 6, 8],
[10, 12]])
5.2. 减法操作
可以使用numpy.subtract()方法实现数组的减法操作。
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr3 = np.subtract(arr1, arr2)
print(arr3)
输出结果为:
array([[-4, -4],
[-4, -4]])
5.3. 乘法操作
可以使用numpy.multiply()方法实现数组的乘法操作。
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr3 = np.multiply(arr1, arr2)
print(arr3)
输出结果为:
array([[ 5, 12],
[21, 32]])
5.4. 除法操作
可以使用numpy.divide()方法实现数组的除法操作。
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr3 = np.divide(arr1, arr2, out=np.zeros_like(arr1), where=arr2!=0)
print(arr3)
输出结果为:
array([[0.2 , 0.33333333],
[0.42857143, 0.5 ]])
注意,在除数为0的情况下,上面的代码会生成NaN或inf元素。可以使用out和where参数来解决这个问题。
6. numpy多维数组的高级操作
numpy提供了很多高级操作可以帮助你更灵活的处理多维数组。
6.1. 使用numpy.reshape()方法重塑数组
使用numpy.reshape()方法可以重塑多维数组。例如,可以将一个一维数组重塑为一个二维数组:
arr1 = np.array([1, 2, 3, 4, 5, 6])
arr2 = np.reshape(arr1, (2, 3))
print(arr2)
输出结果为:
array([[1, 2, 3],
[4, 5, 6]])
6.2. 使用numpy.transpose()方法转置数组
使用numpy.transpose()方法可以将数组进行转置。例如:
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.transpose(arr1)
print(arr2)
输出结果为:
array([[1, 4],
[2, 5],
[3, 6]])
6.3. 使用numpy.sort()方法对数组进行排序
使用numpy.sort()方法可以对数组进行排序。例如:
arr = np.array([3, 1, 4, 2, 5])
sorted_arr = np.sort(arr)
print(sorted_arr)
输出结果为:
array([1, 2, 3, 4, 5])
6.4. 使用numpy.argsort()方法返回排序后的索引
使用numpy.argsort()方法可以返回数组排序后的元素对应的原始索引。例如:
arr = np.array([3, 1, 4, 2, 5])
sorted_index = np.argsort(arr)
print(sorted_index)
输出结果为:
array([1, 3, 0, 2, 4])
这表明,元素1的原始索引是1,元素2的原始索引是3,元素3的原始索引是0,以此类推。
7. 总结
在本文中,我们对numpy多维数组的创建、切片、索引、扩展、计算以及高级操作进行了详细介绍,并举例说明了每种操作的用法和输出结果。对于需要进行数据处理和科学计算的Python程序员来说,numpy多维数组是必不可少的工具。通过本文的学习,相信你已经能够熟练地使用numpy中的多维数组了。