It creates many small objects and breaks the data continuity of each row. The following code should be adequate for computing column sums:
~~~
def addi(a: Array[Double], b: Array[Double]): Array[Double] = ...
val colsums = matrix.rows.fold(new Array[Double](matrix.n))(addi)
~~~
I ran a small test of size 1000000x100, where it is about 50x faster than flat-mapping rows to entries and then reducing by column indices.