NumPy 是 Python 语言的一个扩充程序库。支持大量高维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。机器学习涉及到大量对数组的变换和运算,NumPy 就成了必不可少的工具之一。
基础部分
1. 导入 NumPy
练习 NumPy 之前,首先需要导入 NumPy 模块,并约定简称为 np。
教学代码:
import numpy as np
2. 查看 NumPy 版本信息
print(np.__version__)
创建数组
NumPy 的主要对象是多维数组 Ndarray。在 NumPy 中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。
例如,下方数组是一个秩为 1 的数组,因为它只有一个轴,而轴的长度为 3。
[1, 2, 3]
又例如,下方数组的秩为 2。第一个维度长度为 2,第二个维度长度为 3。
[[1., 2., 3.],
[4., 5., 6.]]
3. 通过列表创建一维数组
注意:numpy.array 和 Python 标准库 array.array 并不相同,前者更为强大,这也就是我们学习 NumPy 的重要原因之一。
np.array([1, 2, 3])
4. 通过列表创建二维数组
np.array([(1, 2, 3), (4, 5, 6)])
5. 创建全为 0 的二维数组
np.zeros((3, 3))
6. 创建全为 1 的三维数组
np.ones((2, 3, 4))
注意:务必想清楚上面 4 个数组的维度关系
7. 创建一维等差数组
np.arange(5)
8. 创建二维等差数组
np.arange(6).reshape(2, 3)
9. 创建单位矩阵(二维数组)
np.eye(3)
10. 创建等间隔一维数组
np.linspace(1, 10, num=6)
11. 创建二维随机数组
np.random.rand(2, 3)
12. 创建二维随机整数数组(数值小于 5)
np.random.randint(5, size=(2, 3))
13. 依据自定义函数创建数组
np.fromfunction(lambda i, j: i + j, (3, 3))
数组运算
生成一维示例数组
a = np.array([10, 20, 30, 40, 50])
b = np.arange(1, 6)
a, b
14. 一维数组加法运算
a + b
15. 一维数组减法运算
a - b
16. 一维数组乘法运算
a * b
17. 一维数组除法运算
a / b
生成二维示例数组(可以看作矩阵)
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
A, B
18. 矩阵加法运算
A + B
19. 矩阵减法运算
A - B
20. 矩阵元素间乘法运算
A * B
21. 矩阵乘法运算(注意与上题的区别)
np.dot(A, B)
# 如果使用 np.mat 将二维数组准确定义为矩阵,就可以直接使用 * 完成矩阵乘法计算
np.mat(A) * np.mat(B)
22. 数乘矩阵
2 * A
23. 矩阵的转置
A.T
24. 矩阵求逆
np.linalg.inv(A)
数学函数
25. 三角函数
print(a)
np.sin(a)
26. 以自然对数函数为底数的指数函数
np.exp(a)
27. 数组的方根的运算(开平方)
np.sqrt(a)
28. 数组的方根的运算(立方)
np.power(a, 3)
数组切片和索引
29. 一维数组索引
a = np.array([1, 2, 3, 4, 5])
a[0], a[-1]
30. 一维数组切片
a[0:2], a[:-1]
31. 二维数组索引
a = np.array([(1, 2, 3), (4, 5, 6), (7, 8, 9)])
a[0], a[-1]
32. 二维数组切片(取第 2 列)
print(a)
a[:, 1]
33. 二维数组切片(取第 2,3 行)
a[1:3, :]
数组形状操作
生成二维示例数组
a = np.random.random((3, 2))
a
34. 查看数组形状
a.shape
35. 更改数组形状(不改变原始数组)
# reshape 并不改变原始数组
a.reshape(2, 3)
a
36. 更改数组形状(改变原始数组)
# resize 会改变原始数组
a.resize(2, 3)
a
37. 展平数组
a.ravel()
38. 垂直拼合数组
# 生成示例数组
a = np.random.randint(10, size=(3, 3))
b = np.random.randint(10, size=(3, 3))
a, b
np.vstack((a, b))
39. 水平拼合数组
np.hstack((a, b))
40. 沿横轴分割数组
np.hsplit(a, 3)
41. 沿纵轴分割数组
np.vsplit(a, 3)
数组排序
# 生成示例数组
a = np.array(([1, 4, 3], [6, 2, 9], [4, 7, 2]))
a
42. 返回每列最大值
np.max(a, axis=0)
43. 返回每行最小值
np.min(a, axis=1)
44. 返回每列最大值索引
np.argmax(a, axis=0)
45. 返回每行最小值索引
np.argmin(a, axis=1)
数组统计
46. 统计数组各列的中位数
# 继续使用上面的 a 数组
np.median(a, axis=0)
47. 统计数组各行的算术平均值
np.mean(a, axis=1)
48. 统计数组各列的加权平均值
np.average(a, axis=0)
49. 统计数组各行的方差
np.var(a, axis=1)
50. 统计数组各列的标准偏差
np.std(a, axis=0)