python优化函数包 python优化算法包( 五 )


scipy.optimize.minimize 中包括了多种最优化算法,每种算法使用范围不同,详细参考官方文档 。
Python科学计算常用的工具包有哪些?1、 NumPy
NumPy几乎是一个无法回避的科学计算工具包 , 最常用的也许是它的N维数组对象,其他还包括一些成熟的函数库,用于整合C/C++和Fortran代码的工具包,线性代数、傅里叶变换和随机数生成函数等 。NumPy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object) 。ndarray是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数 。
2、SciPy:Scientific Computing Tools for Python
“SciPy是一个开源的Python算法库和数学工具包,SciPy包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算 。其功能与软件MATLAB、Scilab和GNU Octave类似 。Numpy和Scipy常常结合着使用,Python大多数机器学习库都依赖于这两个模块 。”—-引用自“Python机器学习库”
3、 Matplotlib
matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图 。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中 。Matplotlib可以配合ipython shell使用,提供不亚于Matlab的绘图体验,总之用过了都说好 。
关于Python科学计算常用的工具包有哪些 , 环球青藤小编就和大家分享到这里了,学习是永无止境的,学习一项技能更是受益终身,所以,只要肯努力学,什么时候开始都不晚 。如果您还想继续了解关于python编程的学习方法及素材等内容,可以点击本站其他文章学习 。
如何用python实现Markowitz投资组合优化0.导入需要的包import pandas as pd
import numpy as np
import statsmodels.api as sm #统计运算
import scipy.stats as scs #科学计算
import matplotlib.pyplot as plt #绘图
1.选取几只感兴趣的股票
000413 东旭光电,000063 中兴通讯,002007 华兰生物,000001 平安银行 , 000002 万科A
并比较一下数据(2015-01-01至2015-12-31)
In[1]:
stock_set = ['000413.XSHE','000063.XSHE','002007.XSHE','000001.XSHE','000002.XSHE']
noa = len(stock_set)
df = get_price(stock_set, start_date = '2015-01-01', end_date ='2015-12-31', 'daily', ['close'])
data = https://www.04ip.com/post/df['close']
#规范化后时序数据
(data/data.ix[0]*100).plot(figsize = (8,5))
Out[1]:
2.计算不同证券的均值、协方差
每年252个交易日,用每日收益得到年化收益 。计算投资资产的协方差是构建资产组合过程的核心部分 。运用pandas内置方法生产协方差矩阵 。
In [2]:
returns = np.log(data / data.shift(1))
returns.mean()*252
Out[2]:
000413.XSHE0.184516
000063.XSHE0.176790
002007.XSHE0.309077
000001.XSHE-0.102059
000002.XSHE0.547441
In [3]:
returns.cov()*252
Out[3]:
3.给不同资产随机分配初始权重
由于A股不允许建立空头头寸,所有的权重系数均在0-1之间
In [4]:
weights = np.random.random(noa)
weights /= np.sum(weights)
weights
Out[4]:
array([ 0.37505798,0.21652754,0.31590981,0.06087709,0.03162758])
4.计算预期组合年化收益、组合方差和组合标准差
In [5]:
np.sum(returns.mean()*weights)*252
Out[5]:
0.21622558669017816
In [6]:
np.dot(weights.T, np.dot(returns.cov()*252,weights))
Out[6]:
0.23595133640121463
In [7]:
np.sqrt(np.dot(weights.T, np.dot(returns.cov()* 252,weights)))
Out[7]:
0.4857482232609962
5.用蒙特卡洛模拟产生大量随机组合

推荐阅读