【问题标题】:Concatenating column vectors using numpy arrays使用 numpy 数组连接列向量
【发布时间】:2013-01-22 08:36:59
【问题描述】:

我想使用 numpy 数组连接“列”向量,但因为默认情况下 numpy 将所有数组视为行向量,所以沿任何轴的 np.hstacknp.concatenate 都无济于事(np.transpose 也没有作为预期的)。

a = np.array((0, 1))
b = np.array((2, 1))
c = np.array((-1, -1))

np.hstack((a, b, c))
# array([ 0,  1,  2,  1, -1, -1])  ## Noooooo
np.reshape(np.hstack((a, b, c)), (2, 3))
# array([[ 0,  1,  2], [ 1, -1, -1]]) ## Reshaping won't help

一种可能性(但太麻烦)是

np.hstack((a[:, np.newaxis], b[:, np.newaxis], c[:, np.newaxis]))
# array([[ 0,  2, -1], [ 1,  1, -1]]) ##

有更好的方法吗?

【问题讨论】:

    标签: python vector numpy concatenation


    【解决方案1】:

    我相信numpy.column_stack 应该做你想做的事。 示例:

    >>> a = np.array((0, 1))
    >>> b = np.array((2, 1))
    >>> c = np.array((-1, -1))
    >>> numpy.column_stack((a,b,c))
    array([[ 0,  2, -1],
           [ 1,  1, -1]])
    

    本质上等于

    >>> numpy.vstack((a,b,c)).T
    

    虽然。正如它在文档中所说的那样。

    【讨论】:

    • 我没看到那个!!恐怕 mathesaurus 网站已经过时了。我希望 hstack 能够在不使用 column_stack 的情况下解决问题,但这已经足够了。
    【解决方案2】:

    我尝试了以下方法。希望这对你正在做的事情足够好?

    >>> np.vstack((a,b,c))
    array([[ 0,  1],
           [ 2,  1],
           [-1, -1]])
    >>> np.vstack((a,b,c)).T
    array([[ 0,  2, -1],
           [ 1,  1, -1]])
    

    【讨论】:

    • 是的,很好,谢谢,但我认为可以沿着 hstack 方式完成一些事情(我的意思是用更直接的方式。为了降低认知负荷,最好是查看并将这些向量连接为列向量)
    • a、b 和 c 是行向量。所以这是合乎逻辑的hstack 创建一个行向量。拥有a = np.array(([0], [1]))(与bc 相同)后跟hstack 将是您想要的。
    • 我们可以这样做,但我们也可以认为这些都是列向量,就 numpy 而言应该没问题。这种方法的问题是你已经改变了向量的形状。事实上,当我在 Matlab 中使用一些简单的线性代数并在 Python 中进行与 there 相同的操作时,我偶然发现了这一点。然而在 Matlab 中,一切都是二维矩阵,所以我们会得到一个简单的 [a' b' c'] 的结果。不幸的是,使用直接翻译np.hstack((a.T, b.T, c.T)) 确实失败了
    • 关于评论“为了降低认知负荷,最好将这些向量作为列向量查看和连接)”,为什么不只是:np.concatenate([v.reshape((-1,1)) for v in (a, b, c)], axis=1)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 2017-05-27
    • 2016-01-29
    • 1970-01-01
    相关资源
    最近更新 更多