【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)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值