1.np.concatenate 数组合并
2.np.vstack 垂直合并(合并在下方)
3.np.hstack 水平合并(合并在右侧)
4.np.split 数组分割
5.np.vsplit 分成上下两部分
6.np.hsplit 分成左右两部分
一:合并
1.启动jupyter,创建一个信息的notebook,导入numpy
1 | import numpy as np |
2.合并两个一维数组
1 2 3 4 5 6 7 8 | #1.创建两个数组a和b a = np.array([1,2,3]) b = np.array([4,5,6]) #2.将数组合并成c c = np.concatenate([a,b]) c #结果:array([1, 2, 3, 4, 5, 6]) |
运行效果图如下:
3.合并二维数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #1定义一个二维数组A A = np.arange(6).reshape(-1,3) A #结果:array([[0, 1, 2], # [3, 4, 5]]) #2.定义一个二维数组B B = np.arange(9).reshape(-1,3) B #结果:array([[0, 1, 2], # [3, 4, 5], # [6, 7, 8]]) #3.将二维数组A和B,合并成数组C C = np.concatenate([A,B]) C #结果:array([[0, 1, 2], # [3, 4, 5], # [0, 1, 2], # [3, 4, 5], # [6, 7, 8]]) |
运行效果图如下:
4.案例练习合并数组:
两个样本数据,身高,体重,年龄
X1 = np.array([22,168,62],[18,163,59]) X2=np.array([19,157,65],[20,175,72])
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #1.定义两个样本数据 # age heigt weight X1 = np.array([[22, 168, 62], [18, 163, 59]]) X2 = np.array([[19, 157, 65], [20, 175, 72]]) #2.输出第一个样本数据X1 X1 #结果:array([[ 22, 168, 62], # [ 18, 163, 59]]) #3.输出第一个样本数据X2 X2 #结果:array([[ 19, 157, 65], # [ 20, 175, 72]]) #4.这两组数据可能来自不同的渠道,所以要合并在一起 X = np.concatenate([X1,X2]) X #结果:array([[ 22, 168, 62], # [ 18, 163, 59], # [ 19, 157, 65], # [ 20, 175, 72]]) |
运行效果如下:
横向合并,第一组数据年龄和身高,第二组数据有体重,将两组数据合并在一起
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #1.定义年龄和身高数据X1,体重数据X2 # age height X1 = np.array([[22, 168], [18, 163]]) # weight X2 = np.array([[62], [69]]) #2.将升高和体重横向合并在一起,行数需要统一 X = np.concatenate([X1,X2],axis=1) X #结果:array([[ 22, 168, 62], # [ 18, 163, 69]]) |
5.一维数组和二维数据的合并
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #1.定义一个一维数组a a = np.array([88,99]) a #结果:array([88, 99]) #2.定义一个二维数组A A = np.arange(4).reshape(-1,2) A #结果:array([[0, 1], # [2, 3]]) #3.直接合并两个数组,报错 np.concatenate([A,a]) #结果:ValueError: all the input arrays must have same number of dimensions, but the array # # at index 0 has 2 dimension(s) and the array at index 1 has 1 dimension(s) |
运行结果如下:
5.1将一维数组转化为二维数组再合并
1 2 3 4 5 | #将一维数组转化为二维数组,再合并 np.concatenate([A,a.reshape(1,-1)]) #结果:array([[ 0, 1], # [ 2, 3], # [88, 99]]) |
运行效果图如下:
5.2 直接在垂直方向进行堆叠:np.vstack([A,a])
运行效果图如下:
5.3在水平方向进行堆叠,np.hstack([A,a.reshape(-1,1)]),需将a转化为与A行数相等
运行效果图如下:
二: 分割
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 | #1.定义一维数组x x = np.arange(10) x #结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) #2.将x分割成两段 np.split(x,2) #结果:[array([0, 1, 2, 3, 4]), array([5, 6, 7, 8, 9])] #3.将x平均分割成5段 np.slpit(x,5) #结果:[array([0, 1]), array([2, 3]), array([4, 5]), array([6, 7]), array([8, 9])] #4.指定分割点进行分割 np.split(x,[3,7]) #结果:[array([0, 1, 2]), array([3, 4, 5, 6]), array([7, 8, 9])] #5.指定分割点,并用参数接受分割后的值 x1,x2,x3 = np.split(x,[3,7]) x1 #结果:array([0, 1, 2]) x2 #结果:array([3, 4, 5, 6]) x3 #结果:array([7, 8, 9]) |
运行效果图如下:
7.二维数组分割
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 37 38 39 40 41 42 43 44 45 46 47 | #1.定义一个二维数组 A = np.arange(16).reshape(4,-1) A #结果:array([[ 0, 1, 2, 3], # [ 4, 5, 6, 7], # [ 8, 9, 10, 11], # [12, 13, 14, 15]]) #2.指定分割点分割,其中[3]分割点指0,1,2行,不包含3 A1,A2 = np.split(A,[3]) A1 #结果:array([[ 0, 1, 2, 3], # [ 4, 5, 6, 7], # [ 8, 9, 10, 11]]) A2 #结果:array([[12, 13, 14, 15]]) #3.垂直切割,其中[3]分割点指0,1,2列,不包含3 A1,A2 = np.split(A,[3],axis=1) A1 #结果:array([[ 0, 1, 2], # [ 4, 5, 6], # [ 8, 9, 10], # [12, 13, 14]]) A2 #结果:array([[ 3], # [ 7], # [11], # [15]]) #4.分成上下两部分 np.vsplit(A,[3]) #结果:[array([[ 0, 1, 2, 3], # [ 4, 5, 6, 7], # [ 8, 9, 10, 11]]), # array([[12, 13, 14, 15]])] #5.分成左右两部分 np.hsplit(A,[3]) #结果:[array([[ 0, 1, 2], # [ 4, 5, 6], # [ 8, 9, 10], # [12, 13, 14]]), # array([[ 3], # [ 7], # [11], # [15]])] |
执行效果图如下:
8.应用,截取最后一列数据出来
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #1.有一个组数据X1 # age heignt weight type X1 = np.array([[22, 168, 62, 1], [18, 163, 58, 1], [19, 153, 59, 0]]) #2.将最后一列分割出来 X,y = np.hsplit(X1,[-1]) X #结果:array([[ 22, 168, 62], # [ 18, 163, 58], # [ 19, 153, 59]]) y #结果:array([[1], # [1], # [0]]) |
运行效果图如下: