Python必备库------Scipy

目录

         Scipy特征

文件操作io

线性代数操作linalg

梯度下降优化算法

拟合(最小二乘法)

统计检验

插值

求解非线性方程组


方便、易于使用、专为科学和工程设计的Python工具包.它包括统计,优化,整合,线性代数模块,傅里叶变换,信号和图像处理,常微分方程求解器等等。

基本可以代替Matlab,但是使用的话和数据处理的关系不大,数学系,或者工程系相对用的多一些。

Scipy特征

(1)内置了图像处理, 优化,统计等等相关问题的子模块

(2)scipy 是Python科学计算环境的核心。 它被设计为利用 numpy 数组进行高效的运行。从这个角度来讲,scipy和numpy是密不可分的。

文件操作io

(1)导包:from scipy import io as spio

(2)保存mat格式文件

spio.savemat("test.mat", {'a':a})

(3)加载mat文件

data = spio.loadmat("test.mat")

访问值:data[‘a’]–>相当于map

访问值:data[‘a’]–>相当于map

(4)读取图片文件 导包:from scipy import misc 读取:data = misc.imread("123.png")[注1]:与matplotlib中plt.imread('fname.png')类似 [注2]:执行misc.imread时可能提醒不存在这个模块,那就安装pillow的包

线性代数操作linalg

(1)求行列式det res = linalg.det(a)

(2)求逆矩阵inv res = linalg.inv(a) 若是矩阵不可逆,则会抛异常LinAlgError: singular matrix

(3)奇异值分解svd u,s,v = linalg.svd(a) [注1]:s为a的特征值(一维),降序排列, [注2]:a = usv’(需要将s转换一下才能相乘)

t = np.diag(s)
print u.dot(t).dot(v)

梯度下降优化算法

(1)fmin_bfgs

def f(x):
return x**2-2*x
initial_x = 0
optimize.fmin_bfgs(f,initial_x)

[注]:initial_x为初始点(此方法可能会得到局部最小值)

(2)fmin()fmin_cg等等方法

拟合(最小二乘法)

(1)curve_fit

#产生数据
def f(x):
return x**2 + 10*np.sin(x)
xdata = np.linspace(-10, 10, num=20)
ydata = f(xdata)+np.random.randn(xdata.size)
plt.scatter(xdata, ydata, linewidths=3.0, 
       edgecolors="red")
#plt.show()
#拟合
def f2(x,a,b):
return a*x**2 + b*np.sin(x)
guess = [2,2]
params, params_covariance = optimize.curve_fit(f2, xdata, ydata, guess)
#画出拟合的曲线
x1 = np.linspace(-10,10,256)
y1 = f2(x1,params[0],params[1])
plt.plot(x1,y1)
plt.show()

统计检验

(1)T-检验stats.ttest_ind

a = np.random.normal(0, 1, size=10)
b = np.random.normal(1, 1, size=10)
print stats.ttest_ind(a, b)

输出:(-2.6694785119868358, 0.015631342180817954) 后面的是概率p: 两个过程相同的概率。如果其值接近1,那么两个过程几乎可以确定是相同的,如果其值接近0,那么它们很可能拥有不同的均值。

插值

(1)导入包:from scipy.interpolate import interp1d

#产生一些数据
x = np.linspace(0, 1, 10)
y = np.sin(2 * np.pi * x)
computed_time = np.linspace(0, 1, 50)
#线性插值
linear_interp = interp1d(x, y)
linear_results = linear_interp(computed_time)
#三次方插值
cubic_interp = interp1d(x, y, kind='cubic')
cubic_results = cubic_interp(computed_time)
#作图
plt.plot(x, y, 'o', ms=6, label='y')
plt.plot(computed_time, linear_results, label='linear interp')
plt.plot(computed_time, cubic_results, label='cubic interp')
plt.legend()
plt.show()

求解非线性方程组

(1)optimize中的fsolve

from scipy.optimize import fsolve
def func(x):
x0,x1,x2 = x.tolist()
return [5*x1-25,5*x0*x0-x1*x2,x2*x0-27]
initial_x = [1,1,1]
result = fsolve(func, initial_x)
print result

本文届引自:https://ptorch.com/news/49.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值