机器学习三剑客之Nump

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)

 

posted @ 2018-06-20 15:21  Sgoyi  阅读(881)  评论(0编辑  收藏  举报