numpyvstack和column_stack. 通读文档,它看起来好像column_stack是一vstack维数组的实现。它是更有效的实施方式吗?否则,我找不到仅仅拥有vstack.
3 回答
我认为以下代码很好地说明了差异:
>>> 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_stack沿第二维vstack堆叠,而沿第一维堆叠。等价于column_stack以下hstack命令:
>>> np.hstack(([[1],[2],[3]],[[4],[5],[6]]))
array([[1, 4],
[2, 5],
[3, 6]])
我希望我们能同意这样column_stack更方便。
在column_stack的注释部分,它指出了这一点:
这个功能相当于
np.vstack(tup).T。
其中有许多功能numpy是其他功能的方便包装。例如,vstack的注释部分说:
等效于
np.concatenate(tup, axis=0)如果 tup 包含至少是二维的数组。
看起来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
所以要么hstack((a, b[:, None]))或column_stack((a, b)):
whereNone作为np.newaxis.
如果要堆叠两个向量,则有三个选项:

至于 (undocumented) row_stack,它只是 的同义词vstack,因为一维数组无需额外工作即可用作矩阵行。
3D 及以上的案例被证明太大而无法回答,因此我将其包含在名为Numpy Illustrated的文章中。