zoukankan      html  css  js  c++  java
  • 数组的拼接

    水平数组组合

    通过 hstack 函数可以将两个或多个数组水平组合起来形成一个数组,那么什么叫做数组 的水平组合。现在有两个 2*3 的数组 A 和 B。
    数组 A

    0 1 2 
    3 4 5 

    数组 B

    6 7 8 
    9 10 11

    使用 hstack 函数将两个数组水平组合的代码如下: hstack(A,B)
    返回的结果:

     0 1 2 6 7 8 
     3 4 5 9 10 11 

    可以看到,数组 A 和数组 B 在水平方向首尾连接了起来,形成了一个新的数组。这就是数组的水平组合。多个数组进行水平组合的效果类似。但数组水平组合必须要满足一个条 件,就是所有参与水平组合的数组的行数必须相同,否则进行水平组合会抛出异常。
    垂直数组组合
    通过 vstack 函数可以将两个或多个数组垂直组合起来形成一个数组,那么什么叫数组的 垂直组合呢?现在以两个 2*3 的数组 A 和 B 为例
    数组 A

    0 1 2
    3 4 5 

    数组 B

     6 7 8 
     9 10 11

    使用 vstack 函数将两个数组垂直组合代码:vstack(A,B)
    运行的结果是:

    0 1 2 
    3 4 5 
    6 7 8 
    9 10 11 

    数组的拼接

    函数描述
    concatenate连接沿现有轴的数组序列
    hstack水平堆叠序列中的数组(列方向)
    vstack竖直堆叠序列中的数组(行方向)

    numpy.concatenate 函数用于沿指定轴连接相同形状的两个或多个数组,格式如下: numpy.concatenate((a1, a2, ...), axis)
    参数说明:
    a1, a2, …:相同类型的数组
    axis:沿着它连接数组的轴,默认为 0
    concatenate 实现数组的拼接

    
    a=np.array([[1,2,3],[4,5,6]]) 
    print(a) 
    b=np.array([['a','b','c'],['d','e','f']]) 
    print(b) 
    print(np.concatenate([a,b]))
    print('垂直方向拼接 相当于 vstack') 
    print(np.concatenate([a,b],axis=0)) 
    print('水平方向拼接 相当于 hstack') 
    print(np.concatenate([a,b],axis=1)) 

    运行结果:

    [[1 2 3]
     [4 5 6]]
    [['a' 'b' 'c']
     ['d' 'e' 'f']]
    [['1' '2' '3']
     ['4' '5' '6']
     ['a' 'b' 'c']
     ['d' 'e' 'f']]
    垂直方向拼接 相当于 vstack
    [['1' '2' '3']
     ['4' '5' '6']
     ['a' 'b' 'c']
     ['d' 'e' 'f']]
    水平方向拼接 相当于 hstack
    [['1' '2' '3' 'a' 'b' 'c']
     ['4' '5' '6' 'd' 'e' 'f']]

    numpy.hstack 它通过水平堆叠来生成数组。
    numpy.vstack 它通过垂直堆叠来生成数组。
    三维数组的拼接

    import numpy as np
    aa=np.arange(1,37).reshape(3,4,3)
    print(aa)
    bb=np.arange(101,137).reshape(3,4,3)
    print(bb)
    print('axis=0'*10)
    print(np.concatenate((aa,bb),axis=0)) #6 4 3
    print('axis=1'*10)
    print(np.concatenate((aa,bb),axis=1)) #3,8,3
    print('axis=2'*10)
    print(np.concatenate((aa,bb),axis=2)) #3,4,6

    运行结果如下:

    [[[ 1  2  3]
      [ 4  5  6]
      [ 7  8  9]
      [10 11 12]]
    [[13 14 15]
      [16 17 18]
      [19 20 21]
      [22 23 24]]
      [[25 26 27]
      [28 29 30]
      [31 32 33]
      [34 35 36]]]
      [[[101 102 103]
      [104 105 106]
      [107 108 109]
      [110 111 112]]
      [[113 114 115]
      [116 117 118]
      [119 120 121]
      [122 123 124]]
      [[125 126 127]
      [128 129 130]
      [131 132 133]
      [134 135 136]]]
      axis=0axis=0axis=0axis=0axis=0axis=0axis=0axis=0axis=0axis=0
      [[[  1   2   3]
      [  4   5   6]
      [  7   8   9]
      [ 10  11  12]]
       [[ 13  14  15]
      [ 16  17  18]
      [ 19  20  21]
      [ 22  23  24]]
      [[ 25  26  27]
      [ 28  29  30]
      [ 31  32  33]
      [ 34  35  36]]
       [[101 102 103]
      [104 105 106]
      [107 108 109]
      [110 111 112]]
      [[ 13  14  15]
      [ 16  17  18]
      [ 19  20  21]
      [ 22  23  24]
      [113 114 115]
      [116 117 118]
      [119 120 121]
      [122 123 124]]
       [[ 25  26  27]
      [ 28  29  30]
      [ 31  32  33]
      [ 34  35  36]
      [125 126 127]
      [128 129 130]
      [131 132 133]
      [134 135 136]]]
    axis=2axis=2axis=2axis=2axis=2axis=2axis=2axis=2axis=2axis=2
    [[[  1   2   3 101 102 103]
      [  4   5   6 104 105 106]
      [  7   8   9 107 108 109]
      [ 10  11  12 110 111 112]]
       [[ 13  14  15 113 114 115]
      [ 16  17  18 116 117 118]
      [ 19  20  21 119 120 121]
      [ 22  23  24 122 123 124]]
      [[ 25  26  27 125 126 127]
      [ 28  29  30 128 129 130]
      [ 31  32  33 131 132 133]
      [ 34  35  36 134 135 136]]]

    axis=0 可以使用 vstack 替换
    axis=1 可以使用 hstack 替换
    axis=2 可以使用 dstack 替换

    数组的分隔
    split 分隔
    numpy.split 函数沿特定的轴将数组分割为子数组,格式如下:

    numpy.split(ary, indices_or_sections, axis)

    参数说明: ary:被分割的数组 indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的 位置。 axis:沿着哪个维度进行切向,默认为 0,横向切分。为 1 时,纵向切分。
    split 分隔一维数组

    import numpy as np 
    x=np.arange(1,9) 
    a=np.split(x,4) 
    print(a) 
    print(a[0]) 
    print(a[1]) 
    print(a[2]) 
    print(a[3]) #传递数组进行分隔 
    b=np.split(x,[3,5]) 
    print(b) 

    运行结果如下:

    [array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]
    [1 2]
    [3 4]
    [5 6]
    [7 8]
    [array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]

    水平分隔
    分隔数组是组合数组的逆过程,与组合数组一样,分隔数组也分为水平分隔数组和垂直 分隔数组。水平分隔数组与水平组合数组对应。水平组合数组是将两个或多个数组水平进行 收尾相接,而水平分隔数组是将已经水平组合到一起的数组再分开。
    使用 hsplit 函数可以水平分隔数组,该函数有两个参数,第 1 个参数表示待分隔的数组, 第 2 个参数表示要将数组水平分隔成几个小数组,现在先来看一个例子。下面是一个 2*6 的二维数组 X
    数组 X

    1 2 3 4 5 6 
    7 8 9 10 11 12

    使用如下代码对 X 数组进行分隔
    np.hsplit(X,2) 分隔的结果如下:

    1 2 3    4 5 6 
    7 8 9    10 11 12

    很明显,将数组 X 分隔成了列数相同的两个数组。现在使用下面的代码重新对数组 X 进行 分隔

    np.hsplit(X,3)

    分隔的结果如下:

    1 2    3 4    5 6 
    7 8    9 10  11 12

    现在讲数组 X 分隔成了 3 个列数都为 2 的数组,但要是使用 hsplit(X,4)分隔数组 X 就会 抛出异常,这是因为数组 X 是没有办法被分隔成列数相同的 4 个数组的,所以使用 hsplit 函数分隔数组的一个规则就是第 2 个参数值必须可以整除待分隔数组的列数。
    垂直分隔数组
    垂直分隔数组是垂直组合数组的逆过程。垂直组合数组是将两个或多个数组垂直进行首 尾相接,而垂直分隔数组是将已经垂直组合到一起的数组再分开。
    使用 vsplit 函数可以垂直分隔数组,该函数有两个参数,第 1 个参数表示待分隔的数组, 第 2 个参数表示将数组垂直分隔成几个小数组。示例如下,一个 4*3 的二维数组 X。
    数组 X

     1 2 3
      4 5 6 
      7 8 9 
    10 11 12   

    现在使用如下的代码对数组 X 进行分隔:
    vsplit(X,2)
    分隔后的结果如下:

     1 2 3 
     4 5 6
     7 8 9 
     10 11 12

    很明显,将数组 X 分隔成了行数相同的两个数组。现在使用下面的代码重新对数组 X 进行分隔。 vsplit(X,4) 分隔后的结果:

    0 1 2 
    1 2 3 
    2 5 6 
    7 8 9 
    10 11 12
    别废话,拿你代码给我看。
  • 相关阅读:
    HDU-5980
    HDU-5974
    HDU-5979
    关于position的定位
    javascript学习笔记w3chool
    表单相关css技巧
    fis压缩工具的使用
    将HTML页面内容存入json数组
    中介PHP连接前台HTML与数据库MySQL
    lesscss的使用
  • 原文地址:https://www.cnblogs.com/lvxueyang/p/13707511.html
Copyright © 2011-2022 走看看