1. numpy概述
NumPy (Numeric Python) 是 Python 语言的一个扩充程序库,支持大量维度数组与矩阵运算,同时对数组运算提供了大量的数学函数库。NumPy 是 SciPy (Scientific Python) 的核心库之一,使用非常广泛。NumPy 提供了高效的多维数组对象 ndarray,以及用于数组计算的函数和工具。
安装方式:在命令行或者conda控制台输入:pip install numpy
2. ndarray的创建
2.1 列表创建
可以通过 np.array() 方法将列表转换为 ndarray 对象,创建一维数组或二维数组。
import numpy as np
# 创建一维数组
a = np.array([1, 2, 3])
print(a) # 输出: [1 2 3]
# 创建二维数组
b = np.array([[1, 2], [3, 4]])
print(b) # 输出: [[1 2]
# [3 4]]
2.2 零数组和单位数组创建
使用 np.zeros() 方法创建零数组,使用 np.ones() 方法创建单位数组。
# 创建一维零数组
c = np.zeros(3)
print(c) # 输出: [0. 0. 0.]
# 创建二维单位数组
d = np.ones((2, 3))
print(d) # 输出: [[1. 1. 1.]
# [1. 1. 1.]]
2.3 linspace和arange方法创建
使用 np.linspace() 方法创建等差数列数组,使用 np.arange() 方法创建等差数列数组。
2.3.1 linspace方法创建
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 是 numpy 中的函数,用于创建一个一维数组,用于线性的划分指定的区间(起点和终点可以不在数组中呈现)。
start:表示区间的起点。
stop:表示区间的终点。
num:表示区间内生成的点数,默认为50。
endpoint:表示区间终点是否包含在数组中,默认为True。
retstep:表示是否显示区间中两个点的距离。
dtype:表示指定输出数组的类型,常用的如 int、float。
# 生成等差数列数组
e = np.linspace(10, 20, 9)
print(e) # 输出: [10. 11.11111111 12.22222222 13.33333333 14.44444444 15.55555556 16.66666667 17.77777778 18.88888889]
2.3.2 arange方法创建
np.arange([start,] stop[, step,], dtype=None) 是 numpy 中的函数,用于创建一个一维数组,用于线性的划分指定的区间(起点和终点可以不在数组中呈现)。
start:表示区间的起点(包含)。
stop:表示区间的终点(不包含)。
step:表示区间中每个元素的步长,默认为1。
dtype:表示指定输出数组的类型,与 linspace 相同。
# 生成等差数列数组
f = np.arange(10, 20, 2)
print(f) # 输出: [10 12 14 16 18]
3. 数组的基本操作
3.1 数组形状
使用 ndim 属性可以获取数组的维度,shape 属性用于获取数组的形状。
g = np.array([[1, 2], [3, 4], [5, 6]])
print(g.ndim) # 输出: 2
print(g.shape) # 输出: (3, 2)
3.2 索引和切片
使用数组下标可以获取数组的元素,使用切片可以获取数组的子数组。
h = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]])
print(h[2, 1]) # 输出: 6
print(h[:2]) # 输出: [[1 2]
# [3 4]]
print(h[:, 1]) # 输出: [ 2 4 6 8 10]
3.3 运算
数组可以进行数学运算及逻辑运算,支持向量化运算。
3.3.1 数学运算
数组可以进行加减乘除等数学符号运算。
i = np.array([1, 2, 3, 4, 5])
j = np.array([2, 2, 2, 2, 2])
print(i + j) # 输出: [3 4 5 6 7]
print(i - j) # 输出: [-1 0 1 2 3]
print(i * j) # 输出: [ 2 4 6 8 10]
print(i / j) # 输出: [0.5 1. 1.5 2. 2.5]
3.3.2 逻辑运算
数组可以进行逻辑运算。
k = np.array([1, 2, 3, 4, 5])
l = np.array([0, 2, 3, 0, 1])
print(k > 2) # 输出: [False False True True True]
print(k == l) # 输出: [False True True False False]
3.4 常用函数
NumPy 包含了很多用于数学计算的函数库。
3.4.1 多维数组的运算
在二维数组中,可以使用 np.sum() 方法进行求和,np.min() 方法求最小值,np.max() 方法求最大值。
m = np.array([[1, 2], [3, 4], [5, 6]])
print(np.sum(m)) # 输出: 21
print(np.min(m)) # 输出: 1
print(np.max(m)) # 输出: 6
print(np.sum(m, axis=0)) # 输出: [ 9 12]
print(np.sum(m, axis=1)) # 输出: [ 3 7 11]
3.4.2 求平均值和方差
使用 np.mean() 方法可以计算数组元素的平均值,使用 np.var() 方法可以计算数组元素的方差。
n = np.array([1, 2, 3, 4, 5])
print(np.mean(n)) # 输出: 3.0
print(np.var(n)) # 输出: 2.0
3.4.3 数组的掩码操作
使用掩码数组对数组进行过滤,得到符合要求的数组。
o = np.array([1, 2, 3, 4, 5])
mask = np.array([True, False, True, False, True])
print(o[mask]) # 输出: [1 3 5]
4. 实例
生成两个矩阵 a 和 b,对两个矩阵求和后打印结果。
import numpy as np
# 生成两个矩阵
a = np.array([[1, 2], [3, 4], [5, 6]])
b = np.array([[7, 8], [9, 10], [11, 12]])
# 对两个矩阵求和
c = a + b
# 打印结果
print(c)
执行结果为:
[[ 8 10][12 14]
[16 18]]