使用numpy矢量化行式添加?

时间:2017-12-03 15:26:49

标签: python numpy

我有一个数组A = [1,2,3]和一个B =零(3,5)

我想将A [0]添加到B的第一行,[1]添加到第二行等等。

最后我需要以下结果:

B =

1 1 1 1 1

2 2 2 2 2

3 3 3 3 3

a = np.array([1,2,3])
b = np.zeros((3,5))

由于我收到错误,因此无法执行+ b。我可以使用for循环来做到这一点:

for i in range ( len(a) ):
    b[i] += a[i]

但是这会增加我对代码添加的约束。

我们可以使用numpy操作执行此操作吗?

2 个答案:

答案 0 :(得分:0)

试试这个Numpy广播方法。

a.reshape(1,-1).T+b
array([[ 1.,  1.,  1.,  1.,  1.],
       [ 2.,  2.,  2.,  2.,  2.],
       [ 3.,  3.,  3.,  3.,  3.]])

如果你想在intergers中使用它:

(a.reshape(1,-1).T+b).astype(int)
array([[1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2],
       [3, 3, 3, 3, 3]])

答案 1 :(得分:0)

这个怎么样?

In [53]: A = np.array([1,2,3])
In [54]: B = np.zeros((3,5))
In [55]: A = A[:, None]

In [56]: A
Out[56]: 
array([[1],
       [2],
       [3]])

In [57]: B
Out[57]: 
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])

In [58]: A + B
Out[58]: 
array([[ 1.,  1.,  1.,  1.,  1.],
       [ 2.,  2.,  2.,  2.,  2.],
       [ 3.,  3.,  3.,  3.,  3.]])

对于整数数组,结果为:

In [59]: np.asarray(A + B, dtype=np.int)
Out[59]: 
array([[1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2],
       [3, 3, 3, 3, 3]])