adding vectors of unequal length [duplicate]

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

inp={{a,b,c,d},{e,f,g},{h}}


{a+e+h,b+f,c+g,d}


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 E2Mar 25 '14 at 14:49

• Your method is exactly what came to mind (before I saw yours). Okay, call me inelegant.. – Daniel Lichtblau Mar 25 '14 at 14:02
• @Simon Woods the Ragged Transpose solution in the other thread is exactly what I had in mind. – 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...

Reap[Nest[(Sow[Total[Map[First,#]]];Map[Rest[#]/.{}:>Sequence[]&,#])&,inp,4]][[2,1]]


Loosing the hard-coded 4...

Reap[NestWhile[(Sow[Total[Map[First,#]]];Map[Rest[#]/.{}:>Sequence[]&,#])&,inp,Length[#]>0&]][[2,1]]

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