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

【python】numpy库数组拼接快捷方式horizontal&vertical、np.c_、np.column_stack等官方文档详解与实例

2018-01-26 12:02 956 查看
上一篇用到了np.concatenante方法处理数组拼接问题,这个方法在pandas库同样有pd.concat的方法对应,因而选择上述方法会比较熟悉且常用,详见上一篇博客:【python】numpy库数组拼接np.concatenate官方文档详解与实例

对于数组处理的方法还是有很多,下面进一步详解其他方式,方便在实操过程中有更多的选择。

1、np.vstack & np.hstack

np.vstack(tup)等价于np.concatenate(tup, axis=0)操作,vertical就是垂直方向上操作的意思

vstack(tup) #给对象传入元组

Parameters     #多个数组的元组
----------
tup : sequence of ndarrays
Tuple containing arrays to be stacked. The arrays must have the same
shape along all but the first axis.

Returns       #拼接好的多维数组
-------
stacked : ndarray
The array formed by stacking the given arrays.

Notes      #等价于np.concatenate(tup, axis=0)操作
-----
Equivalent to ``np.concatenate(tup, axis=0)`` if `tup` contains arrays that
are at least 2-dimensional.


np.vstack(tup)实例:

In [4]: a = np.array([1, 2, 3])
...: b = np.array([2, 3, 4])
...: np.vstack((a,b))
...:
Out[4]:
array([[1, 2, 3],
[2, 3, 4]])

In [5]: a = np.array([[1], [2], [3]])
...: b = np.array([[2], [3], [4]])
...: np.vstack((a,b))
...:
Out[5]:
array([[1],
[2],
[3],
[2],
[3],
[4]])


np.hstack(tup)等价于np.concatenate(tup, axis=0)操作,horizontal就是水平方向上操作的意思

help(np.hsplit) #进行查看详细功能


np.hstack(tup)实例

In [6]: a = np.array([[1], [2], [3]])
...: b = np.array([[2], [3], [4]])
...: np.hstack((a,b))
...:
...:
Out[6]:
array([[1, 2],
[2, 3],
[3, 4]])

In [7]: a = np.array([1, 2, 3])
...: b = np.array([2, 3, 4])
...: np.hstack((a,b))
...:
...:
Out[7]: array([1, 2, 3, 2, 3, 4])


2、np.column_stack& np.row_stack

np.column_stack 官方文档

column_stack(tup)   #如果传递的是一个一维数组,则会先将一维数组转化为2维数组,然后进一步进行拼接操作
Stack 1-D arrays as columns into a 2-D array.

Parameters
----------
tup : sequence of 1-D or 2-D arrays.
Arrays to stack. All of them must have the same first dimension.

Returns
-------
stacked : 2-D array
The array formed by stacking the given arrays.


np.column_stack(tup)相当于np.concatenate((a1, a2, …), axis=1),对竖轴的数组进行横向的操作,即操作对象是column轴实例:

#如果开始传入的是一维数组,首先将一维数组转化为2维数组
In [13]: a = np.array((1,2,3))
...: b = np.array((2,3,4))
...: np.column_stack((a,b))
...:
Out[13]:
array([[1, 2],
[2, 3],
[3, 4]])
#如果开始传入的是多维数组,则直接进行拼接操作
In [15]: a = np.array(((1,2,3),(4,3,2)))
...: b = np.array(((2,3,4),(2,12,2)))
...: np.column_stack((a,b))
...:
...:
Out[15]:
array([[ 1,  2,  3,  2,  3,  4],
[ 4,  3,  2,  2, 12,  2]])


np.row_stack等价于np.vstack

3、np.c_ & np.r_

np.c_ & np.r_是 np.column_stack& np.row_stack 的缩写

np.c_ & np.r_的语法与np.column_stack& np.row_stack有区别,np.c_ & np.r_是直接对数组进行操作,而np.column_stack& np.row_stack是对数组的元组或者列表操作。

np.c_ & np.r_实例:

# np.c_  与np.column_stack 是一个意思,对数组的column列的数据进行横向操作
In [24]: a = np.array([1, 2, 3])

In [25]: b = np.array([2, 3, 4])

In [26]: np.c_[a,b]
Out[26]:
array([[1, 2],
[2, 3],
[3, 4]])

# np.r_  与np.row_stack 不完全等价,因为操作对象不一样

In [31]: a = np.array((1,2,3))
...: b = np.array((2,3,4))
...: c = np.row_stack((a,b))
...: d = np.r_[a,b]
...:

In [32]: c
Out[32]:
array([[1, 2, 3],
[2, 3, 4]])

In [33]: d
Out[33]: array([1, 2, 3, 2, 3, 4])


总结:

np.concatenate(tup, axis=0)需要传递数组的元组或者列表、以及指定轴向。

np.vstack(tup) 和 np.hstack(tup)只需传入数组的元组即可,轴向在函数定义时已经确定,v即vertical垂直方向上,horizontal即水平方向。

np.row_stack(tup) 和 np.column_stack(tup)同样只需传入数组的元组即可,轴向同样在函数定义时已经确定,row_stack即对row的维度数据进行垂直方向的操作,column_stack对column的维度数据进行水平方向的操作。

axis = 0 与 row_stack 中的row等价,row维度就是0轴,同理column维度就是1轴,所以这两个定义是指被操做的维度数据,而不是拼接方向;而vertical或者horizontal直接指定拼接方向。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: