zoukankan      html  css  js  c++  java
  • numpy函数hstack,vstack,dstack简介

    vstack、hstack和dstack都用于把几个小数组合并成一个大数组。它们的差别是小数组的元素在大数组中的排列顺序有所不同。把两部手机摆到一起有几种方式?水平的左右排列,垂直的上下排列,还可以把手机一扣在手机二的顶上,把它们摞起来。这三种排列方式体现了vstack、hstack和dstack在合并数组时的特点。

    一、vstack

        vstack实现了轴0合并。vstack的字母v表示vertical的意思,提示用户把它想象成垂直合并。观察一维和二维数组的情况,b在结果中被排在a的后面,形成a在上,b在下的垂直关系。

    import numpy as np
    a = [1,2]
    b = [3,4]
    c = np.vstack((a,b))
    print(c)
    a = [[1,2]]
    b = [[3,4]]
    c = np.vstack((a,b))
    print(c)
    '''
    [[1 2]
     [3 4]]
    [[1 2]
     [3 4]]
    '''

    显然,a被存到c[0]中,b被存到c[1]中,a、b二者在0号轴上连接起来。对于两个高维数组a、b来说,vstack在合并a、b时已全无垂直或上下这样直观的位置关系,但a、b仍旧保持在0号轴上a在前2层,b在后2层的位置关系。程序中np.sum(c[2:]-b)等于0表示c[2:]和b拥有同样的元素,np.sum(c[:2]-a)等于0表示c[:2]与a有同样的元素。想想c有什么样的形状?答曰(4,3,4,5)。

    a = np.arange(120).reshape(2,3,4,5)
    b = np.arange(120,240).reshape(2,3,4,5)
    size = a.shape[0]
    print(np.sum(c[:2]-a))
    print(np.sum(c[2:]-b))
    # 0
    # 0

    二、hstack

        hstack表示轴1合并。hstack的字母h来自于horizontal,表示两个数组是水平的,hstack((a,b))将把b排在a的右边的意思。

    print(np.hstack([[1,2],[3]]))
    # [1,2,3]

    现在没有增维,结果不像vstack,对一维数组合并的结果还是一维的。

    a = [[1,2],
         [3,4]]
    b = [[5],
         [6]]
    print(np.hstack([a,b]))
    # [[1 2 5]
    #  [3 4 6]]

    在结果c中,b就在a的右边。它表明c中b元素的1轴坐标会大于a元素的1轴坐标。对于高维数组而言,如下例所示,a的a[:0]、a[:1]、a[:,2],构成c的c[:,0]、c[:,1]、c[:,2],b的[:,0]构成c的c[:4]。a、b在1号轴坐标上被连接起来。

    a = np.arange(120).reshape(2,3,4,5)
    b = np.arange(120,160).reshape(2,1,4,5)
    size = a.shape[1]
    c = np.hstack([a,b])
    print(np.sum(c[:,:size]-a))
    print(np.sum(c[:,size:]-b))
    # 0
    # 0
  • 相关阅读:
    Spring----MyBatis整合
    VueRouter案列
    Vue-Router
    axios用法
    Fetch的使用
    Promise用法
    组件之间传值
    局部组件注册方式
    学习组件与模板
    如何实现new,call,apply,bind的底层原理。
  • 原文地址:https://www.cnblogs.com/liuys635/p/11260977.html
Copyright © 2011-2022 走看看