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)