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的文章中。