金融量化python应用基础篇(1)--numpy的使用

numpy是高性能科学计算和数据分析的基础包,其主要操作对象为ndarray(一个快速,灵活的大数据容器)

创建ndarray

import numpy as np
#创建一维
data1 = [1,2,3,4]
arr1 = np.array(data1)
array([1, 2, 3, 4])
#创建二维
data2 = [data1,data1]
arr2 = np.array(data2)
 array([[1, 2, 3, 4],
   [1, 2, 3, 4]])
#也可以手动
arr1 = np.array([1,2,3,4])
print(arr1,"\n")
arr2 = np.array([[1,2,3,4],[1,2,3,4]])
print(arr2)
 [1 2 3 4] 

[[1 2 3 4]
 [1 2 3 4]]

array中数据不同于python提供的基础数据结构list、tuple,其中元素必须同类型。例如int、double、bool、string_ 、unicode_ 可以采用astype函数进行不同类型之间的转化这部分较为简单,不写代码演示

类似与matlab,array数据结构可以通过索引、切片等方式进行提取指定行、列进行操作

arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
#提取某行
arr[1]
array([4, 5, 6])
#提取某列
arr[:,1]
array([2, 5, 8])
#提取某个元素
arr[1,1]
5
#提取某些行、列(注意x:y代表从x行/列到y-1行/列)
arr[0:3,0:2]
array([[1, 2],
   [4, 5],
   [7, 8]])
#可以通过提取多行多列对某些值进行统一赋值
arr[0:2,0:1] = 100
array([[100,   2,   3],
   [100,   5,   6],
   [  7,   8,   9]])
#有时候想要一份修改新值的array而不修改原数据
arr2 = arr.copy()
arr2[0:2,0:1] = 10
[[100   2   3]
[100   5   6]
 [  7   8   9]] 

[[10  2  3]
[10  5  6]
 [ 7  8  9]]

numpy最重要的功能是可以高效进行大量数据之间的运算

arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
#两个array之间的简单运算
print("加法:\n",arr+arr,"\n","减法:\n",arr-arr,"\n","乘法:\n",arr*arr,"\n","除法:\n",arr/arr)
加法:
 [[ 2  4  6]
 [ 8 10 12]
 [14 16 18]] 
 减法:
 [[0 0 0]
 [0 0 0]
 [0 0 0]] 
 乘法:
 [[ 1  4  9]
 [16 25 36]
 [49 64 81]] 
 除法:
 [[ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 1.  1.  1.]]

常见array内数据统计(这部分不写代码展示)

方法 说明
sum 对行列或者所有数据求和
mean 求算数平均
std、var 标准差、方差
min、max 最小值、最大值
argmin、argmax 最小值、最大值的索引

很多金融模型都依赖与正态分布等分布模型,我们可以通过numpy生成随机数,将原本连续的金融数据离散化从而进行近似模拟

import numpy.random as npr
import matplotlib.pyplot as plt
#采样次数为1000
size = 1000
#n = 100,p = 0.3的二项分布
rand1 = npr.binomial(100,0.3,size)
#均值为10,标准差20的正态分布
rand2 = npr.normal(10,20,size)
#自由度为0.5的卡方分布
rand3 = npr.chisquare(0.5,size)
#λ为2的泊松分布
rand4 = npr.poisson(2,size)
fig,((ax1,ax2),(ax3,ax4)) = plt.subplots(nrows=2,ncols=2,figsize = (10,10))
ax1.hist(rand1,bins = 25)
ax1.set_title("binomial")
ax1.set_ylabel("frequency")
ax1.grid(True)
ax2.hist(rand2,bins = 25)
ax2.set_title("normal")
ax2.set_ylabel("frequency")
ax2.grid(True)
ax3.hist(rand3,bins = 25)
ax3.set_title("chisquare")
ax3.set_ylabel("frequency")
ax3.grid(True)
ax4.hist(rand4,bins = 25)
ax4.set_title("poisson")
ax4.set_ylabel("frequency")
ax4.grid(True)

展示结果如下:
金融量化python应用基础篇(1)--numpy的使用_第1张图片

你可能感兴趣的:(量化金融)