假期感觉真的热死了,在家一点都不想出去,拿出键盘,又看了看手机,两者难以选着...最后还是选着来敲键盘,因为这里承载着我的兴趣和爱好,简单地说就是梦想,看着别人去打暑假工了,我也不知道在家敲键盘以后有没有用,反正这都是以后的事了,算了不想了,开始这一个笔记的整理吧。
一、Scipy介绍
Scipy提供了科学计算功能,如线性代数,优化,积分、差值、信号处理等,没错,他也是和numpy有关,他是基于numpy创造的。
二、使用步骤
1.引入库
他有很多的数学包,一般我们引进的时候都是
代码如下(示例):
from scipy import 数学包
2.文件读写
刚在书上看到python的这个包可以导出Matlab的.mat文件,我在想是不是python和Matalib可以交互,但是我暂时对Matlab还没有研究过,过几去看看。
他们的实例代码如下
from scipy import io as spio
import numpy as np
a = np.arange(10)
spio.savemat('a.mat',{'a':a})
data = spio.loadmat('a.mat',struct_as_record = True)
print(data)
out:
{'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Tue Jul 12 07:47:29 2022', '__version__': '1.0', '__globals__': [], 'a': array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
这输出了一堆信息啊,不过看着好像用处不大啊,算了算了,应该是对Matalib的了解不够写完这篇文章就去下个Matlib看看。
3.线性代数的运算
在SciPy中,线性代数的运算使用的是scipy.linalg,numpy和numpy都提供了这个库,但Scipy更为全面。
刚看了一下书,感觉书上讲的有点浅对于这个库,于是我又去百度了一下,俗话说得好不会就问度量。
3.1 线性方程的求解
scipy.linalg.solve 函数可用于解线性方程。例如,对于线性方程a * x + b * y = z,求出未知数x, y值。这里去网站教程里看了一下,整理了一下他的东西。有不理解的可以直接去原网站看,毕竟大佬写的还是挺好的。
解下列三元一次方程,这看着手算也可以,但如果是多元多次了,那肯定不能用手算,毕竟咱们学python的可不吃这亏。
我们学了线性代数的小伙伴都知道这个方程可以用一个矩阵的形式表示,当然我们为啥要用矩阵了,当然是提高效率啦,如果学过的同学都知道,用程序解方程也可以暴力穷举,但好耗时间的,对于我们来说时间就是金钱。上面方程组,用矩阵表示如下:
然后再用矩阵解下列方程组:
是不是感觉有点像我们小学学的一元一次方程了,我就感觉矩阵就是一个降维运算的过程,当然我是随口说的,那我们在来看一下python的实现吧
from scipy import linalg
import numpy as np
a = np.array([[1,3,5],[2,5,1],[2,3,8]])
b = np.array([10,8,3])
#求解
x = linalg.solve(a,b)
print(x)
out:
[-9.28 5.16 0.76]
当然这个库除了解方程还可以求解行列式,特征值,和特征向量之类的,想着现在也用不着,也就先不整理了,需要的小伙伴去网址查看。我在后面写数学建模算法基础的时候的专栏在整理在全面整理一下。
3.2 Scipy的优化和拟合
我感觉对于算法优化和拟合还是挺重要的,想我的老师就经常说这各种各样的算法,但网上的教程感觉还是挺杂乱的,于是我就跑去官网看看,当然全是是英文的,对于英文不好的我,只好翻译翻译了。看着眼花。有需要的小伙伴去看一看。
这里给大家用他里面的暴力穷举法写个实例:
form scipy import optimize
import matplotlib.pyplot as plt
def f(x):
return x**2 + 20*np.sin(x)
x = np.arange(-10,10,0.1)
plt.plot(x,f(x))
plt.show()
grid = (-10,10,0.1)
x_min = optimize.brute(f,(grid,))
print(x_min)
这里好奇怪,给我报了一个空格格式不对,我重新输入空格又好了。
out:
[-1.42754883]
注:当数据很大时穷举法速度就会很慢。
4.统计和随机数
这里先暂时不写,在后面用到统计工具的时候在细聊。
总结
以上就是今天整理的小部分知识,本文仅仅简单介绍了Scipy的一些基本使用,但实际scipy的功能还是挺多的,我们先在这里初步认识一下有这个东西。后面需要用到哪个函数和方法的时候在返回来,打开官网,一键学习调用。