X = pushnans(X,truncate)
Pushes nans to the bottom of each column of X. It should be pretty fast.
The second input is an optional flag. If true, the whole-nan rows at the bottom of X are removed.
Two slightly different algorithms are implemented in the function together with a simple check to select the faster version: which is faster depends on what fraction of the input matrix is non-NaN.
Note that only limited testing has been done - please report problems below. I would also be interested to hear if there are more efficient ways of implementing this.