The Python Book

matrix colsum numpy
20150728

# Dot product used for aggregation of an unrolled matrix

Aggregations by column/row on an unrolled matrix, done via dot product. No need to reshape.

## Column sums

Suppose this 'flat' array ..

``a=np.array( [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] )``

.. represents an 'unrolled' 3x4 matrix ..

``````a.reshape(3,4)

array([[ 1,  2,  3,  4],
[ 5,  6,  7,  8],
[ 9, 10, 11, 12]])``````

.. of which you want make the sums by column ..

``````a.reshape(3,4).sum(axis=0)
array([15, 18, 21, 24])``````

This can also be done by the dot product of a tiled eye with the array!

``````np.tile(np.eye(4),3)

array([[ 1,  0,  0,  0,  1,  0,  0,  0,  1,  0,  0,  0],
[ 0,  1,  0,  0,  0,  1,  0,  0,  0,  1,  0,  0],
[ 0,  0,  1,  0,  0,  0,  1,  0,  0,  0,  1,  0],
[ 0,  0,  0,  1,  0,  0,  0,  1,  0,  0,  0,  1]])``````

Dot product:

``````np.tile(np.eye(4),3).dot(a)
array([ 15.,  18.,  21.,  24.])``````

## Row sums

Similar story :

``````a.reshape(3,4)
array([[ 1,  2,  3,  4],
[ 5,  6,  7,  8],
[ 9, 10, 11, 12]])``````

Sum by row:

``````a.reshape(3,4).sum(axis=1)
array([10, 26, 42])``````

Can be expressed by a Kronecker eye-onesie :

``````np.kron( np.eye(3), np.ones(4) )

array([[ 1,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0],
[ 0,  0,  0,  0,  1,  1,  1,  1,  0,  0,  0,  0],
[ 0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1]])``````

Dot product:

``````np.kron( np.eye(3), np.ones(4) ).dot(a)
array([ 10.,  26.,  42.])``````

For the np.kron() function see Kronecker product

Notes by Willem Moors. Generated on momo:/home/willem/sync/20151223_datamungingninja/pythonbook at 2019-07-31 19:22