NumPy科学计算

核心

  • 数组(ndarray)运算
  • 矩阵(matrix)运算

引入

求0-n元素组成的列表中各元素的num次幂

#  导包
import numpy as np
def create(n,num):
    '''
    功能:求0-n元素组成的列表中各元素的num次幂
    参数:
        n int类型,列表中元素个数
        num int类型 每个元素的num次幂
​
    '''
    a = list(range(n))
    for i in range(len(a)):
        a[i] = a[i] ** num
    return a
create(4,2)
[0, 1, 4, 9]
def pythonsum(n):
    '''
    function:求两个列表之和
    args:n表示以0-n为元素长度为n的列表
    '''
    a = create(n,2)
    b = create(n,3)
#     print(a)
#     print(b)
    c = []
    for i in range(n):
        c.append(a[i]+b[i])
    return c
pythonsum(5)
[0, 1, 4, 9, 16]
[0, 1, 8, 27, 64]
[0, 2, 12, 36, 80]

NumPy数组的广播机制

ndarray具有广播机制,可以把针对数组的操作,广播给数组中的每一个元素

import numpy as np
import pandas as pd
## 广播机制
arr = np.array([1,2,3,4,5])
print(arr**2)
[ 1  4  9 16 25]

二维数组同样拥有此性质

行广播

a = np.arange(10).reshape(5,2)
print(a)
[[0 1]
 [2 3]
 [4 5]
 [6 7]
 [8 9]]
b = np.array([5,10])
print(b)
[ 5 10]
# 相加
print(a+b)
[[ 5 11]
 [ 7 13]
 [ 9 15]
 [11 17]
 [13 19]]

另一个例子

broadcast_row = np.arange(5).reshape(5,1)
print(broadcast_row)
[[0]
 [1]
 [2]
 [3]
 [4]]
print(a+broadcast_row)
[[ 0  1]
 [ 3  4]
 [ 6  7]
 [ 9 10]
 [12 13]]

由此可见,ndarray的广播机制操作,取决于执行相关计算的变量维度

列广播

arr1 = np.array([1,1,1,1,1])
arr2 = np.array([4,4,4,4,4])
print(arr1+arr2)
[5 5 5 5 5]

案例:创建两个矩阵并相加

def numpysum(n):
    # 使用np.arange()创建包含0-~的2和3次幂的整数NumPy数组
    a = np.arange(n) ** 2 
    print(a)
    b = np.arange(n) ** 3
    print(b)
    c = a + b
    return c
​
c = numpysum(1292)
print(c)
[      0       1       4 ... 1661521 1664100 1666681]
[          0           1           8 ...  2141700569  2146689000
 -2143282125]
[          0           2          12 ...  2143362090 -2146614196
 -2141615444]

NumPy默认以int32存储数据,当数据大于1292时会发生溢出,若想数据正常,需要改为

def numpysum(n):
    # 使用np.arange()创建包含0-~的2和3次幂的整数NumPy数组
    a = np.arange(n,dtype=np.int64) ** 2 
#     print(a)
    b = np.arange(n,dtype=np.int64) ** 3
#     print(b)
    c = a + b
    return c
c = numpysum(1292)
print(c)
[         0          2         12 ... 2143362090 2148353100 2153351852]

案例2:比较NumPy和原生Python运行效率

import time
# 开始时间标记
pythonsum_strat = time.time()*1000 # 换算为秒
pythonsum(100000)
pythonsum_time = time.time()*1000 - pythonsum_strat
numpysum_start = time.time()*1000
numpysum(100000)
numpy_time = time.time()*1000 - numpysum_start
print("python所用时间:{}".format(pythonsum_time))
print("numpy所用时间:{}".format(numpy_time))
​
python所用时间:59.02197265625
numpy所用时间:0.99853515625

Ndarray数据类型ndarray

标准Python缺陷:

  1. 标准Python中的list可以用来当作数组使用,但列表中所保存的是对象(任意对象)元素的指针,对于数值运算来说这种结构比较浪费内存和时间
  2. 标准Python中也有array模块,可以直接保存数值,但只支持一维,也没有各种运算函数,不适合数值运算

NumPy提供了以下模块,解决了标准Python的缺陷问题:

  • ndarray(N-dimensional array object):N维数组对象,只能存储单一数据类型
  • ufunc(universal function object):通用函数对象

当array中含有多个数据类型的对象时,会全部转化为字符串类型

使用 dir(np) 可以查看支持的运算函数

NumPy的ndarray是一个多维数组对象,该对象由两部分组成:

  • 实际的数据
  • 描述这些数据的元数据

大部分的数组操作仅仅修改元数据部分,不会修改实际数据

一维数组

创建一维数组

a = np.array([1,2,3,4])
print(a)
[1 2 3 4]

可以接收元组、列表、集合set、字典等

获取维度和类型

# 返回一个元组,存放对象每一个维度上的大小
print(a.shape)
(4,)
# 获取NumPy数组元素的类型
print(a.dtype)
int32

生成指定范围数组

arr = np.arange(10)
print(arr)
[0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]
arr = np.arange(10,20)
print(arr)
[10 11 12 13 14 15 16 17 18 19]
arr = np.arange(10,20,2)
print(arr)
[10 12 14 16 18]

使用random随机生成

random

  • randint(a,b):
  • random():0-1之间随机实数
  • uniform(a,b):[a,b]范围随机浮点数
  • randrange(start,stop,step):递增取数
  • shuffle:打乱列表元素
  • choice(sequence):用于从序列中获取一个随机元素。
arr = np.random.randint(0,100,size=(10))
print(arr)
[55 83 75 63 55 15 39 98 81 33]
# 5行5列
arr = np.random.randint(0,100,size=(5,5))
print(arr)
# 2行2列2层,三维数组
arr = np.random.randint(0,100,size=(2,2,2))
print(arr)
[[45 93 99 65 88]
 [87 99 55 41 86]
 [90 62 44 50 12]
 [93 37 48 61 47]
 [80 92 68 34 90]]
[[[12 99]
  [ 0 10]]
​
 [[37 76]
  [29 73]]]

使用reshape转换行列

arr = arr.reshape(5,2)
print(arr)
print(arr.shape)
[[55 83]
 [75 63]
 [55 15]
 [39 98]
 [81 33]]
(5, 2)

生成符合正态分布的数据

data = np.random.randn(100)
print(data)
[-0.31196603  1.28185169 -0.44951433 -0.69335624  0.84241689  2.48257993
  0.87593222 -0.68405746 -1.60786124 -0.65911307  0.18803712  0.47407728
  0.92877524 -0.26900528  0.61044877 -1.25123701  1.58961038  0.28414176
  0.38515133 -0.4983948  -0.50688279  1.19733157 -1.73816932  3.1128989
 -0.28793866  0.88871792  0.7616294   0.3555252  -1.39401742  0.22645493
  0.46954767  0.83669687  0.61009314  0.03499719  0.35262501  1.80456834
  0.10392368 -0.42464218  1.83640271 -1.69149283 -1.78764116 -1.84571714
  0.3899233  -0.05211141  0.85019456  0.42792196 -0.91022293 -0.99403035
  0.48609297 -0.93819346  0.48400832  0.94845317 -0.30843918 -1.27544521
 -0.08124074  0.64208168 -0.74687447  0.30539688 -0.89954167  0.38074042
  0.18244691 -0.05542199 -1.14950104  0.94571481 -0.32509655 -0.90136491
  1.35708478 -1.00824661  0.80916525 -2.6551499   0.2221208   1.0822212
 -2.44698803  1.20614209  0.11589274 -0.91292575  0.69774329 -0.06238969
  0.96518322  0.95229487  0.73161532  0.74950675  1.00837377  1.61446025
 -1.08124705  0.49262253 -0.84793116  0.65344369  1.2519553  -0.48039967
 -1.28745054  0.15718605 -1.29560286 -0.54910118  0.73755176  1.1099726
 -1.19972906  1.38953611  1.33832812 -0.76642651]

绘图验证

import matplotlib.pyplot as plt
plt.hist(data)
(array([ 2.,  5., 11., 16., 17., 22., 20.,  5.,  1.,  1.]),
 array([-2.6551499 , -2.07834502, -1.50154014, -0.92473526, -0.34793038,
         0.2288745 ,  0.80567938,  1.38248426,  1.95928914,  2.53609402,
         3.1128989 ]),
 <BarContainer object of 10 artists>)
image.png

其他函数

  • np.zeros():创建全为0的数组
  • np.full():创建全为某个数的数组
  • np.eye():创建对角矩阵
  • ……

多维数组

创建多维数组

arr = np.array([np.arange(2),np.arange(2)])
print(arr)
[[0 1]
 [0 1]]

其他方法创建

值均为0的2*2多维数组

a = np.zeros((2,2))
print(a)
[[0. 0.]
 [0. 0.]]

值均为1的1*2数组

b = np.ones((1*2))
print(b)
[1. 1.]

值均为7的2*2数组

c = np.full((2,2),7)
print(c)
[[7 7]
 [7 7]]

2*2对角矩阵

d = np.eye(2)
print(d)
[[1. 0.]
 [0. 1.]]

平移对角阵

# 对角阵向右上平移两格
e = np.eye(10,k=2)
print(e)
[[0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

ndarray属性

维度

# 二维
print(np.array([1,2,3,4]).reshape(2,2).shape)
(2, 2)
# 三维
data = np.arange(20).reshape(5,2,2)
print(data)
print(data.shape)
[[[ 0  1]
  [ 2  3]]
​
 [[ 4  5]
  [ 6  7]]
​
 [[ 8  9]
  [10 11]]
​
 [[12 13]
  [14 15]]
​
 [[16 17]
  [18 19]]]
(5, 2, 2)

属性

arr = np.array([1,2,3,4,5],dtype=np.int64)
print(arr.dtype)
int64

数组元素个数

arr = np.array([1,2,3,4,5],dtype=np.int64)
print(arr.size)
5

NumPy字符编码

NumPy可以使用字符编码表示数据类型

import numpy as np
print(np.arange(7,dtype='f')) # 单精度浮点数
print(np.arange(7,dtype='D')) # 复数
[0. 1. 2. 3. 4. 5. 6.]
[0.+0.j 1.+0.j 2.+0.j 3.+0.j 4.+0.j 5.+0.j 6.+0.j]

自定义数据类型

  1. 使用Python中的浮点数类型
  2. 使用字符编码指定单(双)精度浮点数类型
  3. 将两个字符作为参数传给数据类型的构造函数
    • 第一个字符表示数据类型
    • 第二个字符表示该类型在内存中占用字节数(2、4、8分别表示,16位、32位、64位)
    • i2(int16)
    • i4(int32)
  4. 自定义数据类型是一种异构数据类型,可以用作记录电子表格或数据库中一条记录的结构
print(np.dtype(float))
print(np.dtype('f'))
print(np.dtype('d'))
print(np.dtype('f8')) # 8(B)*8(bit)=64bit
float64
float32
float64
float64

案例

  • 用一个长度为40个字符的字符串来记录商品名称。
  • 用一个32位的整数来记录商品的库存数量。
  • 最后用一个32位的单精度浮点数来记录商品价格。
# 创建自定义数据类型
t = np.dtype([
 &nbsp;  ("name",np.str_,40),
 &nbsp;  ("numitems",np.int32),
 &nbsp;  ("price",np.float32)
])
print(t)
[('name', '<U40'), ('numitems', '<i4'), ('price', '<f4')]
# 创建自定义数据类型数组
item2 = np.array(
 &nbsp;  [
 &nbsp; &nbsp; &nbsp;  ("DVD",42,3.14),
 &nbsp; &nbsp; &nbsp;  ("Butter",13,5.26),
 &nbsp;  ],
 &nbsp; &nbsp;dtype=t
)
print(item2.dtype)
[('name', '<U40'), ('numitems', '<i4'), ('price', '<f4')]
for item in item2:
 &nbsp; &nbsp;print("-"*30)
 &nbsp; &nbsp;print(item[0],"\t",item[1],"\t",item[2])
 &nbsp; &nbsp;print("-"*30)
------------------------------
DVD      42      3.14
------------------------------
------------------------------
Butter   13      5.26
------------------------------

ndarray索引和切片

一维数组切片

m = np.random.randint(0,100,size=(9))
print(m)
[84 96 44  4 83 93 97 10 22]
# 从后往前第四个开始到最后
print(m[-4:])
[93 97 10 22]
# 从索引1开始,每隔2个取一次
print(m[1::3])
[96 83 10]

二维数组切片

sc = np.array([
 &nbsp;  [105,123,40],
 &nbsp;  [96,100,88],
 &nbsp;  [64,90,25]
])
print(sc[:,1])
[123 100  90]
print(sc[1,:])
[ 96 100  88]
print(sc[0,0:2])
[105 123]

多维数组切片

ar = np.arange(27).reshape(3,3,3)
print(ar)
[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]]
​
 [[ 9 10 11]
  [12 13 14]
  [15 16 17]]
​
 [[18 19 20]
  [21 22 23]
  [24 25 26]]]

数组拼接

x = np.array([[1, 2, 3], [4, 5, 6]])
y = np.array([[7, 8, 9], [10, 11, 12]])
z = np.concatenate([x, y], axis=0)
 [[ 1  2  3]
#  [ 4  5  6]
#  [ 7  8  9]
#  [10 11 12]]
z = np.concatenate([x, y], axis=1)
print(z)
# [[ 1  2  3  7  8  9]
#  [ 4  5  6 10 11 12]]

堆叠,沿着新加入数组

>>> a = np.array([1, 2, 3])
>>> b = np.array([4, 5, 6])
>>> np.row_stack((a,b))
array([[1, 2, 3],
       [4, 5, 6]])
>>> np.column_stack((a,b))
array([[1, 4],
       [2, 5],
       [3, 6]]

基于NumPy的统计分析

利用savetxt存储数据到文件

i2 = np.eye(2)
print(i2)
np.savetxt("./Datas/eye.txt",i2)
[[1. 0.]
 [0. 1.]]

读取csv

从文件中读取数据,arr1为价格,arr2为成交量

arr1,arr2 = np.loadtxt("./Datas/pingan.csv",delimiter=',',usecols=(3,5),unpack=True,skiprows=1)
print(arr1)
[88.   88.18 88.5  89.9  90.45 90.2  90.58 91.72 89.75 90.07 90.29 89.5
 89.8  88.   88.64 88.2  87.95 88.12 90.04 90.29 90.06 90.   89.77 89.17
 88.21 88.22 88.   88.03 87.9  88.71 88.89 88.05 86.34 84.89 85.5  85.4
 84.91 84.4  83.62 83.29 84.27 84.07 84.67 84.74 83.65 83.59 84.04 84.04
 86.77 85.64 86.13 85.98 85.7  85.53 84.29 84.46 83.93 84.43 84.72 85.89
 85.46 86.12 86.2  85.6  86.15 85.   85.04 84.78 86.45 86.83 85.81 85.55
 86.25 87.6  85.6  85.22 83.49 77.71 80.43 80.38 81.52 81.03 80.3  81.13
 81.2  80.45 81.   82.39 81.55 81.7  83.28 82.38 80.72 80.19 79.83 79.79
 77.72 79.58 79.49 80.58 82.45 80.91 78.14 79.18 78.15 76.65 74.71 72.
 72.14 69.87 67.81 69.   66.76 68.95 70.35 70.19 69.72 69.15 69.17 69.32
 69.67 68.86 69.97 69.39 69.64 70.99 70.13 71.02 70.85 70.38 72.4  73.5
 72.37 72.07 72.16 70.5  71.2  72.38 74.   74.46 73.81 73.23 72.97 73.9
 73.93 73.34 72.23 72.23 72.2  72.9  72.95 72.38 70.12 70.03 70.51 70.65
 71.51 70.71 72.16 74.28 75.01 75.14 75.3  76.72 76.5  75.58 74.22 74.15
 72.54 73.46 73.01 73.4  73.42 72.77 71.96 72.26 71.01 71.4  73.5  76.
 77.96 84.12 83.22 85.69 85.92 82.34 82.36 81.3  80.22 78.22 78.02 82.8
 80.76 79.93 79.   77.   76.43 76.38 77.3  76.03 75.9  76.44 78.67 77.13
 77.15 76.33 77.01 76.77 77.16 76.6  78.19 81.1  79.75 78.17 77.6  78.25
 77.8  78.11 76.8  76.54 77.89 76.62 76.38 75.93 75.39 74.82 75.06 77.14
 76.48 76.52 77.21 78.55 79.91 78.6  79.   82.89 80.93 79.07 78.56 77.07
 77.59 77.95 76.8  76.26 77.9  80.86 81.38 81.38 81.4  82.   81.85 81.23
 82.4  82.1  83.5  82.2  81.07 79.58 78.66 77.83 77.23 79.16 79.5  80.94
 81.3  82.98 83.2  83.52 82.27 80.34 83.1  84.03 85.37 85.42 84.54 86.22
 85.   87.25 89.15 90.1  90.03 93.38 92.85 91.87 92.19 90.38 88.05 87.87
 87.68 86.1  87.69 86.3  86.84 88.98 87.79 87.05 84.15 84.85 84.2  83.2
 84.62 85.5  85.88 86.98 85.18 84.27 85.74 86.26 86.1  84.03 87.82 87.54
 85.27 86.9  87.2  86.8  85.2  84.44 83.8  84.88 83.   83.04 80.92 79.08
 79.27 78.18 76.54 79.62 79.72 78.57 78.13 79.25 82.38 84.2  83.   84.32
 83.78 87.14 85.18 84.84 83.23 86.75 86.3  84.5  84.95 84.05 83.28 86.36
 85.55 85.11 85.4  82.54 81.42 79.64 79.82 80.05 79.01 79.2  80.01 79.13
 79.37 78.7  79.2  78.88 79.03 78.45 78.63 77.16 77.16 76.56 77.15 75.81
 75.7  76.18 76.   75.62 74.37 74.26 72.89 73.27 72.81 73.82 72.5  70.53
 70.1  70.03 70.28 69.93 69.14 71.18 70.37 70.9  69.97 70.72 70.05 69.94
 72.46 72.38 72.9  72.97 71.8  71.13 70.87 70.68 70.85 70.28 70.41 70.3
 70.01 69.4  67.07 67.   66.25 65.1  64.16 64.73 65.82 65.96 66.68 65.6
 64.38 64.28 64.76 62.3  61.91 62.9  62.37 60.78 60.09 59.4  59.7  57.91
 59.98 59.7  59.35 58.46 58.08 58.54 57.64 54.5  52.67 53.11 53.25 53.67
 54.01 54.24 53.6  54.2  53.67 55.12 55.73 55.8  54.74 54.31 54.93 54.21
 56.04 53.71 53.01 52.7  51.8  51.58 50.3  52.   50.71 49.9  51.49 51.55
 51.71 51.58 52.34 51.95 51.62 51.71 51.12 49.86 49.47 49.51 48.68 47.78
 48.22 48.08 49.   49.26 49.19 48.36 52.1  52.74 52.26 51.75 51.41 50.88
 49.86 51.45 51.37 54.28 54.29]
  • ./Datas/pingan.csv 数据文件存储路径
  • skiprows 跳过数据集指定行
  • delimiter 数据集分隔符
  • usecols 加载数据集指定列数据,列索引从0开始
  • unpack 将加载数据解耦

利用average求加权平均

成交量加权平均价格(VWAP-Volume-Weighted Average Price):是一个重要的经济学量,代表着金融资产的“平均”价格,以成交量为权重,计算价格平均值

vwap = np.average(arr1,weights=arr2)
print(vwap)
75.26678159466051

多个权重的计算

score = [54,76]
result = np.average(score,weights=[0.6,0.4])
print(result)
62.8

利用mean求算术平均

print(np.mean(score))
65.0

max最大值、min最小值

num = np.random.randint(0,100,size=(10))
np.max(num) # numpy的方法
94
num.max() # ndarray的方法 
94
np.min(num)
2

ptp计算极差

high,low = np.loadtxt('./Datas/stock.csv',skiprows=1,delimiter=',',usecols=(2,4),unpack=True)
np.ptp(high)
46.540000000000006

median计算中位数

np.median(low)
78.44

利用msort排序取中位数

sorted = np.msort(low)
N = len(low)
print(sorted[int((N-1)/2)]) 
78.44

var计算方差

print(np.var(high))
144.90793978230212

方差越小越稳定

diff求相邻元素差值

log求对数

np.log(8)
2.0794415416798357

where筛选符合条件值的索引

筛选出所有正数的索引

random_arr = np.random.randint(-10,10,size=(10))
print(random_arr)
[ 2  9  9  4 -1  3  1  0  2  1]
index = np.where(random_arr > 0)
print(random_arr[index])
[2 9 9 4 3 1 2 1]

sqrt开方

print(np.sqrt(8))
2.8284271247461903

计算股票收益率、年波动率及月波动率

在投资学中,波动率(volatility)是对价格变动的一种度量。历史波动率可以根据历史价格数据计算得出。计算历史波动率(如 年波动率或月波动率)时,需要用到对数收益率

  • 年波动率等于对数收益率的标准差除以其均值,再除以交易日倒数的平方根,通常交易日取252天。
  • 月波动率等于对数收益率的标准差除以其均值,再除以交易月倒数的平方根,交易月为12月。

先计算简单收益率

相邻两天的差异除以前一天的价格

$$
股票收盘价每日收益率 = \frac{后一天收盘价格 – 前一天收盘价}{前一天收盘价}
$$

先计算相邻两天的差

# 假设连续三天股票收盘价
close = np.array([78,100,87,90,102])
print(close)
[ 78 100  87  90 102]
  • (100-78)/78
  • (87-100)/100
  • (90-87)87
  • ……
print(np.diff(close))
[ 22 -13   3  12]

返回一个列表,包含计算的所有结果

再计算与前一天的商,则为简单收益率

print(np.diff(close)/close[:-1])
[ 0.28205128 -0.13        0.03448276  0.13333333]
# 读入数据
close = np.loadtxt("./Datas/stock.csv",delimiter=',',skiprows=1,usecols=3,unpack=False)
# 计算简单收益率
benefits = np.diff(close)/close[:-1]
print(benefits)
[ 0.01308629  0.02033508 -0.00864878 -0.00113794  0.00316456 -0.01615142
 -0.00602796 -0.00503226  0.02580729  0.03286979 -0.01444308 -0.00037258
 -0.00919369  0.00213166  0.01313814  0.03174015  0.05937276 -0.0059887
  0.0027282  -0.0179118  -0.00265497  0.01909722  0.00636002  0.03645187
 -0.00849303 -0.00439271 -0.00838297  0.0105673  -0.02487617 -0.01196523
  0.00399863  0.00113792  0.00875199 -0.0075493  -0.01282925  0.00046003
 -0.00298885  0.01867866 -0.00758347 -0.00205292  0.01542857  0.00630276
  0.00771726 -0.00721421  0.0059251  -0.02100467 -0.00658418 -0.01691235
 -0.01650587 -0.00118189 -0.01230624  0.01245957 -0.00189327  0.02548903
 -0.01722543  0.0003529   0.01493415  0.01332406  0.01131946 -0.00576597
 -0.00238799  0.00284965  0.02170948 -0.02658805  0.00205714 -0.00889599
 -0.0023015   0.0071511   0.01351351 -0.00282486  0.00056657  0.01053228
  0.01647428 -0.00330761 -0.01061947  0.00134168  0.03104064 -0.01072125
 -0.02003284  0.00536193 -0.00444444  0.00279018 -0.01046188  0.00044989
 -0.00191119 -0.00484343 -0.00056593 -0.01426954  0.01102941  0.00204545
  0.00362894  0.01581921  0.00611791 -0.00276396  0.00421286  0.01258556
 -0.02147841  0.00356546  0.00244254 -0.00874958  0.00335196 -0.02004454
  0.00727273 -0.0049639  -0.00283447  0.00193292  0.02178847  0.00277654
 -0.00254735 -0.00066622 -0.00255556 -0.00668375 -0.01076595  0.00011337
 -0.00249377  0.00034091 -0.00147677  0.00921502  0.00202908 -0.00944988
 -0.01942078 -0.01679407  0.00718577 -0.00116959 -0.0057377  -0.00600636
 -0.00924171 -0.00394642  0.01176612 -0.00237332  0.00713691  0.00082674
 -0.01286287 -0.00071727  0.00538342  0.          0.03248453 -0.01302293
  0.00572163 -0.00174155 -0.00325657 -0.00198366 -0.01449784  0.00201685
 -0.00627516  0.00595735  0.0034348   0.0138102  -0.0050064   0.00772291
  0.00092894 -0.00696056  0.00642523 -0.01334881  0.00047059 -0.00305738
  0.01969804  0.0043956  -0.01174709 -0.00302995  0.00818235  0.01565217
 -0.02283105 -0.00443925 -0.0203004  -0.06922985  0.03500193 -0.00062166
  0.01418263 -0.00601079 -0.00900901  0.01033624  0.00086281 -0.00923645
  0.00683654  0.01716049 -0.01019541  0.00183936  0.01933905 -0.01080692
 -0.02015052 -0.00656591 -0.00448934 -0.00050106 -0.0259431   0.02393206
 -0.00113094  0.01371242  0.02320675 -0.01867799 -0.03423557  0.01330944
 -0.01300834 -0.01919386 -0.02530985 -0.03627359  0.00194444 -0.03146659
 -0.02948333  0.01754903 -0.03246377  0.03280407  0.02030457 -0.00227434
 -0.00669611 -0.00817556  0.00028923  0.00216857  0.00504905 -0.01162624
  0.01611966 -0.00828927  0.00360282  0.01938541 -0.01211438  0.01269072
 -0.00239369 -0.00663373  0.02870134  0.01519337 -0.01537415 -0.00414536
  0.00124879 -0.02300443  0.00992908  0.01657303  0.02238187  0.00621622
 -0.00872952 -0.00785801 -0.00355046  0.01274496  0.00040595 -0.00798052
 -0.01513499  0.         -0.00041534  0.00969529  0.00068587 -0.00781357
 -0.0312241  -0.00128351  0.00685421  0.00198553  0.01217268 -0.01118725
  0.02050629  0.02937916  0.00982768  0.0017331   0.00212936  0.0188579
 -0.00286757 -0.01202614 -0.01799418 -0.00094314 -0.02171274  0.01268266
 -0.00612578  0.00534173  0.00027248 -0.00885317 -0.01113096  0.00416898
 -0.01729864  0.00549218  0.02941176  0.03401361  0.02578947  0.07901488
 -0.010699    0.02968037  0.00268409 -0.04166667  0.0002429  -0.01287033
 -0.01328413 -0.02493144 -0.00255689  0.06126634 -0.02463768 -0.01027737
 -0.01163518 -0.02531646 -0.0074026  -0.00065419  0.01204504 -0.0164295
 -0.00170985  0.00711462  0.02917321 -0.01957544  0.0002593  -0.01062865
  0.00890869 -0.00311648  0.00508011 -0.00725765  0.02075718  0.03721704
 -0.01664612 -0.01981191 -0.0072918   0.00837629 -0.0057508   0.00398458
 -0.01677122 -0.00338542  0.01763784 -0.01630505 -0.00313234 -0.00589159
 -0.00711181 -0.00756068  0.0032077   0.02771116 -0.00855587  0.00052301
  0.00901725  0.01735526  0.01731381 -0.01639344  0.00508906  0.04924051
 -0.0236458  -0.02298282 -0.00644998 -0.0189664   0.00674711  0.00463977
 -0.01475305 -0.00703125  0.02150538  0.03799743  0.00643087  0.
  0.00024576  0.00737101 -0.00182927 -0.00757483  0.01440355 -0.00364078
  0.01705238 -0.01556886 -0.01374696 -0.01837918 -0.01156069 -0.01055174
 -0.00770911  0.02499029  0.0042951   0.01811321  0.00444774  0.02066421
  0.00265124  0.00384615 -0.01496648 -0.02345934  0.034354    0.01119134
  0.01594669  0.00058569 -0.01030204  0.01987225 -0.01414985  0.02647059
  0.0217765   0.0106562  -0.00077691  0.03720982 -0.00567573 -0.01055466
  0.00348318 -0.01963337 -0.02578004 -0.00204429 -0.00216229 -0.01802007
  0.0184669  -0.01585129  0.00625724  0.02464302 -0.01337379 -0.00842921
 -0.03331419  0.00831848 -0.00766058 -0.01187648  0.01706731  0.01039943
  0.00444444  0.01280857 -0.02069441 -0.01068326  0.01744393  0.00606485
 -0.00185486 -0.02404181  0.04510294 -0.00318834 -0.025931    0.01911575
  0.00345224 -0.00458716 -0.01843318 -0.00892019 -0.00757935  0.01288783
 -0.02214892  0.00048193 -0.02552987 -0.02273851  0.00240263 -0.01375047
 -0.02097723  0.0402404   0.00125597 -0.01442549 -0.0056001   0.01433508
  0.03949527  0.02209274 -0.01425178  0.01590361 -0.00640417  0.04010504
 -0.02249254 -0.00399155 -0.0189769   0.04229244 -0.00518732 -0.02085747
  0.00532544 -0.01059447 -0.00916121  0.03698367 -0.00937934 -0.00514319
  0.00340736 -0.03348946 -0.01356918 -0.02186195  0.00226017  0.00288148
 -0.01299188  0.00240476  0.01022727 -0.01099863  0.00303298 -0.00844148
  0.00635324 -0.0040404   0.00190162 -0.00733899  0.00229446 -0.01869515
  0.         -0.00777605  0.00770637 -0.01736876 -0.001451    0.00634082
 -0.00236282 -0.005      -0.01653002 -0.00147909 -0.01844869  0.00521334
 -0.00627815  0.01387172 -0.01788133 -0.02717241 -0.0060967  -0.00099857
  0.0035699  -0.00498008 -0.01129701  0.02950535 -0.0113796   0.00753162
 -0.01311707  0.01071888 -0.00947398 -0.00157031  0.03603088 -0.00110406
  0.00718431  0.00096022 -0.01603399 -0.00933148 -0.00365528 -0.00268097
  0.00240521 -0.00804517  0.00184974 -0.00156228 -0.00412518 -0.00871304
 -0.03357349 -0.00104369 -0.01119403 -0.01735849 -0.01443932  0.00888404
  0.01683918  0.00212701  0.01091571 -0.01619676 -0.01859756 -0.00155328
  0.00746733 -0.03798641 -0.00626003  0.01599095 -0.00842607 -0.02549303
 -0.01135242 -0.01148278  0.00505051 -0.02998325  0.03574512 -0.00466822
 -0.00586265 -0.01499579 -0.00650017  0.00792011 -0.0153741  -0.05447606
 -0.03357798  0.0083539   0.00263604  0.00788732  0.00633501  0.00425847
 -0.01179941  0.01119403 -0.0097786   0.02701696  0.01106676  0.00125606
 -0.01899642 -0.00785532  0.01141595 -0.01310759  0.03375761 -0.04157744
 -0.01303295 -0.00584795 -0.0170778  -0.0042471  -0.02481582  0.03379722
 -0.02480769 -0.01597318  0.03186373  0.00116527  0.00310378 -0.00251402
  0.01473439 -0.00745128 -0.00635226  0.00174351 -0.01140979 -0.02464789
 -0.0078219   0.00080857 -0.01676429 -0.01848809  0.00920887 -0.00290336
  0.01913478  0.00530612 -0.00142103 -0.01687335  0.07733664  0.01228407
 -0.00910125 -0.0097589  -0.00657005 -0.01030928 -0.02004717  0.03188929
 -0.00155491  0.05664785  0.00018423 -0.01989317 -0.0195452  -0.00996741
 -0.00677638 -0.0337232   0.01109542 -0.00219473  0.00079984 -0.00699301
  0.00462777  0.00941318 -0.0140873  -0.01126987  0.04111541 -0.01055718
 -0.00019759 -0.00474308 -0.00615568 -0.01078921  0.00908907 -0.005004
 -0.0018105   0.00261991]

用std计算简单收益率标准差

benefits_std = np.std(benefits)
print(benefits_std)
0.016605646147578305

计算对数收益率

  • 对所有的股票收盘价计算对数
  • 计算每天收盘价对数差值
log_benefits = np.diff(np.log(close))
print(log_benefits)
[ 0.01300141  0.02013108 -0.0086864  -0.00113859  0.00315956 -0.01628328
 -0.0060462  -0.00504496  0.0254799   0.03234113 -0.0145484  -0.00037265
 -0.00923621  0.00212939  0.01305258  0.03124684  0.05767699 -0.0060067
  0.00272449 -0.01807416 -0.0026585   0.01891716  0.00633988  0.03580321
 -0.0085293  -0.00440238 -0.0084183   0.01051185 -0.02519081 -0.01203739
  0.00399066  0.00113727  0.00871391 -0.00757794 -0.01291225  0.00045993
 -0.00299332  0.01850635 -0.00761238 -0.00205503  0.01531076  0.00628298
  0.00768763 -0.00724035  0.00590761 -0.0212284  -0.00660595 -0.017057
 -0.01664361 -0.00118259 -0.01238258  0.01238258 -0.00189506  0.0251696
 -0.01737552  0.00035284  0.01482373  0.01323608  0.01125587 -0.00578266
 -0.00239085  0.0028456   0.02147718 -0.02694791  0.00205503 -0.00893579
 -0.00230415  0.00712565  0.01342302 -0.00282886  0.00056641  0.0104772
  0.01634005 -0.00331309 -0.01067626  0.00134078  0.03056863 -0.01077913
 -0.02023622  0.00534761 -0.00445435  0.00278629 -0.01051699  0.00044979
 -0.00191301 -0.0048552  -0.00056609 -0.01437232  0.01096903  0.00204337
  0.00362237  0.01569539  0.00609927 -0.00276778  0.00420401  0.01250702
 -0.02171243  0.00355912  0.00243957 -0.00878809  0.00334635 -0.02024816
  0.00724641 -0.00497626 -0.00283849  0.00193105  0.02155449  0.0027727
 -0.0025506  -0.00066644 -0.00255883 -0.00670618 -0.01082432  0.00011336
 -0.00249688  0.00034085 -0.00147786  0.00917282  0.00202703 -0.00949482
 -0.01961184 -0.01693669  0.00716008 -0.00117028 -0.00575423 -0.00602447
 -0.00928468 -0.00395423  0.01169744 -0.00237614  0.00711156  0.0008264
 -0.01294632 -0.00071753  0.00536898  0.          0.03196806 -0.01310848
  0.00570532 -0.00174307 -0.00326189 -0.00198563 -0.01460396  0.00201482
 -0.00629493  0.00593967  0.00342891  0.01371571 -0.00501898  0.00769324
  0.00092851 -0.00698489  0.00640468 -0.01343871  0.00047048 -0.00306207
  0.01950655  0.00438597 -0.01181663 -0.00303455  0.00814906  0.01553094
 -0.02309571 -0.00444914 -0.02050928 -0.07174291  0.03440329 -0.00062185
  0.014083   -0.00602893 -0.00904984  0.01028319  0.00086244 -0.00927937
  0.00681328  0.01701492 -0.01024774  0.00183767  0.01915442 -0.01086574
 -0.02035631 -0.00658756 -0.00449945 -0.00050119 -0.02628556  0.02365018
 -0.00113158  0.01361925  0.02294157 -0.01885462 -0.03483534  0.01322165
 -0.01309368 -0.01938045 -0.02563565 -0.03694783  0.00194256 -0.0319723
 -0.0299267   0.01739683 -0.03300241  0.03227751  0.02010118 -0.00227693
 -0.00671863 -0.00820916  0.00028918  0.00216622  0.00503634 -0.01169435
  0.01599112 -0.00832381  0.00359635  0.01919991 -0.01218836  0.01261086
 -0.00239656 -0.00665583  0.02829717  0.01507911 -0.01549356 -0.00415398
  0.00124801 -0.02327317  0.00988011  0.0164372   0.02213508  0.00619698
 -0.00876784 -0.00788905 -0.00355678  0.01266443  0.00040587 -0.00801254
 -0.01525069  0.         -0.00041543  0.00964859  0.00068564 -0.00784426
 -0.03172196 -0.00128434  0.00683082  0.00198357  0.01209919 -0.01125029
  0.02029887  0.02895586  0.0097797   0.0017316   0.00212709  0.0186823
 -0.00287169 -0.01209904 -0.01815804 -0.00094359 -0.02195193  0.01260291
 -0.00614462  0.00532752  0.00027244 -0.0088926  -0.01119337  0.00416032
 -0.01745001  0.00547716  0.02898754  0.03344793  0.02546253  0.07604848
 -0.01075665  0.02924843  0.0026805  -0.04255961  0.00024287 -0.01295387
 -0.01337316 -0.02524749 -0.00256017  0.05946286 -0.02494627 -0.01033054
 -0.0117034  -0.02564243 -0.00743013 -0.00065441  0.01197307 -0.01656596
 -0.00171131  0.00708943  0.02875577 -0.01976958  0.00025927 -0.01068553
  0.00886924 -0.00312134  0.00506725 -0.00728411  0.02054469  0.0365412
 -0.01678622 -0.0200108  -0.00731852  0.0083414  -0.0057674   0.00397666
 -0.01691345 -0.00339116  0.01748409 -0.01643944 -0.00313726 -0.00590902
 -0.00713722 -0.00758941  0.00320256  0.02733416 -0.00859268  0.00052288
  0.00897684  0.01720638  0.01716564 -0.0165293   0.00507615  0.04806658
 -0.02392984 -0.02325105 -0.00647087 -0.01914856  0.00672445  0.00462904
 -0.01486296 -0.00705609  0.0212774   0.03729331  0.00641028  0.
  0.00024573  0.00734397 -0.00183094 -0.00760367  0.0143008  -0.00364742
  0.01690862 -0.01569133 -0.01384232 -0.01855017 -0.01162804 -0.01060781
 -0.00773898  0.02468314  0.0042859   0.01795112  0.00443788  0.0204536
  0.00264773  0.00383878 -0.0150796  -0.02373889  0.03377707  0.01112918
  0.01582087  0.00058551 -0.01035547  0.01967737 -0.01425091  0.0261263
  0.02154278  0.01059982 -0.00077722  0.03653424 -0.0056919  -0.01061075
  0.00347713 -0.01982866 -0.02611817 -0.00204639 -0.00216463 -0.01818441
  0.01829846 -0.01597827  0.00623775  0.02434428 -0.01346403 -0.00846493
 -0.03388175  0.00828407 -0.00769007 -0.01194757  0.0169233   0.01034573
  0.0044346   0.01272723 -0.02091154 -0.01074073  0.01729353  0.00604653
 -0.00185658 -0.02433553  0.04411539 -0.00319343 -0.02627314  0.01893534
  0.0034463  -0.00459771 -0.01860519 -0.00896021 -0.00760822  0.01280549
 -0.02239789  0.00048181 -0.02586141 -0.02300101  0.00239975 -0.01384589
 -0.02120038  0.03945184  0.00125518 -0.01453055 -0.00561584  0.01423331
  0.03873528  0.02185223 -0.01435431  0.01577848 -0.00642477  0.03932171
 -0.02274936 -0.00399953 -0.01915927  0.04142256 -0.00520082 -0.02107806
  0.00531131 -0.01065099 -0.00920344  0.03631618 -0.00942361 -0.00515646
  0.00340156 -0.03406308 -0.01366208 -0.02210446  0.00225762  0.00287734
 -0.01307701  0.00240187  0.01017533 -0.01105956  0.00302839 -0.00847731
  0.00633314 -0.00404859  0.00189982 -0.00736605  0.00229183 -0.01887212
  0.         -0.00780644  0.00767683 -0.01752137 -0.00145205  0.0063208
 -0.00236562 -0.00501254 -0.01666816 -0.00148019 -0.01862099  0.00519979
 -0.00629794  0.01377639 -0.01804314 -0.02754841 -0.00611536 -0.00099907
  0.00356354 -0.00499252 -0.01136131  0.02907845 -0.01144484  0.0075034
 -0.01320385  0.01066184 -0.00951915 -0.00157154  0.03539695 -0.00110467
  0.00715862  0.00095976 -0.01616392 -0.00937529 -0.00366198 -0.00268457
  0.00240232 -0.0080777   0.00184804 -0.0015635  -0.00413371 -0.00875122
 -0.03415002 -0.00104423 -0.01125715 -0.01751092 -0.01454459  0.00884481
  0.01669897  0.00212475  0.01085656 -0.01632936 -0.01877267 -0.00155449
  0.00743959 -0.0387267  -0.00627971  0.01586445 -0.00846177 -0.0258236
 -0.01141735 -0.01154921  0.00503779 -0.03044194  0.03512109 -0.00467915
 -0.0058799  -0.01510936 -0.00652139  0.00788891 -0.01549351 -0.05601607
 -0.03415467  0.0083192   0.00263257  0.00785638  0.00631503  0.00424943
 -0.01186958  0.01113184 -0.00982672  0.02665844  0.01100597  0.00125527
 -0.01917917 -0.00788633  0.01135128 -0.01319425  0.03320033 -0.04246652
 -0.01311863 -0.00586512 -0.01722531 -0.00425615 -0.02512892  0.03323864
 -0.02512059 -0.01610213  0.03136661  0.0011646   0.00309898 -0.00251719
  0.0146269  -0.00747918 -0.00637252  0.00174199 -0.01147538 -0.02495673
 -0.00785265  0.00080824 -0.0169064  -0.01866113  0.00916673 -0.00290758
  0.01895401  0.00529209 -0.00142204 -0.01701733  0.07449192  0.01220923
 -0.00914292 -0.00980683 -0.00659173 -0.01036279 -0.02025084  0.03139138
 -0.00155612  0.05510149  0.00018421 -0.0200937  -0.01973873 -0.01001742
 -0.00679944 -0.03430494  0.01103432 -0.00219714  0.00079952 -0.00701757
  0.00461709  0.00936915 -0.01418747 -0.01133386  0.04029265 -0.01061331
 -0.00019761 -0.00475437 -0.0061747  -0.01084784  0.00904802 -0.00501657
 -0.00181214  0.00261649]

筛选正的对数收益率

log_index = np.where(log_benefits>0)
print(log_benefits[log_index])
[0.01300141 0.02013108 0.00315956 0.0254799  0.03234113 0.00212939
 0.01305258 0.03124684 0.05767699 0.00272449 0.01891716 0.00633988
 0.03580321 0.01051185 0.00399066 0.00113727 0.00871391 0.00045993
 0.01850635 0.01531076 0.00628298 0.00768763 0.00590761 0.01238258
 0.0251696  0.00035284 0.01482373 0.01323608 0.01125587 0.0028456
 0.02147718 0.00205503 0.00712565 0.01342302 0.00056641 0.0104772
 0.01634005 0.00134078 0.03056863 0.00534761 0.00278629 0.00044979
 0.01096903 0.00204337 0.00362237 0.01569539 0.00609927 0.00420401
 0.01250702 0.00355912 0.00243957 0.00334635 0.00724641 0.00193105
 0.02155449 0.0027727  0.00011336 0.00034085 0.00917282 0.00202703
 0.00716008 0.01169744 0.00711156 0.0008264  0.00536898 0.03196806
 0.00570532 0.00201482 0.00593967 0.00342891 0.01371571 0.00769324
 0.00092851 0.00640468 0.00047048 0.01950655 0.00438597 0.00814906
 0.01553094 0.03440329 0.014083   0.01028319 0.00086244 0.00681328
 0.01701492 0.00183767 0.01915442 0.02365018 0.01361925 0.02294157
 0.01322165 0.00194256 0.01739683 0.03227751 0.02010118 0.00028918
 0.00216622 0.00503634 0.01599112 0.00359635 0.01919991 0.01261086
 0.02829717 0.01507911 0.00124801 0.00988011 0.0164372  0.02213508
 0.00619698 0.01266443 0.00040587 0.00964859 0.00068564 0.00683082
 0.00198357 0.01209919 0.02029887 0.02895586 0.0097797  0.0017316
 0.00212709 0.0186823  0.01260291 0.00532752 0.00027244 0.00416032
 0.00547716 0.02898754 0.03344793 0.02546253 0.07604848 0.02924843
 0.0026805  0.00024287 0.05946286 0.01197307 0.00708943 0.02875577
 0.00025927 0.00886924 0.00506725 0.02054469 0.0365412  0.0083414
 0.00397666 0.01748409 0.00320256 0.02733416 0.00052288 0.00897684
 0.01720638 0.01716564 0.00507615 0.04806658 0.00672445 0.00462904
 0.0212774  0.03729331 0.00641028 0.00024573 0.00734397 0.0143008
 0.01690862 0.02468314 0.0042859  0.01795112 0.00443788 0.0204536
 0.00264773 0.00383878 0.03377707 0.01112918 0.01582087 0.00058551
 0.01967737 0.0261263  0.02154278 0.01059982 0.03653424 0.00347713
 0.01829846 0.00623775 0.02434428 0.00828407 0.0169233  0.01034573
 0.0044346  0.01272723 0.01729353 0.00604653 0.04411539 0.01893534
 0.0034463  0.01280549 0.00048181 0.00239975 0.03945184 0.00125518
 0.01423331 0.03873528 0.02185223 0.01577848 0.03932171 0.04142256
 0.00531131 0.03631618 0.00340156 0.00225762 0.00287734 0.00240187
 0.01017533 0.00302839 0.00633314 0.00189982 0.00229183 0.00767683
 0.0063208  0.00519979 0.01377639 0.00356354 0.02907845 0.0075034
 0.01066184 0.03539695 0.00715862 0.00095976 0.00240232 0.00184804
 0.00884481 0.01669897 0.00212475 0.01085656 0.00743959 0.01586445
 0.00503779 0.03512109 0.00788891 0.0083192  0.00263257 0.00785638
 0.00631503 0.00424943 0.01113184 0.02665844 0.01100597 0.00125527
 0.01135128 0.03320033 0.03323864 0.03136661 0.0011646  0.00309898
 0.0146269  0.00174199 0.00080824 0.00916673 0.01895401 0.00529209
 0.07449192 0.01220923 0.03139138 0.05510149 0.00018421 0.01103432
 0.00079952 0.00461709 0.00936915 0.04029265 0.00904802 0.00261649]

计算年波动率

年波动率等于对数收益率的标准差除以其均值,再除以交易日倒 数的平方根,通常交易日取252天。

annual_volatility = np.std(log_benefits) / np.mean(log_benefits)
year_volatility = annual_volatility / np.sqrt(1./252.)
print(year_volatility)
-363.35865128035056

计算月波动率

月波动率等于对数收益率的标准差除以其均值,再除以交 易月倒数的平方根,交易月为12月

month_volatility = annual_volatility / np.sqrt(1./12.)
print(month_volatility)
-79.29135828139378

计算连乘

计算所有元素乘积

nums = np.arange(6,10)
print(nums)
[6 7 8 9]
print(np.prod(nums))
3024

678*9=3024

计算累乘

print(np.cumprod(nums))
[   6   42  336 3024]

数组中共有:6 7 8 9四个元素

当前元素与前一元素的积为作为新元素

  • 6*1 = 6
  • 7*6 = 42
  • 7*8 = 336
  • 8*9 = 3024

数组的修剪

将比最小值小的元素替换为给定最小值,将比最大值大的元素替换为给定最大值,大于最小值小于最大值的数不变

nums_2 = np.array([0,1,2,3,4,5])
print(nums_2.clip(1,4))
[1 1 2 3 4 4]

数组的压缩(ndarray方法)

返回给定条件筛选后的数组

condition = nums_2 > 2
print(condition)
print(nums_2.compress(condition))
[False False False  True  True  True]
[3 4 5]

求和

print(np.sum(nums_2))
15

日期处理函数

python中时间日期格式化符号:

%y 两位数的年份表示(00-99)

%Y 四位数的年份表示(000-9999)

%m 月份(01-12)

%d 月内中的一天(0-31)

%H 24小时制小时数(0-23)

%I 12小时制小时数(01-12)

%M 分钟数(00=59)

%S 秒(00-59)

%a 本地简化星期名称

%A 本地完整星期名称

%b 本地简化的月份名称

%B 本地完整的月份名称

%c 本地相应的日期表示和时间表示

%j 年内的一天(001-366)

%p 本地A.M.或P.M.的等价符

%U 一年中的星期数(00-53)星期天为星期的开始

%w 星期(0-6),星期天为星期的开始

%W 一年中的星期数(00-53)星期一为星期的开始

%x 本地相应的日期表示

%X 本地相应的时间表示

%Z 当前时区的名称

%% %号本身

from datetime import datetime
date_str = "2022-02-05"
date = datetime.strptime(date_str,"%Y-%m-%d")
# 查看那一天星期几
print(date.weekday())
5
print(date.year)
print(date.month)
print(date.day)
2022
2
5

获取最大值、最小值下标

rand = np.random.randint(5,size=(5))
print(rand)
max = np.argmax(rand)
min = np.argmin(rand)
print(max)
print(min)
[1 1 4 4 2]
2
0

根据索引值获取对应数据

从给定ndarray中获取对应索引值(或索引数组)的数据

print(np.take(rand,max))
print(np.take(rand,min))
4
1

指定范围内相同间隔取点

# 0-10相同间隔取5个点
# 间隔为最大值-最小值/点数-1
data = np.linspace(0,10,5)
print(data)
[ 0.   2.5  5.   7.5 10. ]

计算三角函数值

ysin = np.sin(data)
ycos = np.cos(data)
te = np.pi*(2/3)
print(ysin)
print(ycos)
print(te)
[ 0.          0.59847214 -0.95892427  0.93799998 -0.54402111]
[ 1.         -0.80114362  0.28366219  0.34663532 -0.83907153]
2.0943951023931953

综合案例

文件中的数据为给定时间范围内某股票的数据,现要求:获取该时间范围内交易日周一、周二、周三、周四、周五分别对应的平均收盘价及哪天的平均收盘价最高,哪天的平均收盘价最低。

思路:

  1. 将日期转化为星期
  2. 分别筛选出星期数值在0~4每天的收盘数据
  3. 计算每天的平均收盘价

定义时间转换函数

from datetime import datetime
def date_to_num(s):
    return datetime.strptime(s.decode("ascii"),"%Y-%m-%d").weekday()

loadtxt()默认读取数据需要为二进制编码格式,而返回的值为字节字符串bytes,所以需要把它转化二进制格式的string,故需要对字符串解码,使用函数decode(‘asii’),变成string格式。

import numpy as np
weekday,close = np.loadtxt(
    "./Datas/stock.csv",
    delimiter=",",
    skiprows=1,
    usecols=(0,3),
    converters={0:date_to_num}, # 列批处理
    unpack = True
)

对工作日计算平均值存average数组

average = np.zeros(5)
print(average)
[0. 0. 0. 0. 0.]
  • 从0-4遍历周一到周五
  • 用where函数得到各工作日索引存储在indices数组中
  • 用take函数得到索引对应元素
  • 将每个工作日平均值放入average数组中
for i in range(5):
    # 筛选符合条件的所有索引值
    indices = np.where(weekday == i)
    # 获取索引值对应数据
    prices = np.take(close,indices)
    print("-"*20 + "周{}所有收盘数据".format(i+1) + "-"*20)
    print(prices)
    # 计算平均值
    avg = np.mean(prices)
    average[i] = avg
--------------------周1所有收盘数据--------------------
[[77.18 79.25 79.1  79.92 88.21 91.84 88.59 88.08 87.68 89.45 84.61 86.5
  88.45 87.5  88.5  90.4  91.35 88.91 87.04 90.45 90.07 88.64 90.29 88.21
  88.71 85.5  83.29 83.65 85.64 84.29 85.89 85.6  86.45 87.6  77.71 80.3
  82.39 80.72 79.58 78.14 72. &nbsp; 66.76 69.15 70.13 73.5  71.2  73.9  72.2
  70.03 72.16 76.72 72.54 72.77 71.01 84.12 82.36 82.8  76.43 76.44 77.01
  81.1  77.8  76.62 75.06 78.55 80.93 77.95 80.86 81.85 82.2  77.23 82.98
  83.1  86.22 90.03 90.38 87.69 87.05 84.62 85.18 84.03 87.2  84.88 79.27
  78.57 83. &nbsp; 84.84 84.95 85.11 79.82 79.13 77.16 76.18 72.89 70.03 70.37
  69.94 71.8  70.28 64.16 65.6  61.91 59.4  59.35 54.5  54.01 55.12 54.93
  52.7  50.71 51.58 51.12 49. &nbsp; 52.74 49.86 53.21 50.12 50.4  50.6  49.71]]
--------------------周2所有收盘数据--------------------
[[78.19 77.97 81.7  80.97 86.63 91.06 87.53 86.95 87.5  89.98 84.51 85.01
  87.94 87.68 88.25 89.44 89.52 88.95 88. &nbsp; 90.2  90.29 88.2  90.06 88.22
  88.89 85.4  84.27 83.59 86.13 84.46 85.46 86.15 86.83 85.6  80.43 81.13
  81.55 80.19 79.49 79.18 72.14 68.95 69.17 69.97 71.02 72.37 72.38 73.93
  72.9  70.51 74.28 76.5  73.46 71.96 71.4  83.22 81.3  80.76 76.38 78.67
  76.77 79.75 78.11 76.38 77.14 79.91 79.07 76.8  81.38 81.23 81.07 79.16
  83.2  84.03 85. &nbsp; 93.38 88.05 86.3  84.15 85.5  84.27 87.82 86.8  83.
  78.18 78.13 84.32 83.23 84.05 85.4  80.05 79.37 79.03 76.56 76. &nbsp; 73.27
  70.28 70.9  72.46 71.13 70.41 67.07 64.73 64.38 62.9  59.7  58.46 52.67
  54.24 55.73 54.21 51.8  49.9  52.34 49.86 49.26 52.26 51.45 52.17 50.01
  49.69 50.36 49.62]]
--------------------周3所有收盘数据--------------------
[[79.78 77.5  80.52 83.54 86.4  90.66 87.88 86.99 88.85 88.09 83.47 85.04
  87.73 86.9  88.3  89.56 90. &nbsp; 88.78 88.18 90.58 89.5  87.95 90. &nbsp; 88.
  88.05 84.91 84.07 84.04 85.98 83.93 85. &nbsp; 85.81 85.22 80.38 81.2  81.7
  79.83 80.58 78.15 69.87 70.35 69.32 69.39 70.85 72.07 74. &nbsp; 73.81 73.34
  72.95 70.65 75.01 75.58 73.01 72.26 73.5  85.69 80.22 79.93 77.3  77.13
  77.16 78.17 76.8  75.93 76.48 78.6  78.56 76.26 81.38 82.4  79.58 79.5
  83.52 85.37 87.25 92.85 87.87 86.84 84.85 85.88 85.74 87.54 85.2  83.04
  76.54 79.25 83.78 86.75 83.28 82.54 79.01 78.7  78.45 77.15 75.62 72.81
  69.93 69.97 72.38 70.87 70.3  67. &nbsp; 65.82 64.28 62.37 57.91 58.08 53.11
  53.6  55.8  56.04 51.58 51.49 51.95 49.47 47.78 49.19 51.75 51.37 51.65
  50.05 49.13 50.05 49.75]]
--------------------周4所有收盘数据--------------------
[[79.09 77.11 80.49 88.5  88.05 89.9  87.98 86.73 89.41 87.51 84.51 86.31
  87.98 86.7  89.23 92.34 89.6  88.35 88.5  91.72 89.8  88.12 89.77 88.03
  86.34 84.4  84.67 84.04 85.7  84.43 86.12 85.04 85.55 83.49 81.52 80.45
  83.28 79.79 82.45 76.65 67.81 70.19 69.67 69.64 70.38 72.16 74.46 73.23
  72.23 72.38 71.51 75.14 74.22 73.4  76. &nbsp; 85.92 78.22 79. &nbsp; 76.03 77.15
  76.6  77.6  76.54 75.39 76.52 79. &nbsp; 77.07 81.4  82.1  78.66 80.94 82.27
  85.42 89.15 91.87 87.68 88.98 84.2  86.98 86.26 85.27 84.44 80.92 79.62
  82.38 87.14 86.3  86.36 81.42 79.2  79.2  78.63 75.81 74.37 73.82 70.53
  69.14 70.72 72.9  70.68 70.01 66.25 65.96 64.76 60.78 59.98 58.54 53.25
  54.2  54.74 53.71 50.3  51.55 51.62 49.51 48.22 48.36 51.41 54.28 51.3
  49.7  51.15 49.51]]
--------------------周5所有收盘数据--------------------
[[79. &nbsp; 79.75 87.97 88.61 90.85 88.75 88.35 90.1  86.03 84.35 87.46 89.89
  87.32 90.7  89.85 88.3  89.9  89.75 88. &nbsp; 90.04 89.17 87.9  84.89 83.62
  84.74 86.77 85.53 84.72 86.2  84.78 86.25 81.03 81. &nbsp; 82.38 77.72 80.91
  74.71 69. &nbsp; 69.72 68.86 70.99 72.4  70.5  72.97 72.23 70.12 70.71 75.3
  74.15 73.42 77.96 82.34 78.02 77. &nbsp; 75.9  76.33 78.19 78.25 77.89 74.82
  77.21 82.89 77.59 77.9  82. &nbsp; 83.5  77.83 81.3  80.34 84.54 90.1  92.19
  86.1  87.79 83.2  86.1  86.9  83.8  79.08 79.72 84.2  85.18 84.5  85.55
  79.64 80.01 78.88 77.16 75.7  74.26 72.5  70.1  71.18 70.05 72.97 70.85
  69.4  65.1  66.68 62.3  60.09 59.7  57.64 53.67 53.67 54.31 53.01 52.
  51.71 51.71 48.68 48.08 52.1  50.88 54.29 49.57 49.93 50.61 49.96]]
print(average)
[76.55408333 76.41154472 75.98870968 76.34926829 75.98537815]

获取最大值与最小值的索引

max = np.argmax(average)
min = np.argmin(average)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇