<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _build_features_caches(self):
 """This function build two feature cache matrices. That's the self.categorical_features and self.continuous_features attributes. One matrix is for the continuous features and the other is for the categorical features. This is needed to speed up the similarity recommendation process."""

        _donors_pool = self._donors_pool.get()[0]
        _lr_curves = self._lr_curves.get()[0]

        if _donors_pool is None or _lr_curves is None:
            # We need to have both donors_pool and lr_curves defined
            # to reconstruct the matrices
            return None

        self.num_donors = len(_donors_pool)

        # Build a numpy matrix cache for the continuous features.
        self.continuous_features = np.zeros((self.num_donors, len(CONTINUOUS_FEATURES)))
        for idx, d in enumerate(_donors_pool):
            features = [d.get(specified_key) for specified_key in CONTINUOUS_FEATURES]
            self.continuous_features[idx] = features

        # Build the cache for categorical features.
        self.categorical_features = np.zeros(
            (self.num_donors, len(CATEGORICAL_FEATURES)), dtype="object"
        )
        for idx, d in enumerate(_donors_pool):
            features = [d.get(specified_key) for specified_key in CATEGORICAL_FEATURES]
            self.categorical_features[idx] = np.array([features], dtype="object")

        self.logger.info("Reconstructed matrices for similarity recommender")