numpy_matplotlib_scipy使用简明

Numpy小结

0313fancy

1.介绍

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的***维度数组与矩阵运算***,此外也针对数组运算提供大量的数学函数库。

  1. Numerical Python,数值的Python,补充了Python语言所欠缺的数值计算能力。
  2. Numpy是其它数据分析及***机器学习库的底层库。***
  3. Numpy完全标准C语言实现,运行效率充分优化。

相关教程

  1. https://www.numpy.org.cn/user/quickstart.html#%E5%85%88%E5%86%B3%E6%9D%A1%E4%BB%B6
  2. https://www.runoob.com/numpy/numpy-tutorial.html

2.数据结构

2.1 ndarray

NumPy最核心的数据类型是N维数组(The N-dimensional array)

  1. NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
  2. ndarray 对象是用于存放***同类型元素***的多维数组(数组array里的元素的数据类型一般是一样的)
  3. 数组:数组(Array)是有序的元素序列,有限集合.
基本操作
1.数据类型
bool int uint float complex(复数) str datetime
'''
tips:
int8占1个字节(byte) 也就是8个二进制位(bit)
8个二进制位就有2^8 = 256种组合(可以存储256个数)
int8为有符号,所以正数和负数将平分256个数。256 / 2 = 128 负数为128个数 最小值为-128 ,0占一个数 最大值为+127 
无符号int8 0 占一个数 ,所以最大是255
'''
2.创建
from numpy import np
np.array(object,dtype,ndmin)
#object:接收list。表示想要创建的数组。无默认。
#dtype:表示数组所需的数据类型。如果未给定,则选择保存对象所需的最小类型。默认为None
#ndmin:最小维数

#属性 .ndim维度   .shape n行m列(n,m)    .size n*m      .dtype元素类型  

规律创建 np.arange

# 特殊narray
np.arange(起始值(0),终止值,步长(1))
a = np.arange(5)  #默认一维数组01234
arr1 =np.arange(12).reshape(3,4)# 创建二维 3行4列  [[]]

# 全零数组
np.zeros(10)
np.zeros((2,3))# 二维全零数组 2*3

#全一数组
b = np.ones(10)
np.ones((3,4))

随机创建 np.random

import numpy as np
# 随机数模块
# 种子 全局生效 将保持随机值不再变化
np.random.seed(234)

# 0-1之间生成10个随机数 random
print(np.random.random(10))
print(np.random.random((2,3)))# 输出2*3数组

# 标准正态分布的数据 randn
print(np.random.randn(3,3))# 输出3*3数组

# 1-100以内生随机整数 randint
print(np.random.randint(1,100,[5,5]))#输出5*5数组
3.查询
import numpy as np
# 创建一维数组
arr=np.arange(10)
print(arr[3])# 访问单个值 索引访问
# 范围访问 类似切片
print(arr[2:8])#索引2到7
print(arr[8:2:-2])#倒序864
# 数组的修改 切出来直接赋值
arr[2:4]=10,11


# 创建二维数组
arr=np.arange(12).reshape(3,4)
print(arr[0:2,1:3]) #0到1行 1到2列
# 按照列选择数据
print(arr[:,2:4]) #2到3列
print(arr[1][1]) #1行1列单个值
4.统计学操作

排序sort()

"""
tips: axis=1 x轴   axis=0 y轴 (按照x或y轴)
以下函数均是对数组操作
"""
arr.sort()# 修改原数据排序
arr,argsort()# 返回排序之后的索引数组
函数说明
sum数组的和
mean数组均值
std数组 标准差(公式)
var数组 方差
min数组最小值
max数组最大值
argmin最小元素的索引
argmax最大元素的索引
cumsum计算所有元素的累计 和
cumprod计算所有元素的累计 积
标准差通常是相对于样本数据的平均值而定的,表示距离平均值的平均距离
在描述一个波动范围时标准差比方差更方便,方差被标准化了。开根号,统一单位,取名标准差
文件读写
#写入
np.save(“save_arr”,创建的数组名称)
np.savez('savez_arr',arr1,arr2)

#读取
load_data2=np.load("save_arr.npy") 
print(load_data2.files)#查看文件中存了那些数组 返回数组名列表
#以索引方式读取 被存多个数组中 的某一个
arr_data1=load_data2['arr_0']

Scipy小结

1.介绍

Scipy一般都是操控Numpy数组来进行科学计算

模块功能
.cluster矢量量化k均值
.constants物理数学常量
.fttpack傅里叶变换
.integrate积分程序
.interpokate差值
.io数据输入输出
.linalg线性代数
.ndimagen维图像
.ord正交距离回归
.optimize优化
.signal信号处理
.sparse稀疏矩阵
.spatial空间数据结构和算法
.special任何特殊数学函数
.stats统计

参考教程:https://docs.scipy.org/doc/scipy/reference/index.html

2.案例:最小二乘法

least square method

from scipy.optimize import leastsq

leastsq(func, x0, args=(), Dfun=None, full_output=0, col_deriv=0, ftol=1.49012e-08, xtol=1.49012e-08, gtol=0.0, maxfev=0, epsfcn=0.0,factor=100, diag=None)


func 自定义计算误差的函数,指出了待拟合函数的函数形状。

x0 里放的是k、b的初始值,这个值可以随意指定。往后随着迭代次数增加,k、b将会不断变化,使得error函数的值越来越小。

error函数为误差函数,我们的目标就是不断调整k和b使得error不断减小。这里的error函数和神经网络中常说的cost函数实际上是一回事

必须注意一点,传入leastsq函数的参数可以有多个,但必须把参数的初始值p0和其它参数分开放。其它参数应打包到args中。
import numpy as np
from scipy.optimize import leastsq
Xi = np.array([6.19,2.51,7.29,7.01,5.7,2.66,3.98,2.5,9.1,4.2])
Yi = np.array([5.25,2.83,6.41,6.71,5.1,4.23,5.05,1.98,10.5,6.3])
# 定义拟合函数  p传入元组或列表
def func(p,x):
    k,b=p
    return k*x+b
# 定义误差函数  点到拟合直线的 y距离 (直线距离)
def error(p,x,y,s):
    print(s)
    return func(p,x)-y
# 设置初始值
p0=[1,1]
s='test the number of interation'
# 主函数
result=leastsq(error,p0,args=(Xi,Yi,s))
print(result)
k,b=result[0]
print('k=',k,'\n','b=',b)
# 预测x=10,y的值
y=k*10+b
print(y)
y1=np.round(y,2)
print(y1)



# 导入数据可视化
import matplotlib.pyplot as plt
plt.scatter(Xi,Yi,c='g',label='sample')
y_pred=k*Xi+b
plt.plot(Xi,y_pred,c='r',label='line')

#显示图例和图案
plt.legend()
plt.show()

# Matplotlib小结

1.介绍

Matplotlib 是一个 Python 的 绘图库,我们使用matplotlib库中的pyplot模块:

2.基本操作

1.创建画布

import matplotlib.pyplot as plt
plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None)


num 图像编号或名称,数字为编号 ,字符串为名称
figsize 指定figure的宽和高,单位为英寸,1英寸等于2.5cm
dpi 指定绘图对象的分辨率,即每英寸多少个像素
facecolor 背景颜色
edgecolor 边框颜色

将画布分为多个区域,添加子图

figure=plt.figure('图例',figsize=(16,9),dpi=100)
sub1=figure.add_subplot(4, 3, 1)#可以画下12个子图
sub2=figure.add_subplot(4, 3, 2)
#figure.add_subplot(子图总行数, 子图总列数, 子图位置)
#注意:在子图中添加标题要在 添加子图语句 下面写这样才不会乱

#例如
ax1=fig2.add_subplot(2,2,1)
plt.pie(values[0,3:6],labels=label1,autopct="%2.1f%%",explode=explode1)

ax2=fig2.add_subplot(2,2,2)
ax2.pie(values[-1,3:6],labels=label1,autopct="%2.1f%%",explode=explode1)

2.添加内容

添加标题,坐标轴名称,绘制图形等步骤是并列的,没有先后顺序|
添加图例一定要在绘制图形之后

plt.title(s,fontsize,rotation) #设置标题
plt.xlabel(s,fontsize,rotation) #x轴名称
plt.ylabel(s,fontsize,rotation) #y轴名称

plt.xlim()#指定当前图形x轴的范围 xlim((min,max))
plt.ylim()

plt.xticks()#指定x轴刻度的数目与取值
plt.yticks()
#例如
plt.xticks(range(1,70,4),values[range(0,70,4),1],rotation=50)


plt.legend(labels,loc,fontsize) #指定当前图形的图例
#图例的文本标签,位置,字体,
#注意:文本标签应当与绘图的顺序保持一致

3.绘图

3.1 line chart 折线
matplotlib.pyplot.plot() 

#参数
x,y 接收array。表示x轴和y轴对应的数据 #必填

color 接收string。指定线条的颜色b g r c m y k w 
linestyle 指定线条类型。默认为“--- -. :
marker 表示绘制的点的类型,是否绘制数据点
alpha  0-1的小数。表示点的透明度
3.2 scatter chart 散点
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, alpha=None,)

#参数
x,y#必填

s 指定点的大小,若传入一维array则表示每个点的大小。
c 指定点颜色
marker o D h H - 8 p . + * d v x > < $
alpha
3.3 bar chart 柱状
matplotlib.pyplot.bar(left,height,width = 0.8,bottom = None,hold = None,data = None, kwargs )

#参数
left x轴数据#必填
height  代表数据的x轴数据的数量 y#必填

width 0-1之间的float
color


#注意 通过zip + plt.text 给柱子上显示值
           #位置    值
for a,b in zip(range(9),values[-1,6:]):
  plt.text(a,b,'%.1f'%b,ha='center',va='bottom',fontsize=10)
#----------------------------------------------------------

plt.text(x, y, s, fontsize, verticalalignment,horizontalalignment,rotation) 
#参数
x,y表示标签添加的位置,默认是根据坐标轴的数据来度量的。
s表示标签的内容。通常是格式化输出 

verticalalignment表示垂直对齐方式 ,可选 ‘center’ ,‘top’ , ‘bottom’,‘baseline’ 等
horizontalalignment表示水平对齐方式 ,可以填 ‘center’ , ‘right’ ,‘left’ 等

rotation表示标签的旋转角度,以逆时针计算,取整
3.4 pie chart 饼
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None,)


#参数
x 接收array。表示用于绘制的数据#必填
autopct 指定数值的显示方式
labels 接收array。指定每一项的名称。注意顺序!!

explode 接收array。表示指定项离饼图圆心为n个半径
pctdistance 接收float。指定每一项的比例 和距离饼图圆心n个半径
labeldistance 接收float。指定每一项的名称 和距离饼图圆心多少个半径
radius 接收float。表示饼图的半径
color

'''tips
a. %d%%:整数百分比;
b. %0.1f:一位小数;
c. %0.1f%%:一位小数百分比;
d. %0.2f%%:两位小数百分比;
'''

4.保存和显示

plt.savefig(fname)  #保存绘制的图片,路径
plt.show()

3.其他

由于默认的pyplot字体并不支持中文字符的显示,因此需要通过设置font.sans-serif参数改变绘图时的字体,使得图形可以正常显示中文。同时,由于更改字体后,会导致坐标轴中的部分字符无法显示,因此需要同时更改axes.unicode_minus参数。

找到SimHei.ttf文件点击安装。
查看缓存文件在哪里:import matplotlib as mpl
                 mpl,get_cachedir()
清除缓存 rm -r *


plt.rcParams['font.sans-serif'] = 'SimHei' ## 设置中文显示
plt.rcParams['axes.unicode_minus'] = False ## 正常显示负号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值