Intro to NumPy
1
在上一篇推文中我们讲过,NumPy是Python中的一个科学计算库,也可以说是一个功能强大的软件包。主要是因为NumPy可以对各种数学函数进行计算,比如它可以轻松执行线性代数的计算等。(以下我们用“np”表示NumPy)
最简单来说,我们可以使用NumPy去计算我们投资组合(portfolio)中的平均回报(mean return)。那么假设我们有个list,其中包含了几只股票的历史收益:“stock_list = [1, 2, 3, 4, 5]”。然后使“returns = np.array(stock_list)”,这代表这个list的数据将由returns表示,当接下来我们需要对这组数据进行任何计算的时候,就不需要再重复输入1,2,3,4,5。如果我们想求平均数也好,最大值也罢,无论portfolio中有多少个资产,都可以用”np.mean/max(return)”轻易得出。
2
接下来,我们可以用NumPy去计算预期收益(expected return)。众所周知,在投资组合中,每一项具体的资产所占的比重可能都不同。假设我们有N个随机权重(weights)的资产在我们的portfolio中:“weights = np.random.uniform(0, 1, N)”和“weights = weights/np.sum(weights)”. 这里可以体现NumPy中有个random module的作用,它可以从许多不同的概率分布中,进行随机抽样。另外,当我们计算portfolio的预期收益时,手写公式=w1*r1+w2*r2+…+wn*rn,当资产数量多的时候,这样分别列出来难免有些过于繁琐。那么,NumPy中有个函数叫“dot”,它可以提取每组数组中的每个数据,并将其分别相乘,换句话说,dot可以将每个元素相乘并且将所有乘积相加。
3
此外,线性代数在金融领域中是一个不可或缺的存在,比如说,在现代投资组合理论(modern portfolio theory)中,最优权重(optimal weights)的计算就是靠线性代数完成的。从入门开始,我们可以使用NumPy去进行矩阵乘法的运算。矩阵乘法是线性代数中的一个基础工具,其可以表示为y=A*x,其中A=m*n的矩阵,y=m*1的向量,x是n*1的向量(直白点来说,m是行数,n是列数)。那当两个矩阵相乘时,新矩阵=(m*n)*(p*q)=(m*q)或者(p*q)*(m*n)=(p*n)(矩阵所处的左右位置都会导致结果不同)。比如说:我们随便假设两个矩阵,其中A=3*5,B=4*3,当我们把B矩阵放在右侧,A矩阵放在左侧,可得(4*3)*(3*5)=(4*5)。NumPy中的dot函数可以直接帮我们计算出任何有效矩阵:
作者:研报部:程颢颐
编辑:线上部:Tim