【问题标题】:numpy add along first axisnumpy沿第一个轴添加
【发布时间】:2019-04-12 11:50:33
【问题描述】:

我想通过简单地沿第一个轴执行相同的加法来添加两个不同维度的数组。

非矢量化解决方案:

x = np.array([[[1,2],[3,4],[5,6]],[[7,8],[9,0],[1,2]],[[3,4],[5,6],[7,8]],[[9,0],[1,2],[3,4]]]) #shape (4,3,2)
y = np.array([[1,2],[3,4],[5,6]]) #shape (3,2)

ans = np.empty(x.shape)
for i in range(x.shape[0]):
    ans[i] = x[i] + y

print(ans) #shape (4,3,2)

我怎样才能适当地进行这个广播?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    由于broadcasting [numpy-doc],您可以简单地使用:

    x + y
    

    所以这里我们计算索引 i,j,k 处的元素为:

    xijk+yjk

    这给出了:

    >>> x + y
    array([[[ 2,  4],
            [ 6,  8],
            [10, 12]],
    
           [[ 8, 10],
            [12,  4],
            [ 6,  8]],
    
           [[ 4,  6],
            [ 8, 10],
            [12, 14]],
    
           [[10,  2],
            [ 4,  6],
            [ 8, 10]]])
    >>> (x + y).shape
    (4, 3, 2)
    

    如果将两个数组相加,例如第一个数组具有三个维度,第二个数组具有三个维度,并且第一个左侧数组的最后两个维度等于右侧数组的维度,则右侧的数组一边是“广播”。这意味着它被视为一个三维数组,其中每个子数组等于右侧的数组。

    您还可以在this answer 等任意位置为y“引入”额外维度,以“广播”特定维度。

    【讨论】:

    • (叹息)...我的示例是“用于一个或多个轴”的用例的不良说明。我将接受此答案,编辑问题以反映此答案并在新问题中发布更好的示例。
    • @Scott:通常它也适用于更多维度,它通常向右对齐。
    • Ahhhhh....所以,例如,将我的轴滚动到适当的位置然后添加就可以了?
    • @Scott:你可以转置等,然后进行计算。
    猜你喜欢
    • 2016-05-25
    • 2017-09-27
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多