numpy基础 学习笔记

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)

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

5 × 3 =