以特定方式添加 numpy 数组

Adding numpy arrays in specific way

我有三个 numpy 数组。

   import numpy as np
   a=np.array((1,2,3,4))
   b=np.array((2,3,4,5))
   c=np.array((3,4,5,6))

并且我想以这种方式添加这些数组

   a : [1  2  3  4]
 + b :    [2  3  4  5]
 + c :      [ 3  4  5  6]
   =   [1  4  9 12 10  6]

有什么简单的方法吗?

一种直观的方法(虽然效率低下)是创建一个零的中间数组,然后用 abc 中的值填充每一行。 .. 适当的列移位。一旦你有了这个数组,你就可以对行求和以获得你想要的结果:

import numpy as np

a = np.array((1,2,3,4))
b = np.array((2,3,4,5))
c = np.array((3,4,5,6))

arr_list = [a, b, c]

nr = len(arr_list)
row_lengths = [len(aa) for aa in arr_list]
nc = np.max(row_lengths) + nr - 1

digits = np.zeros((nr, nc), a.dtype)

for ii, aa in enumerate(arr_list):
      digits[ii, ii:(ii + row_lengths[ii])] = aa

print(digits)
# [[1 2 3 4 0 0]
#  [0 2 3 4 5 0]
#  [0 0 3 4 5 6]]

print(digits.sum(0))
# [ 1  4  9 12 10  6]

一种更快的方法是直接计算输出,而不创建中间二维数组

out = np.zeros(np.max(row_lengths) + nr - 1, a.dtype)

for ii, aa in enumerate(arr_list):
    out[ii:(ii + row_lengths[ii])] += aa

print(out)
# [ 1  4  9 12 10  6]