数据准备:
In [1]: import numpy as np
In [2]: # 创建一个符合正态分布的500个股票504天的涨跌幅数据
...: stock_day_rise = np.random.normal(0, 1, (500, 504))
In [3]: # 获取前4个股票的前5个交易日的涨跌幅数据
...: temp = stock_day_rise[:4, :5]
In [4]: temp
Out[4]:
array([[ 0.17017797, 1.59886728, -2.21765447, -1.53094694, -0.85290083],
[-0.31448824, 2.33438872, -0.24909789, -0.68732532, -1.04854607],
[-0.15111815, -0.80393376, -0.35471297, -0.31424869, 0.03501344],
[ 0.7933363 , 0.75446854, 0.20604597, 0.7818697 , 0.42365234]])
1 逻辑运算
- 逻辑判断
- 赋值
In [5]: # 判断获取涨幅大于0.5的区段
...: temp > 0.5
Out[5]:
array([[False, True, False, False, False],
[False, True, False, False, False],
[False, False, False, False, False],
[ True, True, False, True, False]])
In [6]: # 赋值
...: temp[temp > 0.5] = 1
In [7]: temp
Out[7]:
array([[ 0.17017797, 1. , -2.21765447, -1.53094694, -0.85290083],
[-0.31448824, 1. , -0.24909789, -0.68732532, -1.04854607],
[-0.15111815, -0.80393376, -0.35471297, -0.31424869, 0.03501344],
[ 1. , 1. , 0.20604597, 1. , 0.42365234]])
2 通用判断函数
- np.all()
In [8]: # 判断temp是否全是上涨的
...: np.all(temp > 0)
Out[8]: False
- np.unique()
返回新的数组的数值,不存在重复的值
In [9]: # 将序列中数值唯一且不重复的值组成新的序列
...: change_int = stock_day_rise[0:2, 0:5].astype(int)
...: np.unique(change_int)
Out[9]: array([-2, -1, 0, 1])
3 np.where(三元运算符)
通过使用np.where能够进行更加复杂的运算
- np.where()
- 复合逻辑需要结合np.logical_and和np.logical_or使用
In [12]: # 判断前四个股票前五天的涨跌幅 大于0.5并且小于1的,换为1,否则为0
...: np.where(np.logical_and(temp > 0.5, temp < 1), 1, 0)
Out[12]:
array([[0, 0, 0, 1, 0],
[1, 0, 0, 0, 0],
[0, 0, 0, 1, 1],
[0, 0, 1, 0, 0]])
In [13]: # 判断前四个股票前五天的涨跌幅 大于0.5或者小于-0.5的,换为1,否则为0
...: np.where(np.logical_or(temp > 0.5, temp < -0.5), 1, 0)
Out[13]:
array([[1, 0, 0, 1, 0],
[1, 1, 1, 0, 1],
[0, 0, 1, 1, 1],
[0, 0, 1, 0, 1]])
4 统计运算
- 使用np.max完成最大值计算
- 使用np.min完成最小值计算
- 使用np.mean完成中间数计算
- 使用np.std完成标准差计算
- 使用np.var完成方差计算
- 使用np.mean完成平均值计算
- 使用np.argmax、np.argmin完成最大值最小值的索引
注意:axis 0代表列, axis 1代表行去进行统计
import numpy as np
# 创建一个符合正态分布的500个股票504天的涨跌幅数据
stock_day_rise = np.random.normal(0, 1, (500, 504))
# 获取前4个股票的前5个交易日的涨跌幅数据
temp = stock_day_rise[:4, :5]
print("前4个股票的前5个交易日的涨跌幅数据:")
print(temp)
# 使用max, min, median, std, var, mean对这4只股票的5天数据,进行一些统计运算
print("所有四只股票前五天的最大涨幅{}".format(np.max(temp, axis=1)))
print("所有四只股票前五天的最大跌幅{}".format(np.min(temp, axis=1)))
print("所有四只股票前五天的中间跌幅{}".format(np.median(temp, axis=1)))
print("所有四只股票前五天的振幅幅度{}".format(np.std(temp, axis=1)))
print("所有四只股票前五天的方差{}".format(np.var(temp, axis=1)))
print("所有四只股票前五天的平均涨跌幅{}".format(np.mean(temp, axis=1)))
# 获取股票指定哪一天的涨幅最大
print("前四只股票在5天内涨幅最大{}".format(np.argmax(temp, axis=1)))
print("前5天在天内涨幅最大的股票{}".format(np.argmax(temp, axis=0)))
运行结果:
前4个股票的前5个交易日的涨跌幅数据:
[[ 0.37310176 -0.80266281 0.49413172 0.03991727 0.66102868]
[-0.03890735 -0.38157026 0.66343787 -0.33886078 -1.70747026]
[-1.15137955 0.25203233 3.83837253 0.48185389 1.52012328]
[-0.54360511 -1.40222036 -1.09703491 1.20309174 -0.90385997]]
所有四只股票前五天的最大涨幅[0.66102868 0.66343787 3.83837253 1.20309174]
所有四只股票前五天的最大跌幅[-0.80266281 -1.70747026 -1.15137955 -1.40222036]
所有四只股票前五天的中间跌幅[ 0.37310176 -0.33886078 0.48185389 -0.90385997]
所有四只股票前五天的振幅幅度[0.51942041 0.77033909 1.66027442 0.91914167]
所有四只股票前五天的方差[0.26979757 0.59342231 2.75651114 0.84482141]
所有四只股票前五天的平均涨跌幅[ 0.15310332 -0.36067415 0.9882005 -0.54872572]
前四只股票在5天内涨幅最大[4 2 2 3]
前5天在天内涨幅最大的股票[0 2 2 3 2]