Python numpy vstack与列堆栈
numpyPython 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]
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)的大文章,我想你可能想看看: