#numpy数组合并,两个数组合并为一个

一、 按照行合并

1. append

用法和列表一样,不用在意参数里是不是有空列表(用列表代替一个参数),其他几个好像都不可这样

    a = []
    b = np.arange(5)
    print(a)
    print(b)
    d = np.append(a,b)
    print(d)
---------输出----
[]
[0 1 2 3 4]
[0. 1. 2. 3. 4.]

colum

2. c_

np.c_是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等

	#例一
    a = np.arange(5)
    b = np.arange(5)
    print(a)
    print(b)
    d = np.c_[a,b]
    print(d)
------输出-------------
[0 1 2 3 4]
[0 1 2 3 4]
[[0 0]
 [1 1]
 [2 2]
 [3 3]
 [4 4]]

	#例二
	a = np.array([[1, 2, 3], [7, 8, 9]])

    b = np.array([[4, 5, 6], [1, 2, 3]])
    print(a)
    print(b)
    # d = np.column_stack((a,b))
    d = np.c_[a,b]
    print(d)
-------输出--------
 [[1 2 3]
 [7 8 9]]
[[4 5 6]
 [1 2 3]]
[[1 2 3 4 5 6]
 [7 8 9 1 2 3]]

3. hstack

    a = np.arange(5)
    b = np.arange(5)
	d = np.hstack((a, b))
	print(a)
    print(b)
	print(d)
-----输出------
[0 1 2]
[0 1 2 3 4 5 6]
[0 1 2 0 1 2 3 4 5 6]

特殊情况,迭代,需要再循环外执行一次d = np.hstack((a, b)),也就是hstack的参数内不能有0数组。然后需要双括号,合并成一个参数

    a = np.arange(5)
    b = np.arange(5)
    d = np.hstack((a, b))
    begin = time.time()
    for n in range(0,1280):
        d = np.hstack((d, b))
    end = time.time()
    print(d)
    print(len(d))
    print("花费时间:", end - begin)
-------输出------
[0 1 2 ... 2 3 4]
6410
花费时间: 0.00699305534362793

4. row_stack

也是两个参数两个括号

    a = np.array([[1, 2, 3], [7, 8, 9]])

    b = np.array([[4, 5, 6], [1, 2, 3]])
    print(a)
    print(b)
    d = np.row_stack((a,b))
    # d = np.c_[a,b]
    print(d)
------输出--------
[[1 2 3]
 [7 8 9]]

[[4 5 6]
 [1 2 3]]

[[1 2 3]
 [7 8 9]
 [4 5 6]
 [1 2 3]]

二、 按列合并

1 . c_r

np.r_是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等。
同上

2. column_stack

同上

3. vstack

同上

三、 按轴2合并

注意括号的个数,这个是在轴二上

	a = np.array([1,2])
	b = np.array([3,4])
	print(np.dstack((a,b)))
---------输出-------
[[[1 3]
  [2 4]]]

4、 多数组合并

concatenate()函数

效率应该比append高,但是要求数组长度相同形状,比如一维,相同的二维等

numpy.concatenate((a1,a2,...), axis=0)
    a = np.arange(5)
    b= np.zeros(4)
    c = np.concatenate((a,b))
    print(c)
#[0. 1. 2. 3. 4. 0. 0. 0. 0.]

时间对比(一维)

    b=np.zeros(45875200)
    a = np.arange(143360)

    begin1 = time.time()
    for n in range(0,320):  # 切片赋值
        b[143360*n:143360+143360*n]=a
    end1 = time.time()
    print(b[5656:5666])
    print("花费时间:", end1 - begin1)

    c = []
    begin2 = time.time()
    for n in range(0,320):
       c= np.append(c,a)
    end2 = time.time()
    print(c[5656:5666])
    print("append 花费时间:", end2 - begin2)

    d = []
    begin3 = time.time()
    for n in range(0,320):
        d = np.concatenate((d,a))
    end3 = time.time()
    print(d[5656:5666])
    print("concatenate 花费时间:", end3 - begin3)

输出

[5656. 5657. 5658. 5659. 5660. 5661. 5662. 5663. 5664. 5665.]
花费时间: 0.10589170455932617
[5656. 5657. 5658. 5659. 5660. 5661. 5662. 5663. 5664. 5665.]
append 花费时间: 25.331040859222412
[5656. 5657. 5658. 5659. 5660. 5661. 5662. 5663. 5664. 5665.]
concatenate 花费时间: 25.269352912902832

觉得append和concatenate在一维上没啥区别

你可能感兴趣的:(Python&机器学习)