2次元配列で表現した行列で列ごとの合計値を算出したい


（概念的には）以下のように、2次元配列で行列を表現したとします。

[code]

    [ [1,2,3], [4,5,6] ..... [n-2,n-1,n] ]
    
[/code]

これを

[code]

    [(1+4+...+n-2), (2+5+...+n-1), (3+6+...+n)]
    
[/code]

という具合に変換したいと思ってます。  
`ruby`でスマートにやるとしたらどういう方法がありますでしょうか？

何とか再帰を使って解いてみましたが、ここまでやらなくても解ける方法があったら教えてもらえると嬉しいです。

[code]

    def aaa(arr)
      if arr.size == 1
        arr
      elsif arr.size == 2
        bbb(arr[0],arr[1])
      else
        bbb(arr[0], aaa(arr[1..-1]))
      end
    end
    
    def bbb(arr1,arr2)
      ret = Array.new(arr1.size, 0)
      arr1.size.times{|n| ret[n] += arr1[n] + arr2[n]}
      ret
    end
    
    実行例：
    a = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
    aaa(a)
    => [22, 26, 30]
    
[/code]



[code]

    a = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
    a.transpose.map { |n| n.inject(:+) }
    # => [22, 26, 30]
    
[/code]

このような方法があります。いかがでしょうか？



[code]

    a = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
    a.transpose.map { |n| n.inject(:+) }
    # => [22, 26, 30]
    
[/code]

このような方法があります。いかがでしょうか？

