量化交易之模型算法篇 - numpy矩阵的合并、拆分、解线性方程组、插值、最小二乘法

# 矩阵合并

def matrix_merge():
    """
    矩阵合并
    """
    a = np.arange(16).reshape(4, 4)

    b = np.floor(5 * np.random.random(size=(2, 4)))  # shape = (2, 4)

    c = np.ceil(6 * np.random.random(size=(4, 2)))

    d = np.vstack([a, b])  # 上下合并矩阵
    e = np.hstack([a, c])  # 左右合并矩阵
# 矩阵分割

def matrix_split():
    """
    矩阵分割
    """
    a = np.arange(16).reshape(4, 4)
    b = np.vsplit(a, 2)  # 横向分割
    c = np.hsplit(a, 4)  # 纵向分割
# 解方程组

def solve_func_group():
    """
    解方程组
    """
    a = np.array([[3, 1], [1, 2]])
    b = np.array([9, 8])
    x1 = np.linalg.inv(a) @ b
    x2 = np.dot(np.linalg.inv(a), b)
    x3 = np.linalg.solve(a, b)

    a_det = np.linalg.det(a)
# 解方程组

def solve_func_group1():
    x1, x2 = sp.symbols('x1, x2')
    s = sp.solve([x1**2 + x2**2 - 1, x1 - x2], [x1, x2])

    x = sp.symbols('x:2')
    a = sp.solve([x[0]**2 + x[1]**2 - 1, x[0]-x[1]], x)
# 解多维线性方程组

def solve_multi_func_group():
    """
    解多维线性方程组
    """
    a = 4 * np.eye(1000) + np.eye(1000, k=1) + np.eye(1000, k=-1)
    b = np.arange(1, 1001).reshape([1000, 1])

    ret = np.dot(np.linalg.inv(a), b)
# 插值

def insert_value_curve():
    x0 = np.arange(1, 7)
    y0 = np.array([16, 18, 21, 17, 15, 12])

    A = np.vander(x0)  # 求范德蒙德矩阵

    p = np.linalg.inv(A) @ y0  # 求插值多项式的系数
    print('从高次幂到低次幂的系数为: ' + str(np.round(p, 4)))

    yh = np.polyval(p, [1.5, 2.6])  # 计算函数值
    print('预测值为: ' + str(np.round(yh, 4)))

    plt.plot(x0, y0, 'o')  # 画出已知数据点的散点

    xt = np.linspace(1, 6, 100)
    plt.plot(xt, np.polyval(p, xt))  # 画插值曲线
    plt.show()
# 拉格朗日插值

def lagrange_insert_value():
    x0 = np.arange(1, 7)
    y0 = np.array([16, 18, 21, 17, 15, 12])
    p = lagrange(x0, y0)  # 求拉格朗日多项式的系数
    print('从高次幂到低次幂的系数为: ' + str(np.round(p, 4)))

    yh = np.polyval(p, [1.5, 2.6])  # 计算多项式的函数值
    print('预测值为: ' + str(np.round(yh, 4)))
# 最小二乘法

def smallest_double_multi_method():
    t = np.arange(8)
    y = np.array([27, 26.8, 26.5, 26.3, 26.1, 25.7, 25.3, 24.8])

    tb = t.mean()
    yb = y.mean()

    a1 = sum((t - tb) * (y - yb)) / sum((t - tb) ** 2)
    b1 = yb - a1 * tb
    print('拟合的多项式系数: ' + str([a1, b1]))

    A = np.vstack([t, np.ones(len(t))]).T
    p = np.linalg.pinv(A) @ y
    print('拟合的多项式系数: ' + str(p))

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值