来自vstack
文档:
签名:
hstack(tup)
Docstring:
水平(按列)顺序堆叠数组。这等效于沿第二个轴的串联,除了1-D
沿第一个轴连接的数组。
我的问题是为什么例外?
我们已经有concatenate()
。
v = rand(5)
concatenate((v, v)).shape
(10,)
hstack((v, v)).shape
(10,)
stack((v, v), axis=1).shape
(5, 2)
vstack((v, v)).shape
(2, 5)
stack((v, v), axis=0).shape
(2, 5)
拥有vstack = stack(axis=1)
会更有意义。
我们不鼓励使用hstack / vstack / dstack,而是特别鼓励np.stack
。 但是,不同之处在于是否传递二维数组。 一些堆栈函数会插入新的尺寸(对于某些特定版本),我想hstack
不会。
最后增加一句话,说明通常首选的API是np.concatenate
或np.stack
,但我认为删除这些函数没有真正的愿望。
我的问题是_为什么例外_ ???
仅仅因为@seberg没有直接回答这个问题:
一维数组通常在numpy中视为“水平”,而不是“垂直”。 例如,当广播带有(N,)
1D数组的(N, N)
2D数组时,该1D数组将广播到(1, N)
,而不是(N, 1)
。 hstack()/vstack()/dstack()
不是围绕恒定轴的概念构建的(如果需要,您可以使用stack()
),但是“水平/垂直/深度”的概念并不能整齐地映射到固定轴上所有数组维度。
我对阻止令人沮丧的hstack()/vstack()/dstack()
本身的语言表示-1。 我仍然认为它们是异常的,因为它们在语义上是有用的。 他们捕获的概念不是stack()
简洁地捕获的。
例如,通常需要在一个1D数组前添加或添加标量值。 np.hstack([0.0, some_vector])
对此非常有用。 np.stack([0.0, some_vector])
和np.concatenate([0.0, some_vector])
不赞成,因为它们的维数不同。
的确,我认为这些工具与在给定上下文中工作仅有些关系。 因此,让我们关闭它。 我们拥有通用的工具,没有“笨拙”的行为,而其他工具只要具备良好的实用性就可以保留。
@rkern ,然后concatenate
需要修复,恕我直言。 堆叠意味着在添加额外的暗淡之后将其串联起来,此处不予考虑。 但是,好吧...
@seberg ,似乎在这里欢迎弃用警告。 一维数组既不是水平的也不是垂直的。 并且hstack
退回到concatenate
,忘记添加额外的维度。 这确实看起来很“笨拙”。 但是,如果您不愿意讨论,那么……
所有其他?stack
函数也仅在调暗度低于当前操作所需的调暗度时才添加额外的调暗度。 在这种情况下,仅包含0d。
@Atcold我stack
,但是可能不会主动使他们远离使用这些功能。