Given a matrix, we want to subtract the mean of each column, from all entries in that column. So given this matrix:
(mat = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}) // MatrixForm

the mean of each column is m = Mean[mat].

So the result should be

This operation is called centering of observations in data science.
The best I could find using Mathematica, is as follows:
mat = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
m = Mean[mat];
(mat[[All, #]] - m[[#]]) & /@ Range@Length@m // Transpose
But I am not too happy with it. I think it is too complicated. Is there a simpler way to do it? I tried Map and MapThread, but I had hard time getting the syntax to work.
In MATLAB, there is a nice function called bsxfun which is sort of like MapThread. Here is how it is done in MATLAB:
A = [1 2 3 4;5 6 7 8;9 10 11 12];
bsxfun(@minus, A, mean(A))
-4 -4 -4 -4
0 0 0 0
4 4 4 4
It maps the function minus, taking one column from A and one element from mean(A). I think it is more clear than what I have in Mathematica. One should be able to do this in Mathematica using one of the map functions more easily and clearly than what I have above.
The question is: Can the Mathematica solution above be improved?

