结合金融场景演示NumPy模块的操作(二)
注意,NumPy 是 Python 的外部模块,因此使用时需要导入并且查看相应的版本信息,具体代码如下:
>>>import numpy as np #导入NumPy模块,以np命名,因此后续使用该模块的功能时要用np而不是numpy
>>>np.__version__ #查看NumPy的版本号
'1.18.1'
一、数组的索引、切片和排序
继续引用上篇例1,有:
>>>weight = np.array([0.15,0.2,0.25,0.4]) #创建4只股票配置比例的一维数组
>>>weight
array([0.15,0.2,0.25,0.4])
>>>return_list = [0.003731,0.021066,-0.004854,0.006098,-0.006060,-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.014570,0.016129]
>>>return_array = np.array(return_list) #转化为一维数组
>>>return_array = return_array.reshape(4,5) #运用reshape(),转化为4行5列的二维数组
>>>return_array
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]])
1.索引
索引的基本格式:return_array[x,y] return_array 为数组名(随不同数组而变),在中括号中,第一个参数代表的是第几行,第二个参数代表的是第几列,并且是从0开始。
例:投资者希望找到工商银行这一股票在2018年9月5日的涨跌幅,对应于数组中的第2行第3列,具体代码如下:
>>>return_array[1,2] # 索引数组中第2行第3列的数
-0.016544
如果用户希望按照一定的规则找到数组中的索引值,则需要运用到where函数。在输出结果中,第一个数组代表行的索引值,第二个数组代表列的索引值。
例:投资者希望找到涨跌幅低于-1%的数据所在数组中的索引值,具体代码如下:
>>>np.where(return_array<-0.01)
(array([1, 2, 3, 3, 3], dtype=int64), array([2, 2, 0, 2, 3], dtype=int64))
2.切片
切片的基本格式:return_array[a:b,c:d] return_array 为数组名(随不同数组而变),在中括号中,第一个参数代表从第a+1行开始到b行,第二个参数代表从第c+1列开始到第d列。
例:投资者希望提取上汽集团、宝钢股份在2018年9月4日至6日的涨跌幅数据,也就是提取第3行、第4行中第2~4列的数据,具体代码如下:
>>>return_array[2:,1:4]
array([[-0.000344, -0.033391, 0.007123],
[ 0.011704, -0.029563, -0.01457 ]])
例:如果投资者希望分别提取第2行的全部数据和第3列的全部数据,具体代码如下:
>>>return_array[1] #提取第2行的全部数据
array([-0.001838, 0.001842, -0.016544, -0.003738, 0.003752])
>>>return_array[:,2] #提取第3列的全部数据
array([-0.004854, -0.016544, -0.033391, -0.029563])
3.排序
对数据按照由小到大排序,需要运用sort函数,并且有参数axis=0或axis=1可以输入,其中,axis=0代表按列对元素排序,axis=1代表按行对元素排序,如果不输入参数,则默认按行对元素排序。
例:投资者希望对股票按照日涨跌幅进行排序,具体代码如下:
>>>np.sort(return_array,axis=0) #按列对元素由小到大排序
array([[-0.024112, -0.000344, -0.033391, -0.01457 , -0.00606 ],
[-0.003087, 0.001842, -0.029563, -0.003738, 0.003752],
[-0.001838, 0.011704, -0.016544, 0.006098, 0.004597],
[ 0.003731, 0.021066, -0.004854, 0.007123, 0.016129]])
>>>np.sort(return_array,axis=1) #按行对元素由小到大排序
array([[-0.00606 , -0.004854, 0.003731, 0.006098, 0.021066],
[-0.016544, -0.003738, -0.001838, 0.001842, 0.003752],
[-0.033391, -0.003087, -0.000344, 0.004597, 0.007123],
[-0.029563, -0.024112, -0.01457 , 0.011704, 0.016129]])
>>>np.sort(return_array) #按行对元素由小到大排序
array([[-0.00606 , -0.004854, 0.003731, 0.006098, 0.021066],
[-0.016544, -0.003738, -0.001838, 0.001842, 0.003752],
[-0.033391, -0.003087, -0.000344, 0.004597, 0.007123],
[-0.029563, -0.024112, -0.01457 , 0.011704, 0.016129]])