Numpy基础
NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy内部解除了Python的PIL(全局解释器锁),运算效率极好,是大量机器学习框架的基础库!
Numpy简单创建数组
1 import numpy as np 2 # 创建简单的列表 3 a = [1, 2, 3, 4] 4 # 将列表转换为数组 5 b = np.copy(a)
Numpy查看数组属性
1 #创建一维长度为5,二维长度为5的二维0数组 2 b = np.zeros((5, 5)) 3 # 数组元素类型 4 print(b.dtype) 5 # 数组元素个数 6 print(b.size) 7 # 数组形状 8 print(b.shape) 9 # 数组维度 10 print(b.ndim)
快速创建N维数组的api函数
1 # 创建5行5列的数值为浮点1的矩阵 2 b = np.ones((5,5)) 3 print(b) 4 # 创建10行10列的数值为浮点0的矩阵 5 b = np.zeros((5,5)) 6 print(b)
数组支持深浅拷贝
1 b = np.ones((5,5)) 2 # 浅拷贝 3 c = np.array(b) 4 print(c) 5 # 深拷贝 6 d = np.asarray(b) 7 print(d)
Numpy创建随机数组 np.random
-
均匀分布
1 # 创建指定形状(示例为10行10列)的数组(范围在0至1之间) 2 b = np.random.rand(10, 10) 3 #创建指定范围内的一个数 4 c = np.random.uniform(0, 100) 5 # 创建指定范围内的一个整数 6 d = np.random.randint(0,100) 7 print(d)
-
正态分布
1 # 给定均值/标准差/维度的正态分布 2 b = np.random.normal(1.75, 0.1, (5,5)) 3 print(b)
-
索引,切片
1 # 给定均值/标准差/维度的正态分布 2 b = np.random.normal(1.75, 0.1, (5,5)) 3 print(b) 4 # 数组的索引,截取第1行的第2列(从第0行算起) 5 c = b[1,2] 6 print(c) 7 # 数组的切片,截取第1至2行的第2至3列(从第0行算起) 8 d = b[1:3, 2:4] 9 print(d)
改变数组形状(要求前后元素个数匹配)
1 print("reshape函数的使用!") 2 one_20 = np.ones([20]) 3 print("-->1行20列<--") 4 print (one_20) 5 6 one_4_5 = one_20.reshape([4, 5]) 7 print("-->4行5列<--") 8 print (one_4_5)
Numpy计算(重要)
条件运算
1 b = np.array([[89, 92], [90, 91], [70, 52], [80, 82], [60, 59]]) 2 # 条件判断 3 print(b > 80) 4 # 三元运算,如果成绩小于80,则改为0,否则改为90 5 c = np.where(b < 80, 0, 90) 6 print(c)
统计运算
-
指定轴最大值
amax
(参数1: 数组; 参数2: axis=0/1; 0表示列1表示行)
1 b = np.array([[89, 92], [90, 91], [70, 52], [80, 82], [60, 59]]) 2 # 求每一列的最大值(0表示列) 3 print("每一列的最大值为:") 4 result = np.amax(b, axis=0) 5 print(result) 6 7 print("每一行的最大值为:") 8 result = np.amax(b, axis=1) 9 print(result)
-
指定轴最小值
amin
1 b = np.array([[89, 92], [90, 91], [70, 52], [80, 82], [60, 59]]) 2 print("每一列的最小值为:") 3 result = np.amin(b, axis=0) 4 print(result) 5 6 # 求每一行的最小值(1表示行) 7 print("每一行的最小值为:") 8 result = np.amin(b, axis=1) 9 print(result)
-
指定轴平均值
mean
1 b = np.array([[89, 92], [90, 91], [70, 52], [80, 82], [60, 59]]) 2 3 # 求每一行的平均值(0表示列) 4 print("每一列的平均值:") 5 result = np.mean(b, axis=0) 6 print(result) 7 8 # 求每一行的平均值(1表示行) 9 print("每一行的平均值:") 10 result = np.mean(b, axis=1) 11 print(result)
-
方差
std
1 b = np.array([[89, 92], [90, 91], [70, 52], [80, 82], [60, 59]]) 2 3 # 求每一行的方差(0表示列) 4 print("每一列的方差:") 5 result = np.std(b, axis=0) 6 print(result) 7 8 # 求每一行的方差(1表示行) 9 print("每一行的方差:") 10 result = np.std(b,axis=1) 11 print(result)
数组运算
-
数组与数的运算
1 b = np.array([[89, 92], [90, 91], [70, 52], [80, 82], [60, 59]]) 2 3 print("加分前:") 4 print(b) 5 6 # 为所有平时成绩都加5分 7 b[:, 0] = b[:, 0]+5 8 print("加分后:") 9 print(b)
1 b = np.array([[89, 92], [90, 91], [70, 52], [80, 82], [60, 59]]) 2 3 print("减半前:") 4 print(b) 5 6 # 期末成绩减半 7 b[:, 1] = b[:, 1]*0.5 8 print("减半后:") 9 print(b)
-
数组间也支持加减乘除运算,但基本用不到
1 a = np.array([1, 2, 3, 4]) 2 b = np.array([10, 20, 30, 40]) 3 c = a + b 4 d = a - b 5 e = a * b 6 f = a / b 7 print("a+b为", c) 8 print("a-b为", d) 9 print("a*b为", e) 10 print("a/b为", f)
矩阵运算np.dot()
(非常重要)
-
计算规则
(M行, N列) * (N行, Z列) = (M行, Z列)
b = np.array([[80, 80], [90, 90], [70, 70], [60, 60], [50, 90]]) # 平时成绩占40% 期末成绩占60%, 计算结果 q = np.array([[0.4], [0.6]]) result = np.dot(b, q) print("最终结果为:") print(result)
-
矩阵拼接
- 矩阵垂直拼接(拼接的个数必须一样)
1 print("v1为:") 2 v1 = [[0, 1, 2, 3, 4, 5], 3 [6, 7, 8, 9, 10, 11]] 4 print(v1) 5 print("v2为:") 6 v2 = [[12, 13, 14, 15, 16, 17], 7 [18, 19, 20, 21, 22, 23]] 8 print(v2) 9 # 垂直拼接 10 result = np.vstack((v1, v2)) 11 print("v1和v2垂直拼接的结果为") 12 print(result)
- 矩阵水平拼接
print("v1为:") v1 = [[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11]] print(v1) print("v2为:") v2 = [[12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]] print(v2) # 垂直拼接 result = np.hstack((v1, v2)) print("v1和v2水平拼接的结果为") print(result)