zoukankan      html  css  js  c++  java
  • numpy函数hstack,vstack,dstack把几个小数组合并成一个大数组

    vstack、hstack和dstack都用于把几个小数组合并成一个大数组。它们的差别是小数组的元素在大数组中的排列顺序有所不同

    一、vstack

    vstack实现了轴0合并。vstack的字母v表示vertical的意思,相当是追加的意思

    numpy.vstack(tup)

    tup:两个数组,除第一轴外,所有阵列的形状都必须相同。一维数组必须具有相同的长度

    shape(N,)的1维数组已重塑为(1,N)后沿第一轴进行连接

    #这个是(2,),会变成(1,2),因此下面这两种结果是一样的
    import numpy as np
    a = [1,2]
    b = [3,4]
    c = np.vstack((a,b))
    print(c)
    
    #这个是(1,2)
    a = [[1,2]]
    b = [[3,4]]
    c = np.vstack((a,b))
    print(c)
    '''
    [[1 2]
     [3 4]]
    [[1 2]
     [3 4]]
    '''

    总结:有两列数据,然后再转置

    pd.DataFrame(c)

    二、hstack

      hstack表示轴1合并

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

    相当右边追加

    三、dstack

    看看之前使用到的

    newvalues=np.dstack((np.repeat(t.reportno.values,list(map(len,t.data_list.values))),np.concatenate(t.data_list.values)))
    pd.DataFrame(data=newvalues[0],columns=['reportno','data_list'])

    沿深度方向(沿第三轴)按顺序堆叠数组

    numpy.dstack(tup)

    参数:

    tup:sequence of arrays,两个数组,除第三个轴外,所有阵列的形状都必须相同。一维或二维阵列必须具有相同的形状。

    值得注意的是:

    shape(M,N)的2维数组已重塑为(M,N,1),shape(N,)的1维数组 已重塑为(1, N,1),再按照第三维相加

    现在,a、b在2号轴上被连接起来。如果a、b是一维数组,或是二维数组,系统首先将a、b变为三维数组,再按照2号轴进行合并操作,把a追加到c中,再把b的元素排到c中。在结果中,来自于b的元素的2号轴的下标将变大,因此排到a的后面,但各元素其它轴的坐标不变。

    a = np.array((1,2,3))
    b = np.array((2,3,4))
    np.dstack((a,b))
    '''
    np.dstack((a,b))[0] 和上面的结果也是一样的
    array([[[1, 2], [2, 3], [3, 4]]]) ''' np.dstack((a,b)).shape #(1, 3, 2) 沿第三轴相加,因此是1,3,2 a.shape #(3,) b.shape #(3,)

    再看二维的

    a = np.array([[1,2],
                  [3,4]])
    b = np.array([[5,6],
                  [7,8]])
    c = np.dstack([a,b])
    print(c)
    '''
    [[[1 5]
      [2 6]]
     [[3 7]
      [4 8]]]
    '''
    
    print(c[:,:,0])
    '''
    [[1 2]
     [3 4]] 
    '''
    
    print(c[:,:,1])
    '''
    [[5 6]
     [7 8]]
    '''
    
    print(c[0])
    print(c[1])
    '''
    [[1 5]
     [2 6]]
     
    [[3 7]
     [4 8]]
    '''

    看来这么多内在的东西,我们总结一下:

    参数是一维时,其实就是就是两列数据,我们需要弄成df中的两列,二维时不清楚,反正就是对位merge

  • 相关阅读:
    java自学
    java自学
    java自学
    java自学
    java自学
    java自学
    java自学
    自学Java0730
    自学Java0729
    自学Java0728
  • 原文地址:https://www.cnblogs.com/cgmcoding/p/14189314.html
Copyright © 2011-2022 走看看