可以在不同的轴上堆积数组:
>>> 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.]])
注意:
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中,一维和多维,垂直和水平,不同的操作可能产生完全不同的结果和逻辑,这点不但新手容易迷惑,老手也经常出问题。最好的办法是现用现查,或者写个例子测试一下!
vstack和hstack完全可以用append来实现