(三)NumPy数组的运算

数组内的运算

求和、乘积

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)#奇异值分解
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您总结一下Numpy数组与矩阵运算实验的内容。 Numpy是Python中用于科学计算的一个重要的库,它提供了高性能的多维数组对象以及各种计算和操作这些数组的函数。Numpy数组与矩阵运算实验主要包括以下内容: 1. Numpy数组的创建与索引:可以使用Numpy提供的array()函数创建一维或多维数组,并且可以使用索引和切片来访问数组中的元素。 2. Numpy数组的基本运算Numpy提供了基本的数组运算,包括加、减、乘、除等,可以对数组进行逐元素的运算。 3. Numpy数组的聚合运算Numpy提供了一些常用的聚合函数,比如sum()、min()、max()、mean()等,可以对数组中的元素进行聚合运算。 4. Numpy数组的逻辑运算Numpy提供了逻辑运算符,可用于数组中元素的逻辑判断,如and、or等。 5. 矩阵的创建与运算Numpy提供了矩阵对象,可使用matrix()函数创建矩阵,矩阵之间的运算包括加、减、乘、转置等。 6. 广播:Numpy提供了广播功能,可以使得不同形状的数组运算时具有相同的形状。 通过实验练习,可以掌握Numpy数组与矩阵运算的基本操作,如数组创建、索引、运算、聚合、逻辑运算以及矩阵创建、运算、转置等。同时,实验也会涉及到一些高级的Numpy应用,比如随机数生成、线性代数运算数组的拼接、切分和重塑等,这些内容需要结合实际应用场景进行练习。 总的来说,Numpy数组与矩阵运算实验是Python科学计算中非常重要的部分,需要反复练习和实践,才能掌握这些知识点并灵活运用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值