numpy中hstack() vstack() stack() dstack() vsplit() concatenate()用法

xiaoxiao2021-02-28  107

感觉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 print ? >>> arrays = [np.random.randn(34for _ in range(10)]  >>> np.stack(arrays, axis=0).shape  (1034)    >>>    >>> np.stack(arrays, axis=1).shape  (3104)    >>>    >>> np.stack(arrays, axis=2).shape  (3410)    >>>    >>> a = np.array([123])  >>> b = np.array([234])  >>> np.stack((a, b))  array([[123],         [234]])    >>>    >>> np.stack((a, b), axis=-1)  array([[12],         [23],         [34]])   >>> 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 to axis (the first, by default).

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

程序实例:

[python] view plain copy print ? >>> a = np.array((1,2,3))  >>> b = np.array((2,3,4))  >>> np.hstack((a,b))  array([123234])  >>> a = np.array([[1],[2],[3]])  >>> b = np.array([[2],[3],[4]])  >>> np.hstack((a,b))  array([[12],         [23],         [34]])   >>> 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 print ? >>> a = np.array([123])  >>> b = np.array([234])  >>> np.vstack((a,b))  array([[123],         [234]])    >>>    >>> 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]]) >>> >>> 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 print ? >>> a = np.array((1,2,3))  >>> b = np.array((2,3,4))  >>> np.dstack((a,b))  array([[[12],          [23],          [34]]])    >>>    >>> a = np.array([[1],[2],[3]])  >>> b = np.array([[2],[3],[4]])  >>> np.dstack((a,b))  array([[[12]],         [[23]],         [[34]]])   >>> 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 print ? >>> a = np.array([[12], [34]])  >>> b = np.array([[56]])  >>> np.concatenate((a, b), axis=0)  array([[12],         [34],         [56]])  >>> np.concatenate((a, b.T), axis=1)  array([[125],         [346]])    This function will not preserve masking of MaskedArray inputs.  >>>    >>> a = np.ma.arange(3)  >>> a[1] = np.ma.masked  >>> b = np.arange(25)  >>> a  masked_array(data = [0 – 2],               mask = [False  True False],         fill_value = 999999)  >>> b  array([234])  >>> 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)   >>> 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 print ? >>> x = np.arange(16.0).reshape(44)  >>> 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([36]))  [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(222)  >>> x  array([[[ 0.,  1.],          [ 2.,  3.]],         [[ 4.,  5.],          [ 6.,  7.]]])  >>> np.vsplit(x, 2)  [array([[[ 0.,  1.],          [ 2.,  3.]]]),   array([[[ 4.,  5.],          [ 6.,  7.]]])]   >>> 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, 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.]]])]

参考:

numpy中的部分源码

转自博客:http://blog.csdn.net/garfielder007/article/details/51378296

转载请注明原文地址: https://www.6miu.com/read-23774.html

最新回复(0)