Numpy 数组拼接与拆分函数详解
数组拼接
concatenate()
concatenate()函数可以让数组按指定维度进行拼接,以下的例子中都使用矩阵进行演示
concatenate的参数一般有两个,第一个为包含需要进行拼接的矩阵列表或矩阵元组,第二个参数为axis,为0则沿行方向进行拼接,为1则沿列方向拼接
import numpy as np
import torchnp.random.seed(1)
data1 = np.arange(15).reshape(3,5)
data2 = np.arange(15,30).reshape(3,5)
print(data1,end='\n\n')
print(data2,end='\n\n')
print(np.concatenate([data1,data2],axis=0),end='\n\n')
print(np.concatenate((data1,data2),axis=1),end='\n\n')# [[ 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]]
#
# [[ 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]]
#
# [[ 0 1 2 3 4 15 16 17 18 19]
# [ 5 6 7 8 9 20 21 22 23 24]
# [10 11 12 13 14 25 26 27 28 29]]
hstack()/vstack()
hstack和vstack中的h代表horizontal(横向的),v代表vertical(竖向的),stack具有堆叠的意思
所以这里的hstack()作用是沿列方向拼接,vstack()作用是沿行方向拼接
import numpy as np
import torchnp.random.seed(1)
data1 = np.arange(15).reshape(3,5)
data2 = np.arange(15,30).reshape(3,5)
print(data1,end='\n\n')
print(data2,end='\n\n')
print(np.hstack([data1,data2]))
print(np.vstack((data1,data2)))
# [[ 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]]
#
# [[ 0 1 2 3 4 15 16 17 18 19]
# [ 5 6 7 8 9 20 21 22 23 24]
# [10 11 12 13 14 25 26 27 28 29]]
# [[ 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]]
数组切分
split()
split()函数具有将矩阵按指定维度切分的作用
参数如下:第一个参数为要进行切分的数组对象,第二参数为indices_or_sections,也就是进行切分的方法指定,可以为数组或值,axis为0则沿行方向,为1则沿列方向
这里indices_or_sections若为数值,比如为2,则表示把数组分为2等份,若无法分成2等份则会报错
indices_or_sections若为数组,则比如[2,4],并且是沿行切分,
则会按照如下规则切分
每一份为
[:2],[2:4],[4:]
数组参数可以根据需要进行设置,分成几份,每份几行,或几列,都可自定义
下述为一个沿行方向四等分的例子
import numpy as np
import torchnp.random.seed(1)
data1 = np.arange(16).reshape(4,4)
print(data1,end='\n\n')
print(np.split(data1,indices_or_sections=4,axis=0),end='\n\n')# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]]
#
# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]]), array([[12, 13, 14, 15]])]
下述为一个将四行数组沿行分为1,2,1的例子
import numpy as np
import torchnp.random.seed(1)
data1 = np.arange(16).reshape(4,4)
print(data1,end='\n\n')
print(np.split(data1,indices_or_sections=[1,3],axis=0),end='\n\n')# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]]
#
# [array([[0, 1, 2, 3]]), array([[ 4, 5, 6, 7],
# [ 8, 9, 10, 11]]), array([[12, 13, 14, 15]])]
hsplit()/vsplit()
这里hsplit()表示沿列切分,vsplit表示沿行切分
参数只有要切分的数组和indices_or_sections
import numpy as np
import torchnp.random.seed(1)
data1 = np.arange(16).reshape(4,4)
print(data1,end='\n\n')
print(np.hsplit(data1,indices_or_sections=[1,3]),end='\n\n')
print(np.vsplit(data1,indices_or_sections=[1,3]),end='\n\n')# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]]
#
# [array([[ 0],
# [ 4],
# [ 8],
# [12]]), array([[ 1, 2],
# [ 5, 6],
# [ 9, 10],
# [13, 14]]), array([[ 3],
# [ 7],
# [11],
# [15]])]
#
# [array([[0, 1, 2, 3]]), array([[ 4, 5, 6, 7],
# [ 8, 9, 10, 11]]), array([[12, 13, 14, 15]])]