numpy vstack和column_stack.之间究竟有什么区别?通过阅读文档,它看起来好像column_stack是一vstack维数组的实现.这是一个更有效的实施吗?否则,我找不到一个原因vstack.
mgi*_*son 80
我认为以下代码很好地说明了差异:
>>> 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])
Run Code Online (Sandbox Code Playgroud)
我也包括在内hstack进行比较.注意如何column_stack沿第二维vstack堆叠,而沿第一维堆叠.相当于column_stack以下hstack命令:
>>> np.hstack(([[1],[2],[3]],[[4],[5],[6]]))
array([[1, 4],
[2, 5],
[3, 6]])
Run Code Online (Sandbox Code Playgroud)
我希望我们能够同意column_stack更方便.
在column_stack的Notes部分中,它指出了这一点:
这个功能相当于
np.vstack(tup).T.
其中有许多函数numpy是其他函数的方便包装器.例如,vstack的Notes部分说:
相当于
np.concatenate(tup, axis=0)if tup包含至少为2维的数组.
它看起来column_stack只是一个方便的功能vstack.
hstack水平vstack堆叠,垂直堆叠:
问题hstack在于,当您附加一列时,您需要先将其从一维数组转换为二维列,因为一维数组通常被解释为 numpy 中二维上下文中的向量行:
a = np.ones(2) # 2d, shape = (2, 2)
b = np.array([0, 0]) # 1d, shape = (2,)
hstack((a, b)) -> dimensions mismatch error
Run Code Online (Sandbox Code Playgroud)
因此,要么hstack((a, b[:, None]))或column_stack((a, b)):
whereNone作为 的快捷方式np.newaxis。
如果要堆叠两个向量,则有以下三种选择:

至于 (undocumented) row_stack,它只是 的同义词vstack,因为一维数组已准备好用作矩阵行而无需额外工作。
事实证明 3D 及以上的情况太大而无法纳入答案,因此我将其包含在名为Numpy Illustrated的文章中。