Advertisement

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

阅读量:

numpy是一个高效处理大量数据的科学计算核心库,在其主要功能基于ndarray(一种高效存储与操作的大规模多维数组结构)。

创建ndarray

复制代码
    import numpy as np
    #创建一维
    data1 = [1,2,3,4]
    arr1 = np.array(data1)
    
    
    python
复制代码
    array([1, 2, 3, 4])
复制代码
    #创建二维
    data2 = [data1,data1]
    arr2 = np.array(data2)
    
    
    python
复制代码
     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)
    
    
    python
复制代码
     [1 2 3 4] 
    
    [[1 2 3 4]
     [1 2 3 4]]

ndarray中的数据与Python提供的基础数据结构list和tuple不同,在于其元素必须全部具有相同的类型(例如integer, double-precision floating-point, boolean, string, unicode等)。这些数值类型的转换可以通过numpy库中的astype函数来实现(相对简单),此处无需编写代码演示部分

类似于Matlab中的array-like数据结构可以通过索引和切片等方法实现对特定行和列的数据提取操作

复制代码
    arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
    #提取某行
    arr[1]
    
    
    python
复制代码
    array([4, 5, 6])
复制代码
    #提取某列
    arr[:,1]
    
    
    python
复制代码
    array([2, 5, 8])
复制代码
    #提取某个元素
    arr[1,1]
    
    
    python
复制代码
    5
复制代码
    #提取某些行、列(注意x:y代表从x行/列到y-1行/列)
    arr[0:3,0:2]
    
    
    python
复制代码
    array([[1, 2],
       [4, 5],
       [7, 8]])
复制代码
    #可以通过提取多行多列对某些值进行统一赋值
    arr[0:2,0:1] = 100
    
    
    python
复制代码
    array([[100,   2,   3],
       [100,   5,   6],
       [  7,   8,   9]])
复制代码
    #有时候想要一份修改新值的array而不修改原数据
    arr2 = arr.copy()
    arr2[0:2,0:1] = 10
    
    
    python
复制代码
    [[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)
    
    
    python
复制代码
    加法:
     [[ 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.]]
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-12/kgExrNjezKy9CSGhFaAdo6i51fTH.png)

常见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
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-12/EQ6X3bcMlD1PKeFCUgH7zatyw8Ru.png)

展示结果如下:

在这里插入图片描述

全部评论 (0)

还没有任何评论哟~