This question already has an answer here:

If I have hundreds of vectors of unequal length that I need to sum, what is the cleanest way to do so?

So, if I have as input


I want the answer


I can see how to do this by finding the length of the longest element and then using PadRight[] to make the others match, like so

Total[Map[PadRight[#, Max[Map[Length[#] &, inp]]] &, inp]]

but this feels inelegant. Is there a better way?


marked as duplicate by Simon Woods, Kuba, Artes, Dr. belisarius, Michael E2 Mar 25 '14 at 14:49

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • $\begingroup$ Your method is exactly what came to mind (before I saw yours). Okay, call me inelegant.. $\endgroup$ – Daniel Lichtblau Mar 25 '14 at 14:02
  • $\begingroup$ @Simon Woods the Ragged Transpose solution in the other thread is exactly what I had in mind. $\endgroup$ – Michael Stern Mar 25 '14 at 14:11

You can use Flatten to transpose the ragged array, then Total:

Total[Flatten[inp, {{2}, {1}}], {2}]
(* {a + e + h, b + f, c + g, d} *)

I'm not sure about elegant but...


Loosing the hard-coded 4...

  • $\begingroup$ Is there a specific way of moving an answer or do I just repost it there? $\endgroup$ – Ymareth Mar 25 '14 at 14:15

Not the answer you're looking for? Browse other questions tagged or ask your own question.