Create a matrix, transpose it, and then create a new FVM

        :raise NotImplementedError: if all existing rows aren't keyed
        :return: a new FVM rotated from self

def transpose(self):
        """ Create a matrix, transpose it, and then create a new FVM

        :raise NotImplementedError: if all existing rows aren't keyed
        :return: a new FVM rotated from self
        """
        if len(self._row_name_list) != len(self._rows):
            raise NotImplementedError("You can't rotate a FVM that doesn't have all rows keyed")

        fvm = FeatureVectorMatrix(default_value=self._default_value, default_to_hashed_rows=self._default_to_hashed_rows)
        fvm._update_internal_column_state(self._row_name_list)
        for idx, r in enumerate(self.get_matrix().transpose()):
            fvm.add_row(r.tolist(), self._column_name_list[idx])

        return fvm