Решение
Для пары каждых двух массивов вы можете сделать следующее.
np.hstack([a[:-1], np.array([a[-1], b[0]]).sum(), b[1:]])
Для списка массивов:
Фиктивные данные, которые я использовал здесь, были созданы с кодом, приведенным в конце (самый нижний раздел) этого решения,Вам нужны только следующие две функции для этого.
def array_stitch(a, b):
c = np.hstack([a[:-1], np.array([a[-1], b[0]]).sum(), b[1:]])
return c
def recursive_array_stitch(array_list):
c = array_stitch(array_list[0], array_list[1])
for e in array_list[2:]:
c = array_stitch(c, e)
return c
recursive_array_stitch(array_list)
Выход :
array([ 4, 5, 6, 8, 2, 3, 8, 5, 9, 4, 5, 6, 8, 5, 4, 5, 6,
10, 2])
Здесь array_list
задается как:
[array([4, 5, 6, 7]),
array([1, 2, 3, 4]),
array([4, 5, 6]),
array([3, 4, 5, 6, 7]),
array([1, 2]),
array([3, 4, 5, 6, 7]),
array([2]),
array([1, 2])]
Подробное решение
Только для двух массивов, как показано в постановке задачи вопроса. Для нескольких массивов это может быть использовано рекурсивно, и это было сделано в разделе выше.
import numpy as np
a = np.array((1,2,3))
b = np.array((2,3,4))
c = np.hstack([a[:-1], np.array([a[-1], b[0]]).sum(), b[1:]])
c
Выход :
array([1, 2, 5, 3, 4])
Если вы хотите, чтобы это был кортеж: c.tuple()
даст вам (1, 2, 5, 3, 4)
.
Список массивов
См. Решение в начале для списка массивов. Я буду использовать данные, созданные с использованием следующего кода.
# Dummy Data
np.random.seed = 43
start, stop = np.random.randint(1,5,size=8), np.random.randint(3,9,size=8)
array_list = [np.arange(k,k+3) if l<=k else np.arange(k,l) for k,l in zip(start, stop)]
array_list
Выход :
[array([4, 5, 6, 7]),
array([1, 2, 3, 4]),
array([4, 5, 6]),
array([3, 4, 5, 6, 7]),
array([1, 2]),
array([3, 4, 5, 6, 7]),
array([2]),
array([1, 2])]