目录
数据科学库
数值计算 | Numpy |
科学计算 | Scipy |
数据分析 | Pandas |
数据挖掘 | sklearn |
绘图库 | Matplotlib |
Numpy官网
Numpy
创建数组
#任意数组 a=np.array([[1,2,3,4],[5,6,7,8],[9,1,2,3]])
内置函数创建数组
a=np.array([[1,2,3,4],[5,6,7,8],[9,1,2,3]]) #将数组变回list a1.tolist() #根据尺寸创建新的数组,如上面数组为3*4可以变成2*6 a2.reshape((2,6)) #指定步长 np.arange(0,1,0.1) #等差数列 np.linspace(0,1,10) #等比数列 np.logspace(0,2,10) #全为一或零 np.zeros((2,3)) np.ones((2,3)) #单位矩阵 np.identity(4) #随机的二维数组 a = np.random.randint(0,10,size=[3,3]) #对角线指定方阵 np.diag([1,2,3,4]) #均匀分布 #左闭右开 a1=np.random.uniform(-1,1,10000)
函数创建法
#函数生成 def f(i,j):return i-j np.fromfunction(f,(4,4)) >>> [[ 0. -1. -2. -3.] [ 1. 0. -1. -2.] [ 2. 1. 0. -1.] [ 3. 2. 1. 0.]] #二维数组创建 a=np.array([range(10*i,10*i+6) for i in range(6)]) a >>> [[ 0 1 2 3 4 5] [10 11 12 13 14 15] [20 21 22 23 24 25] [30 31 32 33 34 35] [40 41 42 43 44 45] [50 51 52 53 54 55]] #三维数组创建 a=np.array([[range(10*i+j,10*i+j+3) for i in range(2)]for j in range(3)]) a >>> [[[ 0 1 2] [10 11 12]] [[ 1 2 3] [11 12 13]] [[ 2 3 4] [12 13 14]]]
随机数与随机抽样
函数 |
功能说明 |
rand(d0, d1, ..., dn) |
返回给定形状的0~1随机值样本 |
randn(d0, d1, ..., dn) |
返回给定形状且服从标准正态分布的随机值样本 |
randint(low[, high, size]) |
返回随机的整数,位于半开区间 [low, high) |
random_integers(low[, high, size]) |
返回随机的整数,位于闭区间 [low, high] |
random_sample([size]) |
返回随机的浮点数,在半开区间 [0.0, 1.0) |
random([size]) |
返回随机的浮点数,在半开区间 [0.0, 1.0) |
ranf([size]) |
返回随机的浮点数,在半开区间 [0.0, 1.0) |
sample([size]) |
返回随机的浮点数,在半开区间 [0.0, 1.0) |
choice(a[, size, replace, p]) |
生成一个随机样本,从一个给定的一维数组 |
bytes(length) |
返回随机字节 |
#随机抽样,打乱自身内容 #改变自身内容 a1=np.arange(10) np.random.shuffle(a1) #不改变自身内容 a1=np.arange(10) np.random.permutation(a1)
函数 |
功能说明 |
normal([loc, scale, size]) |
正态(高斯)分布 |
poisson([lam, size]) |
泊松分布 |
uniform([low, high, size]) |
均匀分布 |
binomial(n, p[, size]) |
二项分布 |
chisquare(df[, size]) |
卡方分布 |
exponential([scale, size]) |
指数分布 |
geometric(p[, size]) |
几何分布 |
索引
下标切片法
编辑
整数序列法
a=np.arange(10,1,-1) b=a[3:5] c=a[[3,3,4]]
布尔数组法
编辑
使用函数+布尔数组法改变元素数值
编辑
数组空间共享问题
切片方式共享原数组,数组元素、布尔索引不共享原数组
import numpy as np a=np.array([1,2,3,4,5,6]) a[-2:-1]=np.array([1]) print(a)
二维数组
编辑
编辑
Axis
根据行列来进行计算
a=np.array([range(10*i,10*i+6) for i in range(6)]) #整个矩阵进行求和,最大值,最小值,平均值,标准差 np.sum(a) np.max(a) np.min(a) np.mean(a) np.std(a) #根据列来进行计算 np.sum(a,axis=0) #根据行来进行计算 np.sym(a,axis=1)
ufunc
对数组每个元素进行操作的内置函数
a=[1,2,3] b=[4,5,6] #5次方 np.power(a,5) #根号 np.sqrt(a) #取自然数为底数 np.exp(a) #ln np.log(a) #向下取整 np.floor(a) #向上取整 np.ceil(a) #四舍五入 np.round(a) #三角函数 np.sin(a) np.arcsin(a) #加减乘除 a+b a-b a*b a/b a**b a//b
自定义ufunc
就是自己定义一个普通的函数,然后把它加入到 frompyfunc函数中,如下例子,2是输入参数的个数,1是输出参数的个数
def myadd(x, y): return x+y myadd = np.frompyfunc(myadd, 2, 1) print(myadd([1, 2, 3, 4], [5, 6, 7, 8]))
SORT
a=np.array([[1,2,3],[6,5,6],[4,2,4],[2,5,3]]) print(np.sort(a))#最后一维,也就是最里面括号 print(np.sort(a,axis=0))#第一维,也就是最外面的括号 print(np.sort(a,axis=None))#所有元素排列,也就是变成一维 print(np.argsort(a,axis=0))#排序后下标的位置
数组存取于文件中
a=np.arange(30).reshape(2,3,5) #将数组存入到文件中 np.save('a.npy',a,fmt="%d",delimiter=',') #将数组压缩到文件中 np.savez('a.npz',a) #将数组从文件中读取出来 b=np.load('a.npy')
Scipy
是什么?建立于Numpy基础之上的提供很多科学计算算法的库
官方文档
SciPy API — SciPy v1.8.0 Manual
#特有对象series #是什么?--字典 s=
Pandas
是什么?建立于Numpy基础之上的提供很多数据分析功能的库
官方文档
pandas - Python Data Analysis Library (pydata.org)
最重要的两个数据格式
Series:一维序列,就是一个定长的有序字典,每一个对象有index和values属性
DataFrame:二维表结构
Series
#初始化--无index s=Series([1,2,3,'abc']) >>>s 0 1 1 2 2 3 3 abc #初始化--有index s=Series(index=['a','b','x','y'],data=['A',1,2,3])
DataFrame
from pandas as pd #初始化 -->先创建一类字典类型,后使用DataFrame函数 data=({'性别':['男','女','女','男','男'], '姓名':['小明','小红','小芳','大黑','张三'], '年龄':[20,21,25,24,29]}) df=pd.DataFrame(data) >>> 性别 姓名 年龄 0 男 小明 20 1 女 小红 21 2 女 小芳 25 3 男 大黑 24 4 男 张三 29 #获取index和values df.index() df.values() #切片 df[:'c']
Sklearn
是什么?~提供很多数据挖掘工具的库
官方文档
绘图
Matplotlib
ScSciPyPy
SciPyS