您的位置:首页 > 编程语言 > Python开发

Python numpy函数之stack(),vstack(),hstack(),dstack(),vsplit()和concatenate()

2017-11-20 15:56 337 查看
感觉numpy.hstack()和numpy.column_stack()函数略有相似,numpy.vstack()与numpy.row_stack()函数也是挺像的。

stackoverflow上也有类似的讨论,在这里numpy vstack vs. column_stack

给一个相关函数的列表:

stack()    Join a sequence of arrays along a new axis.

hstack()    Stack arrays in sequence horizontally (column wise).

dstack()    Stack arrays in sequence depth wise (along third dimension).

concatenate()     Join a sequence of arrays along an existing axis.

vsplit ()   Split array into a list of multiple sub-arrays vertically.

一、numpy.stack()函数

函数原型:numpy.stack(arrays, axis=0)

程序实例:

[python]
view plain
copy

>>> arrays = [np.random.randn(3, 4) for _ in range(10)]  
>>> np.stack(arrays, axis=0).shape  
(10, 3, 4)  
  
>>>  
  
>>> np.stack(arrays, axis=1).shape  
(3, 10, 4)  
  
>>>  
  
>>> np.stack(arrays, axis=2).shape  
(3, 4, 10)  
  
>>>  
  
>>> a = np.array([1, 2, 3])  
>>> b = np.array([2, 3, 4])  
>>> np.stack((a, b))  
array([[1, 2, 3],  
       [2, 3, 4]])  
  
>>>  
  
>>> np.stack((a, b), axis=-1)  
array([[1, 2],  
       [2, 3],  
       [3, 4]])  

二、numpy.hstack()函数

函数原型:numpy.hstack(tup)

其中tup是arrays序列,The arrays must have the same shape, except in the dimensioncorresponding toaxis (the first, by default).

等价于:np.concatenate(tup, axis=1)

程序实例:

[python]
view plain
copy

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

三、numpy.vstack()函数

函数原型:numpy.vstack(tup)

等价于:np.concatenate(tup, axis=0) if tup contains arrays thatare at least 2-dimensional.

程序实例:

[python]
view plain
copy

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

四、numpy.dstack()函数

函数原型:numpy.dstack(tup)

等价于:np.concatenate(tup, axis=2)

程序实例:

[python]
view plain
copy

>>> a = np.array((1,2,3))  
>>> b = np.array((2,3,4))  
>>> np.dstack((a,b))  
array([[[1, 2],  
        [2, 3],  
        [3, 4]]])  
  
>>>  
  
>>> a = np.array([[1],[2],[3]])  
>>> b = np.array([[2],[3],[4]])  
>>> np.dstack((a,b))  
array([[[1, 2]],  
       [[2, 3]],  
       [[3, 4]]])  

五、numpy.concatenate()函数

函数原型:numpy.concatenate((a1, a2, ...), axis=0)

程序实例:

[python]
view plain
copy

>>> 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]])  
  
This function will not preserve masking of MaskedArray inputs.  
>>>  
  
>>> a = np.ma.arange(3)  
>>> a[1] = np.ma.masked  
>>> b = np.arange(2, 5)  
>>> a  
masked_array(data = [0 -- 2],  
             mask = [False  True False],  
       fill_value = 999999)  
>>> b  
array([2, 3, 4])  
>>> np.concatenate([a, b])  
masked_array(data = [0 1 2 2 3 4],  
             mask = False,  
       fill_value = 999999)  
>>> np.ma.concatenate([a, b])  
masked_array(data = [0 -- 2 2 3 4],  
             mask = [False  True False False False False],  
       fill_value = 999999)  

六、numpy.vsplit()函数

函数原型:numpy.vsplit(ary, indices_or_sections)

程序实例:

[python]
view plain
copy

>>> 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)]  
  
With a higher dimensional array the split is still along the first axis.  
>>>  
  
>>> x = np.arange(8.0).reshape(2, 2
9fbe
, 2)  
>>> x  
array([[[ 0.,  1.],  
        [ 2.,  3.]],  
       [[ 4.,  5.],  
        [ 6.,  7.]]])  
>>> np.vsplit(x, 2)  
[array([[[ 0.,  1.],  
        [ 2.,  3.]]]),  
 array([[[ 4.,  5.],  
        [ 6.,  7.]]])] 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: