numpy数组的拼接和分裂
个人学习笔记!
拼接方法:np.concatenate、np.vstack、np.hstack、np.dstack
分裂方法:np.split、np.vsplit、np.hsplit、np.dsplit
一、数组的拼接
1,np.concatenate
将数组列表(或元组)作为第一个参数,轴作为第二个参数(默认为axis=0)
#一维数组的拼接
>>> import numpy as np
>>> x = np.array([1,2,3])
>>> y = np.array([4,5,6])
>>> z = np.array([7,8,9])
>>> np.concatenate([x,y,z])
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
#二维数组的拼接
>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
>>> np.concatenate((a, b), axis=0) #沿着第一个轴
array([[1, 2], [3, 4], [5, 6]])
>>> np.concatenate((a, b.T), axis=1) #沿着第二个轴
array([[1, 2, 5], [3, 4, 6]])
2,np.vstack(垂直栈)
将数组列表(或元组)作为唯一参数,沿着第一个轴(axis=0)拼接
>>> a = np.array([1, 2, 3])
>>> b = np.array([2, 3, 4])
>>> np.vstack((a,b))
array([[1, 2, 3],
[2, 3, 4]])
>>> a = np.array([[1], [2], [3]])
>>> b = np.array([[2], [3], [4]])
>>> np.vstack((a,b))
array([[1],
[2],
[3],
[2],
[3],
[4]])
3,np.hstack(水平栈)
将数组列表(或元组)作为唯一参数,
沿着第二个轴(axis=1)拼接
>>> a = np.array((1,2,3))
>>> b = np.array((2,3,4))
>>> np.hstack((a,b))
array([1, 2, 3, 2, 3, 4])
>>> a = np.array([[1],[2],[3]])
>>> b = np.array([[2],[3],[4]])
>>> np.hstack((a,b))
array([[1, 2],
[2, 3],
[3, 4]])
二、数组的分裂
1,np.split
第一个参数是被分裂的数组,第二个参数是记录分裂点位置的索引列表或者表示分成几份的一个整数,第三个参数是要沿哪个轴分裂(默认axis=0)
>>> x = np.arange(9.0)
>>> np.split(x, 3)
[array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7., 8.])]
>>> x = np.arange(8.0)
>>> np.split(x, [3, 5, 6, 10])
[array([ 0., 1., 2.]),
array([ 3., 4.]),
array([ 5.]),
array([ 6., 7.]),
array([], dtype=float64)]
2,np.vsplit
沿着axis=0方向分裂。第一个参数是被分裂的数组,第二个参数是记录分裂点位置的索引列表或者表示分成几份的一个整数
>>> x = np.arange(16.0).reshape(4, 4)
>>> x
array([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[ 12., 13., 14., 15.]])
>>> np.vsplit(x, 2)
[array([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.]]),
array([[ 8., 9., 10., 11.],
[ 12., 13., 14., 15.]])]
>>> np.vsplit(x, np.array([3, 6]))
[array([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.]]),
array([[ 12., 13., 14., 15.]]),
array([], dtype=float64)]
3,np.hsplit
沿着axis=1方向分裂。
第一个参数是被分裂的数组,第二个参数是记录分裂点位置的索引列表或者表示分成几份的一个整数
>>> x = np.arange(16.0).reshape(4, 4)
>>> x
array([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[ 12., 13., 14., 15.]])
>>> np.hsplit(x, 2)
[array([[ 0., 1.],
[ 4., 5.],
[ 8., 9.],
[ 12., 13.]]),
array([[ 2., 3.],
[ 6., 7.],
[ 10., 11.],
[ 14., 15.]])]
>>> np.hsplit(x, np.array([3, 6]))
[array([[ 0., 1., 2.],
[ 4., 5., 6.],
[ 8., 9., 10.],
[ 12., 13., 14.]]),
array([[ 3.],
[ 7.],
[ 11.],
[ 15.]]),
array([], dtype=float64)]
注意:np.dstack用于沿着第三个维度拼接,类似,np.dsplit用于沿着第三个维度分裂。因为一般我们接触到最多的是两个维度的数据,就不对这两个函数作深入研究了。