栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【python-NOJ-季总结】—【第九季:Scipy库】—矩阵压缩,插值,数值积分

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【python-NOJ-季总结】—【第九季:Scipy库】—矩阵压缩,插值,数值积分

本章主要介绍scipy库的相关知识。

比如矩阵的压缩(csr_matrix)有两种创建方式,数值积分(integrate定积分),插值等功能。

scipy库可以进行插值,积分,求解微分方程,拟合与优化等。

目录

1. 矩阵压缩成稀疏矩阵csr_matrix

2. 使用interpolate插值

3. 利用integrate计算积分


1. 矩阵压缩成稀疏矩阵csr_matrix

分为两种创建方式:

(1)三个参数为row,col和data三个一维数组;

(2)三个参数为indptr,data和indics三个一维数组;

第一种:
matrix=csr_matrix((data,(row,col)),shape=(3,3))
第二种:
matrix=csr_matrix((data,indices,indptr),shape=(3,3))

第一种示例:

from scipy.sparse import *
row=[0,2,1,0]
col=[0,1,1,2]
data=[4,2,3,6]
array=csr_matrix((data,(row,col)),shape=(3,3))
print(array)
print(array.toarray())

输出:
(0, 0)	4
(0, 2)	6
(1, 1)	3
(2, 1)	2
[[4 0 6]
 [0 3 0]
 [0 2 0]]

第二种实例:

 关于数据解释:

indptr参数:0表示默认起始点,0之后有几个数字就表示有几行数据。每一行的数据个数为后一个减去前一个的差值。第一个数字2表示第一行有2-0=2个数字,即1和2;第二行有3-2=1个数字,即3;第三行有6-3=3个数字,即4,5,6。

indices:表示 各个数据在各行的下标,也就是列的标号, 从该数据我们可以知道:数据1在某行的0位置处, 数据2在某行的2位置处,6在某行的2位置处。 显然,我们从indptr参数能得到行号。

2. 使用interpolate插值

此处使用两种插值方法:线性插值和三次样条插值。

其中新的x轴坐标都是自己设置的均匀个数坐标,y轴是根据函数生成的插值坐标。

import numpy as np
from scipy import interpolate

x=np.linspace(0,10*np.pi,num=20)
y=np.cos(x)

xnew=np.linspace(0,10*np.pi,num=500)

f1=interpolate.interp1d(x,y,kind='slinear') #线性插值
y1=f1(xnew)
# plt.plot(xnew,y1,'g')

ipo3=interpolate.splrep(x,y,k=3) # 三次样条插值
y2=interpolate.splev(xnew,ipo3)
# plt.plot(xnew,y2,'b')

3. 利用integrate计算积分

integrate模块提供了好几种数值积分的方法,包括:

  • quad() - 一元定积分
  • dblquad() - 二元定积分
  • triquad() - 三元定积分
  • odeint() - 计算常微分方程组的数值解

传入参数为函数和积分上下限,返回参数为积分结果(即面积)和误差。函数需要写一个def实现。

下面为计算一元积分的例子。

from scipy import integrate
def func(x):
    # print("x=",x)       #用于展示quad()函数对func的多次调用
    return x+1
area,err=integrate.quad(func,0,3)

具体可参考:Python求解数值积分-定积分求解 - 知乎 (zhihu.com)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/619102.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号