Python 为什么numpy文档建议选择concatente而不是hstack?

Python 为什么numpy文档建议选择concatente而不是hstack?,python,numpy,scipy,Python,Numpy,Scipy,为什么numpy建议更喜欢concatente而不是hstack 但是您应该更喜欢np.concatenate或np.stack 根据hstack的说法,它是一个围绕连接的包装器。在这种情况下,为什么不使用提高代码可读性的hstack?因此hstack中的实际代码是: arrs = [atleast_1d(_m) for _m in tup] # As a special case, dimension 0 of 1-dimensional arrays is "horizontal" if a

为什么numpy建议更喜欢concatente而不是hstack

但是您应该更喜欢np.concatenate或np.stack


根据hstack的说法,它是一个围绕连接的包装器。在这种情况下,为什么不使用提高代码可读性的hstack?

因此
hstack
中的实际代码是:

arrs = [atleast_1d(_m) for _m in tup]
# As a special case, dimension 0 of 1-dimensional arrays is "horizontal"
if arrs[0].ndim == 1:
    return _nx.concatenate(arrs, 0)
else:
    return _nx.concatenate(arrs, 1)
它首先循环遍历参数,并确保每个参数至少为1d。这将处理0d和标量元素,例如在
np.hstack([0,1,np.arange(3)])

其余的在一个轴和唯一轴上连接或在第二个轴上连接之间进行选择

vstack
与之类似,不同之处在于它至少使事物成为二维的,并在第一个位置连接

从这些问题/答案来看,它们仍然被大量使用,我认为在大多数情况下它们不会引起问题。产生大多数问题的是
np.append
。这就是我希望他们永远不要添加的内容


我认为
hstack
vstack
的主要问题是它们鼓励(或至少允许)懒惰地思考尺寸和形状。当出现问题时,是因为海报不理解相同尺寸的含义,或者形状必须相等(一个轴除外)。

调用堆栈中少了一个帧?因为如果你试图同时理解它们,你可能不太关心“可读性”还有关于性能的更多信息?可能是因为数组维度的语义比2更清晰。