- Python量化投资:技术、模型与策略
- 赵志强 刘志伟
- 434字
- 2021-04-04 11:20:15
3.2 SciPy
SciPy是基于NumPy的,提供了更多的科学计算功能,比如线性代数、优化、积分、插值、信号处理等。
1.文件读写
目前在国内Matlab仍然非常流行,Matlab使用的数据格式通常是.mat文件。对此,Scipy.io包提供了可以导入导出.mat文件的接口,这样,Python和Matlab的协同工作就变得非常容易了。示例代码如下所示:
In[2]: from scipy import io as spio In[3]: import numpy as np In[4]: a=np.arange(10) In[5]: spio.savemat('a.mat',{'a':a}) In[8]: data = spio.loadmat('a.mat', struct_as_record=True) In[10]: data['a'] Out[10]: array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
2.线性代数运算
在SciPy中,线性代数运算使用的是scipy.linalg。
scipy.linalg.det()可用于计算矩阵的行列式,示例代码如下:
In[17]: from scipy import linalg In[18]: m=np.array([[1,2],[3,4]]) In[20]: linalg.det(m) Out[20]: -2.0
3.优化和拟合
求解最大值最小值之类的问题即为优化问题,在SciPy中,scipy.optimization提供了最小值、曲线拟合等算法。示例代码如下:
import numpy as np from 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))
由图3-1中可以看到,对应的最小值的横坐标大约是-2。
我们可以用暴力穷举法来计算最小值,代码如下:
In[29]: grid=(-10,10,0.1) In[30]: x_min=optimize.brute(f,(grid,)) In[31]: x_min Out[31]: array([-1.42754883])
图 3-1
当然,当数据量较大的时候,穷举法速度会很慢。为了提高效率,scipy.optimize也提供了诸如模拟退火等优化算法,这里不再多讲。
4.统计和随机数
关于统计相关的工具和用法,请参考第5章,其中会有更为详细的讲解。