I have to correct myself: that doesn't necessarily preserve types (it may upcast from `np.float32` to `np.float64`). The correct way is

    np.minimum(X.dtype.type(0), np.min(X.data))

(See [PR](https://github.com/scipy/scipy/pull/451) over at SciPy.)