numpy学习中np.r_和np.c_用法及极简直线拟合

np.r_和np.c_算是numpy库中实现矩阵拼接的语法糖,函数名称简洁明了。比np.insert, np.vstack, np.concatenate等拼接方法使用简便。
r: 行方向拼接,即列数不变;
c: 列方向拼接,即行数不变。

    t = np.arange(8)
    A_r = np.r_[t, np.ones_like(t)]
    A_c = np.c_[t, np.ones_like(t)]
    print(t.shape)
    print(A_r.shape)
    print(A_c.shape)

在这里插入图片描述
np.vstack实现矩阵拼接:

    t = np.arange(8)
    h = np.hstack((t,np.ones_like(t)))
    v = np.vstack((t,np.ones_like(t)))
    print(h.shape)
    print(v.shape)

在这里插入图片描述
np.concatenate实现矩阵拼接,因为concatenate方法只能对多维矩阵进行拼接,需要对np.range(8)的一维数据进行扩维,利用np.newaxis即可:

    t = np.arange(8)
    t_r = t[np.newaxis,:]
    t_c = t[:,np.newaxis]

    print(t_r.shape)
    print(t_c.shape)

    ccv = np.concatenate([t_r,t_r],axis=0)
    cch = np.concatenate([t_r,t_r],axis=1)

    print(ccv.shape)
    print(cch.shape)

在这里插入图片描述
总结上述结果,可以发现:
axis=0: 对应着np.r_ 和 np.vstack,即行方向拼接,列数不变;
axis=1: 对应着np.c_ 和 np.hstack,即列方向拼接,行数不变;

应用示例,利用np.c_简单实现直线拟合:

    nums = 10
    x = np.arange(nums)
    noise = [2 * i - 1 for i in np.random.rand(nums)]
    y = x + noise
    A = np.c_[x,np.ones_like(x)]
    paras = np.linalg.lstsq(A,y,rcond=None)[0]
    print(paras)
    char = ''
    if paras[1] > 0:
        char = '+'
    plt.rc('font',size=16)
    plt.plot(x,y,'*',label='OriginalData',markersize=3)
    plt.plot(x,A.dot(paras),'r',label="FittingLine:y={}*x{}{}".format(round(paras[0],3),char,round(paras[1],3)))
    plt.legend()
    plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值