Python numpy vstack与列堆栈

Python numpy vstack与列堆栈,python,numpy,Python,Numpy,numpyvstack和column\u stack之间到底有什么区别。在阅读文档时,似乎column\u stack是1D阵列的vstack实现。这是一个更有效的实现吗?否则,我找不到仅仅使用vstack的理由。我认为以下代码很好地说明了这种差异: >>> np.vstack(([1,2,3],[4,5,6])) array([[1, 2, 3], [4, 5, 6]]) >>> np.column_stack(([1,2,3],[4,5,6]

numpy
vstack
column\u stack
之间到底有什么区别。在阅读文档时,似乎
column\u stack
是1D阵列的
vstack
实现。这是一个更有效的实现吗?否则,我找不到仅仅使用
vstack

的理由。我认为以下代码很好地说明了这种差异:

>>> np.vstack(([1,2,3],[4,5,6]))
array([[1, 2, 3],
       [4, 5, 6]])
>>> np.column_stack(([1,2,3],[4,5,6]))
array([[1, 4],
       [2, 5],
       [3, 6]])
>>> np.hstack(([1,2,3],[4,5,6]))
array([1, 2, 3, 4, 5, 6])
我也加入了
hstack
进行比较。注意
column\u stack
如何沿第二维度堆叠,而
vstack
如何沿第一维度堆叠。与
column\u stack
等效的是以下
hstack
命令:

>>> np.hstack(([[1],[2],[3]],[[4],[5],[6]]))
array([[1, 4],
       [2, 5],
       [3, 6]])
我希望大家能同意,
column\u stack
更方便。

在注释部分指出:

此函数相当于
np.vstack(tup).T

numpy
中有许多函数是其他函数的方便包装。例如,的注释部分说:

相当于
np。如果tup包含至少二维的数组,则连接(tup,axis=0)


看起来
column\u stack
只是
vstack
hstack
水平堆叠,
vstack
垂直堆叠的一个方便功能:

hstack
的问题是,在追加列时,需要先将其从1d数组转换为2d列,因为在numpy中,1d数组通常被解释为2d上下文中的向量行:

a = np.ones(2)          # 2d, shape = (2, 2)
b = np.array([0, 0])    # 1d, shape = (2,)

hstack((a, b)) -> dimensions mismatch error
所以要么
hstack((a,b[:,None])
要么
column\u stack((a,b))

其中
None
用作
np.newaxis
的快捷方式

如果要叠加两个向量,则有三个选项:

至于(未记录的)
row\u堆栈
,它只是
vstack
的同义词,因为1d数组可以用作矩阵行而无需额外工作


事实证明,3D及以上版本的例子太大,无法给出答案,因此我将其包含在名为的文章中。

这是hstack的一个方便函数,而不是vstack。@AntonyHatchkins啊,我明白了。Numpy在7年内改变了他们的文档,因为我发布了这个答案,说
column\u stack
更像
hstack
,而不是
vstack
。有趣。好吧,你总是可以编辑这个答案来改进它,但我猜根据否决票,你认为应该删除它吗?问题是:vstack和column_stack之间有什么区别。正确的答案是“不同之处在于它们沿着不同的轴堆叠”。经批准的答案没有明确说明(这给了一些改进的空间),但提供了足够好的示例。您的答案是一个函数是另一个函数的包装器,事实并非如此。文档已经更改,但行为没有更改(特别是,您的两个引用都是正确的)。我认为这个答案应该改进。或者被删除。@AntonyHatchkins听起来你应该发布一个新的答案,因为现有的答案都不令人满意。我在medium上写了一篇关于这个(以及numpy)的大文章,我想你可能想看看: