58

numpyvstackcolumn_stack. 通读文档,它看起来好像column_stack是一vstack维数组的实现。它是更有效的实施方式吗?否则,我找不到仅仅拥有vstack.

4

3 回答 3

108

我认为以下代码很好地说明了差异:

>>> 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更方便。

于 2013-05-09T23:58:07.830 回答
16

column_stack的注释部分,它指出了这一点:

这个功能相当于np.vstack(tup).T

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

等效于np.concatenate(tup, axis=0)如果 tup 包含至少是二维的数组。

看起来column_stack只是vstack.

于 2013-05-10T00:01:06.763 回答
12

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

于 2020-12-07T07:25:23.500 回答