将二维数组的行与一维数组的元素相加

问题描述 投票:0回答:3

我有两个ndarrays:

a = [[1, 2], [100, 200]]

b = [10, 20]

是否有可能使用 numpy 获得这样的 ndarray:

[[1 + 10, 2 + 10], [100 + 20, 200 + 20]]

python numpy numpy-ndarray
3个回答
3
投票

你只需要转置第一个数组,执行加法,然后转回:

import numpy as np
a = np.array([[1, 2], [100, 200]])
b = np.array([10, 20])
x = a.T + b
print(x)
# [[ 11 120]
#  [ 12 220]]
print(x.T)
# [[ 11  12]
#  [120 220]]

请注意,转置数组是“免费的”,因此无需担心多次转置。


2
投票

是的,这可以使用 reshape.

    import numpy as np
    a = np.array([[1, 2], [100, 200]])
    b = np.array([10, 20])
    
    result = a + b.reshape(-1, 1) # is a column

1
投票

另一种可能的解决方案,它基于

numpy broadcasting

a + b[:,None]

解释

b[:,None]

array([[10],
       [20]])

所以通过将两个数组相加,数组

array([[10],
       [20]])

将被广播并汇总到

a
的每一列,产生想要的结果。


输出:

array([[ 11,  12],
       [120, 220]])
© www.soinside.com 2019 - 2024. All rights reserved.