1. Python numpy基础简介
NumPy是Python的一个开源科学计算库,它包含了一个强大的N维数组对象和用于数组运算的各种函数。NumPy主要是由一个多维数组(ndarray)对象构成,而在这个对象上完成各种各样的计算。使用NumPy,可以大大地提高Python计算的效率。在使用前,首先需要导入NumPy包,import numpy。
ndarray对象:NumPy中最核心的对象,即N维数组,它是一个具有独立数据类型和大小的同类数据容器。
下方代码是创建一个ndarray对象的例子:
import numpy as np
a = np.array([1, 2, 3])
print(a)
输出结果为:
[1 2 3]
2. 创建数组
2.1 创建一维数组
在NumPy中,可以通过不同的函数来创建一维数组,如下所示:
import numpy as np
a = np.array([1, 2, 3])
b = np.arange(10)
c = np.linspace(0, 1, num=5, endpoint=False)
d = np.zeros(3)
e = np.ones(3)
其中,np.array()函数用于根据普通的Python列表创建一个ndarray对象。
np.arange()函数用于创建一个一维数组,数组的元素是从0到给定整数的序列,步长为1。
np.linspace()函数用于创建指定长度的等差数列,可以指定初始值、终止值和元素个数。
np.zeros()函数用于创建一个指定长度全为0的一维数组。
np.ones()函数用于创建一个指定长度全为1的一维数组。
2.2 创建二维数组
类似于创建一维数组,我们可以使用上述函数来创建二维数组,如下所示:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.arange(12).reshape(3, 4)
c = np.zeros((2, 3))
d = np.ones((2, 4))
其中,np.array()函数同样可以用于创建二维数组。
np.arange()函数可以创建一个二维数组,但需要使用reshape()函数来改变数组的形状。
np.zeros()函数同样可以用于创建二维数组,需要传递元组作为参数表示数组的形状。
np.ones()函数同样可以用于创建二维数组,需要传递元组作为参数表示数组的形状。
3. 数组操作
3.1 数组形状操作
数组维度:NumPy中一维数组的形状为(n,),二维数组的形状为(n,m),三维数组的形状为(n,m,k),以此类推。
可以通过ndarray对象的shape属性来检查数组的维度,使用reshape()函数来改变数组的形状,如下所示:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape)
b = a.reshape(3, 2)
print(b)
输出结果为:
(2, 3)
[[1 2]
[3 4]
[5 6]]
可以看到,原来形状为(2, 3)的数组经过reshape()函数的改变后变成了形状为(3, 2)的数组。
3.2 数组轴操作
数组轴:NumPy中的轴是表示数组的维度的对象,对于二维数组,轴0表示行,轴1表示列。
在NumPy中,对于一维数组,可以使用reshape()函数来改变它的形状,但对于多维数组,改变它的形状可能会导致数据在轴方向上的混淆,因为轴的方向不能改变。在这种情况下,我们可以使用transpose()函数对数组的轴进行交换。
下方代码是对一个二维数组的轴进行交换的例子:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.transpose()
print(b)
输出结果为:
[[1 4]
[2 5]
[3 6]]
最终得到的数组会将原数组的轴0和轴1互换,即原来的第一行变成了第一列,原来的第二行变成了第二列。
3.3 数组加、减、乘、除、矩阵乘法
NumPy中的数组加、减、乘、除、矩阵乘法等运算可以直接对数组执行,如下所示:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = a + b
d = a - b
e = a * b
f = a / b
g = np.dot(a, b)
其中,+表示数组加法,-表示数组减法,*表示数组乘法,/表示数组除法,np.dot()函数表示矩阵乘法,使用时需要传递两个数组作为参数。
4. 数组索引和切片操作
4.1 数组索引
在NumPy中,可以使用下标操作来获取一个数组的元素,如下所示:
import numpy as np
a = np.array([1, 2, 3])
print(a[0])
输出结果为:
1
对于二维数组,可以通过下标操作来获取指定位置的元素,如下所示:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a[1, 1])
输出结果为:
5
可以看到,a[1,1]表示获取第二行第二列的元素。
4.2 数组切片
对于一维数组,可以使用切片操作来获取一个数组的子数组,如下所示:
import numpy as np
a = np.array([1, 2, 3, 4, 5])
print(a[1:4])
输出结果为:
[2 3 4]
可以看到,a[1:4]表示获取从下标为1的元素到下标为3的元素(不包括下标为4的元素)的子数组。
对于二维数组,可以使用切片操作来获取一个数组的子数组,如下所示:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a[:, 1:])
输出结果为:
[[2 3]
[5 6]]
可以看到,a[:,1:]表示获取第二列及以后的所有元素组成的子数组。
5. 数组统计运算
在NumPy中,可以使用各种统计函数来进行数组元素的统计运算,如下所示:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(np.sum(a)) # 数组元素求和
print(np.mean(a)) # 数组元素平均值
print(np.var(a)) # 数组元素方差
print(np.std(a)) # 数组元素标准差
print(np.max(a)) # 数组元素最大值
print(np.min(a)) # 数组元素最小值
print(np.argmax(a)) # 数组元素最大值所在位置
print(np.argmin(a)) # 数组元素最小值所在位置
上述函数可以直接对数组执行,求得相应的统计结果。
6. 总结
本文主要介绍了NumPy中的基本概念和常用操作,包括创建数组、数组操作、数组索引和切片操作、数组统计运算等内容。NumPy具有很强的数据处理能力,可以帮助我们更方便地处理和分析数据。