2017-02-10 77 views
0

为什么numpy documentation建议更喜欢串连在hstack上?为什么numpy文档建议更喜欢串连在hstack上?

,但你应该更喜欢np.concatenate或np.stack。

根据this answer hstack是一个包装concatenate。那么为什么不使用提高代码可读性的hstack呢?

+0

调用堆栈中的少一帧? – wim

+1

因为如果你试图理解他们两个,你可能不在乎“可读性”和更多性能? – Divakar

+1

可能是因为语义对于2以外的数组维度更清晰。 – user2357112

回答

0

所以在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) 

它通过参数第一循环,并确保每个至少一维。这需要处理0d和标量元素,例如在np.hstack([0,1,np.arange(3)])中。

其余选择之间的连结在一个和唯一的轴或第二个。

vstack是相似的,除了它使东西至少2d,并在1日连接。

从SO问题/答案来看,这些问题仍在使用中,我认为在大多数情况下它们不会造成问题。这是造成大多数问题的np.append。这是我希望他们永远不会添加的那个。

我认为hstackvstack的主要问题是他们鼓励(或至少允许)对尺寸和形状的懒惰思考。当问题出现时,这是因为海报不明白具有相同数量的维度的意思是什么,或者形状必须相同(除了一个轴)。

相关问题