def split_data(labels, training_matrix, ids, other, training, validation):
    """
    Splits the data matrix into a training, validation, and testing set.

    Parameters
    ----------
    labels : np.array
         Array of labels for each data row.
    training_matrix : np.ndarray
         Array of training-validation-test data.
    ids : np.array
         Array of identifiers for the light curves.
    other : np.array
         Array of signals (for flares -- tpeak; for transits -- SNR).
    training : float
         How much of the data should be in the training set.
    validatoin : float
        How much of the data should be in the validation & test set.

    Returns 
    -------
    x_train : np.ndarray
    y_train : np.narray
    x_val : np.ndarray
    y_val : np.narray
    val_ids : np.array
    val_other : np.array
    x_test : np.ndarray
    y_test : np.array
    test_ids : np.array
    test_other : np.array
    """
    train_cutoff = int(training * len(labels))
    val_cutoff   = int(validation * len(labels))
    
    x_train = training_matrix[0:train_cutoff]
    y_train = labels[0:train_cutoff]
    
    x_val = training_matrix[train_cutoff:val_cutoff]
    y_val = labels[train_cutoff:val_cutoff]
    
    x_test = training_matrix[val_cutoff:]
    y_test = labels[val_cutoff:]
    
    x_train = x_train.reshape(x_train.shape[0], x_train.shape[1], 1)
    x_val   = x_val.reshape(x_val.shape[0], x_train.shape[1], 1)
    x_test  = x_test.reshape(x_test.shape[0], x_test.shape[1], 1)

    test_ids   = ids[val_cutoff:]
    test_other = other[val_cutoff:]
    
    val_ids   = ids[train_cutoff:val_cutoff]
    val_other = other[train_cutoff:val_cutoff]
    
    return x_train, y_train, x_val, y_val, val_ids, val_other, x_test, y_test, test_ids, test_other