堆积数组

阅读: 5784     评论:1

可以在不同的轴上堆积数组:

>>> a = np.floor(10*np.random.random((2,2)))
>>> a
array([[ 8.,  8.],
       [ 0.,  0.]])
>>> b = np.floor(10*np.random.random((2,2)))
>>> b
array([[ 1.,  8.],
       [ 0.,  4.]])
>>> np.vstack((a,b))
array([[ 8.,  8.],
       [ 0.,  0.],
       [ 1.,  8.],
       [ 0.,  4.]])
>>> np.hstack((a,b))
array([[ 8.,  8.,  1.,  8.],
       [ 0.,  0.,  0.,  4.]])

注意:

  • 不同于reshape方法,vstack和hstack是numpy级别的功能,不能通过数组对象来调用
  • v和h实际上就是垂直方向和水平方向,英文字母
  • 参数要以元组的方式提供

numpy还有一个column_stack方法,其工作机制比较难以理解和记忆,建议查看范例,对照使用:

>>> from numpy import newaxis # 引入一个新轴
>>> np.column_stack((a,b))     
array([[ 8.,  8.,  1.,  8.],
       [ 0.,  0.,  0.,  4.]])
>>> a = np.array([4.,2.])
>>> b = np.array([3.,8.])
>>> np.column_stack((a,b))     # 返回一个二维数组
array([[ 4., 3.],
       [ 2., 8.]])
>>> np.hstack((a,b))           # 与上面的结果是不一样的
array([ 4., 2., 3., 8.])
>>> a[:,newaxis]               # 为a添加一个轴
array([[ 4.],
       [ 2.]])
>>> np.column_stack((a[:,newaxis],b[:,newaxis]))
array([[ 4.,  3.],
       [ 2.,  8.]])
>>> np.hstack((a[:,newaxis],b[:,newaxis]))   # 但这时结果是一样的
array([[ 4.,  3.],
       [ 2.,  8.]])

重要提示:在Numpy中,一维和多维,垂直和水平,不同的操作可能产生完全不同的结果和逻辑,这点不但新手容易迷惑,老手也经常出问题。最好的办法是现用现查,或者写个例子测试一下!


 形状变换 分割数组 

评论总数: 1


点击登录后方可评论

vstack和hstack完全可以用append来实现