Суммирование вложенных массивов разной длины в python - PullRequest
0 голосов
/ 23 марта 2020

У меня есть массивы p1 и p2, где каждый из них выглядит как

array([  1.00000000e+00,   4.00000000e+00,   8.90000000e+01,
         1.00000000e+00,   3.94090600e-06,   2.22958010e-02,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00])

и

array([  1.00000000e+00,   4.00000000e+00,   8.90000000e+01,
         1.00000000e+00,   3.94090600e-06,   2.87729900e-03,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00])

Так что p2 длиннее, чем p1. Обратите внимание, сами цифры не важны.

Они есть в списке

p = [p1,p2]

Я бы хотел сложить их так, чтобы дополнительные значения в p2 были усечены. Я думал, что смогу сделать

sum(p[:][0:10])

Но это приводит к ошибке операнда. На самом деле я действительно не уверен, понимаю ли я, что пытается сделать функция сумм в этом случае. Я знаю, что это работает в том случае, если p1 и p2 имеют одинаковую длину, хотя.

В основном я хочу получить результат, который дает

p[0][0:10]+p[1][0:10]

, то есть

array([  2.00000000e+00,   8.00000000e+00,   1.78000000e+02,
         2.00000000e+00,   7.88181200e-06,   2.51731000e-02,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00])

Я нашел обходной путь, но он отвратителен, и я чувствую, что есть вероятно, способ получить функцию суммы, чтобы сделать это.

1 Ответ

0 голосов
/ 23 марта 2020

Вы не можете использовать сумму, чтобы сделать это напрямую. sum в основном просто перебирайте список и суммируйте такие элементы, как

def sum(iterables):
  total = 0
  for elem in iterables: total += elem
  return total

Вы можете использовать понимание списка, чтобы достичь своей цели, как показано ниже

# Find out the minimum length of list inside p to truncate excess elements
truncated_len = min([len(list) for list in p])
# Sum up each elements
result = [sum([p[j][i] for j in range(len(p))]) for i in range(truncated_len)]
print(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...