数组内的运算
求和、乘积
stockre#收益率数据,每行代表一支股票,每列代表一个交易日
Out[3]:
array([[ 0.003731, 0.021066, -0.004854, 0.006098, -0.00606 ],
[-0.001838, 0.001842, -0.016544, -0.003738, 0.003752],
[-0.003087, -0.000344, -0.033391, 0.007123, 0.004597],
[-0.024112, 0.011704, -0.029563, -0.01457 , 0.016129]])
stockre.sum(axis=0)#按列求和,axis=1按行求和,axis可省略直接写0or1
Out[4]: array([-0.025306, 0.034268, -0.084352, -0.005087, 0.018418])
stockre.sum()#全部元素求和
Out[5]: -0.062059
stockre.prod(axis=1)#按行求积
Out[6]: array([ 1.40983129e-11, -7.85557141e-13, -1.16107947e-12, -1.96057312e-09])
np.prod(stockre,axis=1)#两种写法
Out[7]: array([ 1.40983129e-11, -7.85557141e-13, -1.16107947e-12, -1.96057312e-09])
描述性指标
stockre.min(1)
Out[8]: array([-0.00606 , -0.016544, -0.033391, -0.029563])
stockre.max(0)
Out[9]: array([ 0.003731, 0.021066, -0.004854, 0.007123, 0.016129])
stockre.mean(axis=1)
Out[10]: array([ 0.0039962, -0.0033052, -0.0050204, -0.0080824])
stockre.std(1)#标准差
Out[12]: array([0.00975007, 0.00712606, 0.01463184, 0.01864482])
stockre.var(1)#方差
Out[13]: array([9.50638330e-05, 5.07807114e-05, 2.14090849e-04, 3.47629344e-04])
幂运算与对数运算(np.函数名(x))
np.sqrt(stockre)#每个元素开方,只能用这种格式
Out[15]:
array([[0.06108191, 0.14514131, nan, 0.07808969, nan],
[ nan, 0.04291853, nan, nan, 0.06125357],
[ nan, nan, nan, 0.08439787, 0.06780118],
[ nan, 0.10818503, nan, nan, 0.127 ]])
np.square(stockre)#每个元素平方
Out[16]:
array([[1.39203610e-05, 4.43776356e-04, 2.35613160e-05, 3.71856040e-05,
3.67236000e-05],
[3.37824400e-06, 3.39296400e-06, 2.73703936e-04, 1.39726440e-05,
1.40775040e-05],
[9.52956900e-06, 1.18336000e-07, 1.11495888e-03, 5.07371290e-05,
2.11324090e-05],
[5.81388544e-04, 1.36983616e-04, 8.73970969e-04, 2.12284900e-04,
2.60144641e-04]])
np.exp(stockre)#每个元素以e为底的指数幂
Out[17]:
array([[1.00373797, 1.02128945, 0.99515776, 1.00611663, 0.99395832],
[0.99816369, 1.0018437 , 0.9835921 , 0.99626898, 1.00375905],
[0.99691776, 0.99965606, 0.96716033, 1.00714843, 1.00460758],
[0.97617637, 1.01177276, 0.97086971, 0.98553563, 1.01625977]])
np.log(stockre)#lnx
Out[18]:
array([[-5.59107898, -3.86009491, nan, -5.09979443, nan],
[ nan, -6.29690334, nan, nan, -5.58546625],
[ nan, nan, nan, -4.94442629, -5.38235136],
[ nan, -4.44782462, nan, nan, -4.12713639]])
np.log10(stockre)#log10x
Out[19]:
array([[-2.42817475, -1.67641792, nan, -2.21481258, nan],
[ nan, -2.73471037, nan, nan, -2.42573717],
[ nan, nan, nan, -2.14733706, -2.3375255 ],
[ nan, -1.93166569, nan, nan, -1.79239256]])
数组间的运算
1、适用于行数列数相同的数组
2、对数组的全部、对应元素进行运算
3、+、-、*、/、**既可用于数组也可用于数字
a=stockre+np.ones((4,5));a
Out[26]:
array([[1.003731, 1.021066, 0.995146, 1.006098, 0.99394 ],
[0.998162, 1.001842, 0.983456, 0.996262, 1.003752],
[0.996913, 0.999656, 0.966609, 1.007123, 1.004597],
[0.975888, 1.011704, 0.970437, 0.98543 , 1.016129]])
a=stockre+1;a
Out[27]:
array([[1.003731, 1.021066, 0.995146, 1.006098, 0.99394 ],
[0.998162, 1.001842, 0.983456, 0.996262, 1.003752],
[0.996913, 0.999656, 0.966609, 1.007123, 1.004597],
[0.975888, 1.011704, 0.970437, 0.98543 , 1.016129]])
b=stockre**2;b
Out[28]:
array([[1.39203610e-05, 4.43776356e-04, 2.35613160e-05, 3.71856040e-05,
3.67236000e-05],
[3.37824400e-06, 3.39296400e-06, 2.73703936e-04, 1.39726440e-05,
1.40775040e-05],
[9.52956900e-06, 1.18336000e-07, 1.11495888e-03, 5.07371290e-05,
2.11324090e-05],
[5.81388544e-04, 1.36983616e-04, 8.73970969e-04, 2.12284900e-04,
2.60144641e-04]])
c=np.maximum(stockre,np.zeros((4,5)));c
#在多个相同格式的数组之间生成一个只包含对应位置最大值的数组
Out[29]:
array([[0.003731, 0.021066, 0. , 0.006098, 0. ],
[0. , 0.001842, 0. , 0. , 0.003752],
[0. , 0. , 0. , 0.007123, 0.004597],
[0. , 0.011704, 0. , 0. , 0.016129]])
矩阵
矩阵的性质
np.corrcoef(stockre)#计算每一行(4支股票)之间的相关系数
Out[32]:
array([[1. , 0.38215651, 0.36338676, 0.30254781],
[0.38215651, 1. , 0.89216018, 0.80740528],
[0.36338676, 0.89216018, 1. , 0.60483848],
[0.30254781, 0.80740528, 0.60483848, 1. ]])
stockre.T#求矩阵的转置
Out[35]:
array([[ 0.003731, -0.001838, -0.003087, -0.024112],
[ 0.021066, 0.001842, -0.000344, 0.011704],
[-0.004854, -0.016544, -0.033391, -0.029563],
[ 0.006098, -0.003738, 0.007123, -0.01457 ],
[-0.00606 , 0.003752, 0.004597, 0.016129]])
矩阵的运算
weight=[0.15,0.2,0.25,0.4]#定义4支(4行)股票的投资权重
averagere=np.dot(weight,stockre);averagere
#求内积,计算投资组合每一交易日的平均收益率
Out[37]: array([-0.0102245 , 0.0081239 , -0.02420985, -0.00388015, 0.00744225])
线性代数工具包linalg
import numpy.linalg as la
la.det(矩阵x)#求行列式
la.inv(矩阵x)#求逆矩阵
la.eig(矩阵x)#特征值分解
la.svd(矩阵x)#奇异值分解