数组的拼接

水平数组组合

通过 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
别废话,拿你代码给我看。
原文地址:https://www.cnblogs.com/lvxueyang/p/13707511.html