sklearn.compose.ColumnTransformer do not keep transformers` desired dtype of output

Hi,

We are using ColumnTransformer as our unified preprocessor to transform the data. We have the following transformers:

```python
from sklearn.impute import SimpleImputer
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder, OrdinalEncoder, FunctionTransformer



mean_imputer_pipline = Pipeline(steps=[('imputer', SimpleImputer(strategy='mean'))])
constan_one_imputer_pipline = Pipeline(steps=[('imputer', SimpleImputer(strategy='constant', fill_value=1.0))])
constan_zero_imputer_pipline = Pipeline(steps=[('imputer', SimpleImputer(strategy='constant', fill_value=0.0))])

categorical_transformer = Pipeline(steps=[
        ('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
        ('onehot', OneHotEncoder(handle_unknown='ignore', dtype=np.int8))])

ordinal_categories = [determine_mapping(ordinal_feature) for ordinal_feature in ordinal_features]

ordinal_transformer = Pipeline(steps=[('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
                                          ('ordinal', OrdinalEncoder(categories=ordinal_categories, dtype=np.int8))])
```

From them we create our ColumnTransformer object:
```python
from sklearn.compose import ColumnTransformer



preprocessor = ColumnTransformer(
        transformers=[
            ('num_mean', mean_imputer_pipline, mean_imputer_features),
            ('num_constant_one', constan_one_imputer_pipline, constant_one_imputer_features),
            ('num_constant_zero', constan_zero_imputer_pipline, constant_zero_imputer_features),
            ('cat', categorical_transformer, categorical_features),
            ('ordinal', ordinal_transformer, ordinal_features)],
        remainder="drop")
```

When we use the ```transform``` method the desired dtypes of output for  ```categorical_transformer``` and ```ordinal_transformer``` that should be ```np.int8``` isn't kept. What we are receiving is numpy's ndarray that its dtype is ```np.float64```.

We debuged the code, and found out that in order to join the outputs from the different transformers the ColumnTransformer is using the method ```np.hstack``` which creates a unified 1 ndarray with one dtype.

Is there a solution?
If not:
1. Please add a warning in the documentation of the ColumnTransformer that the concatenate results won't use the desired dtype of output of the transformers. 
2. Allow us an option to receive the result without concatenation, as a list of ndarrays.

COMMENT:
The column transformer takes into account the dtypes of every transformer to determine the desired dtype. In your case, the categorical features are outputting `np.int8`, but the numerical features are `np.float64`. For this to fit in one ndarray, `hstack` needs a dtype that can hold both `np.int8` and `np.float64`, which is `np.float64`. It's basically doing this to determine the type:

```python
import numpy as np
np.common_type(
    np.asarray([2.1], dtype=np.float32), # dtype of numerical features
    np.asarray([1], dtype=np.uint8), # dtype of categorical features
)
# np.float64
```

> Allow us an option to receive the result without concatenation, as a list of ndarrays.

I am -1 for this. This will complicate the API and make ColumnTransformer inconsistent with the other transformers.

> Please add a warning in the documentation of the ColumnTransformer that the concatenate results won't use the desired dtype of output of the transformers.

As described above, `ColumnTransformer` finds the desired dtype by considering the dtypes for every transformer. I think we can expand the documentation on how it determines the desired dtype.

#### Possible upcoming solution

An upcoming solution to this will be [SLEP018](https://github.com/scikit-learn/enhancement_proposals/pull/72) which will enable pandas output for transformers, which includes `ColumnTransformer`. This will preserve the dtypes by returning a pandas DataFrame.

Labels: Documentation, module:compose