机器学习和数据分析-numpy.ndarray中的合并与分割

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]])

运行效果图如下: