Exemplo n.º 1
0
def test_gsarray_merge():
    """This function tests GrowableSparseArray merging.

    Because of the specific usage of GrowableSparseArrays, only a reduced
    number of manipulations has been implemented.

    """
    # Basic merge
    gs_array = GrowableSparseArray(n_rows=1)
    gs_array.append(0, np.ones(5))
    gs_array2 = GrowableSparseArray(n_rows=1)
    gs_array2.merge(gs_array)
    assert_array_equal(gs_array.get_data()['row'],
                       gs_array2.get_data()['row'])
    assert_array_equal(gs_array.get_data()['col'],
                       gs_array2.get_data()['col'])
    assert_array_equal(gs_array.get_data()['data'],
                       gs_array2.get_data()['data'])

    # Merge list
    gs_array = GrowableSparseArray(n_rows=2)
    gs_array.append(0, np.ones(5))
    gs_array2 = GrowableSparseArray(n_rows=2)
    gs_array2.append(1, 2 * np.ones(5))
    gs_array3 = GrowableSparseArray(n_rows=2)
    gs_array3.merge([gs_array, gs_array2])
    assert_array_equal(gs_array3.get_data()['row'],
                       np.array([0.] * 5 + [1.] * 5))
    assert_array_equal(gs_array3.get_data()['col'], np.tile(np.arange(5), 2))
    assert_array_equal(gs_array3.get_data()['data'],
                       np.array([1.] * 5 + [2.] * 5))
    # failure case
    assert_raises(TypeError, gs_array3.merge, [gs_array, gs_array2, "foo"])

    # Test failure case (merging arrays with different n_rows)
    gs_array_wrong = GrowableSparseArray(n_rows=2)
    gs_array_wrong.append(0, np.ones(5))
    gs_array_wrong.append(1, np.ones(5))
    gs_array = GrowableSparseArray(n_rows=1)
    assert_raises(ValueError, gs_array.merge, gs_array_wrong)

    # Test failure case (merge a numpy array)
    gs_array = GrowableSparseArray(n_rows=1)
    assert_raises(TypeError, gs_array.merge, np.ones(5))
Exemplo n.º 2
0
def test_compute_counting_statistic_from_parcel_level_scores(random_state=1):
    """Test the computation of RPBI's counting statistic.
    """
    # check random state
    rng = check_random_state(random_state)

    # Generate toy data
    # define data structure
    shape = (5, 5, 5)
    n_voxels = np.prod(shape)
    mask = np.ones(shape, dtype=bool)
    # data generation
    data1 = np.ones(shape)
    data1[1:3, 1:3, 1:3] = 2.
    data2 = np.ones(shape)
    data2[3:, 3:, 3:] = 4.
    data = np.ones((4, np.prod(shape)))  # 4 ravelized images
    data[0] = np.ravel(data1)
    data[1] = np.ravel(data2)

    # Parcellate data and extract signal averages
    n_parcellations = 2
    n_parcels = 3
    parcelled_data, labels = _build_parcellations(
        data, mask, n_parcellations=n_parcellations, n_parcels=n_parcels,
        # make sure we use observations 1 and 2 at least once
        n_bootstrap_samples=6, random_state=rng)
    parcel_level_results = GrowableSparseArray(n_rows=2)
    data_tmp = parcelled_data[0]
    data_tmp[data_tmp < 2] = 0
    parcel_level_results.append(0, data_tmp)
    data_tmp = parcelled_data[1]
    data_tmp[data_tmp < 2] = 0
    parcel_level_results.append(1, data_tmp)
    parcellation_masks = np.zeros((n_parcellations * n_parcels, n_voxels))
    for j in np.arange(n_parcellations):  # loop on parcellations
        label_slice = slice(j * n_voxels, (j + 1) * n_voxels)
        for l in np.unique(labels[label_slice]):
            parcellation_masks[l] = labels[label_slice] == l
    parcellation_masks = sparse.coo_matrix(
        parcellation_masks.astype(np.float32)).tocsr()

    # Transform back data
    # (transformed data should be similar to the original data (up to
    # thresholding and sum across parcellations) since by construction
    # the signal is homogeneous within each parcel for each subject)
    thresholded_data = data.copy()
    thresholded_data[thresholded_data < 2] = 0.
    thresholded_data *= 2.
    res = _compute_counting_statistic_from_parcel_level_scores(
        parcel_level_results.get_data(), slice(0, 2), parcellation_masks,
        n_parcellations, n_parcellations * n_parcels)
    counting_stats_original_data, h0 = res
    assert_array_equal(counting_stats_original_data,
                       thresholded_data[0])
    assert_array_equal(h0, [8])

    # Same thing but only for the permuted data
    res = _compute_counting_statistic_from_parcel_level_scores(
        parcel_level_results.get_data()[2:], slice(1, 2),
        parcellation_masks, n_parcellations, n_parcellations * n_parcels)
    counting_stats_original_data, h0 = res
    assert_array_equal(counting_stats_original_data, [])
    assert_array_equal(h0, [8])
Exemplo n.º 3
0
def test_gsarray_append_data():
    """This function tests GrowableSparseArray creation and filling.

    """
    # Simplest example
    gs_array = GrowableSparseArray(n_rows=1)
    gs_array.append(0, np.ones(5))
    assert_array_equal(gs_array.get_data()['row'], np.zeros(5))
    assert_array_equal(gs_array.get_data()['col'], np.arange(5))
    assert_array_equal(gs_array.get_data()['data'], np.ones(5))

    # Append with no structure extension needed
    gs_array = GrowableSparseArray(n_rows=1, max_elts=10)
    gs_array.append(0, np.ones(5))
    assert_array_equal(gs_array.get_data()['row'], np.zeros(5))
    assert_array_equal(gs_array.get_data()['col'], np.arange(5))
    assert_array_equal(gs_array.get_data()['data'], np.ones(5))

    # Void array
    gs_array = GrowableSparseArray(n_rows=1)
    gs_array.append(0, np.zeros(5))
    assert_array_equal(gs_array.get_data()['row'], [])
    assert_array_equal(gs_array.get_data()['col'], [])
    assert_array_equal(gs_array.get_data()['data'], [])

    # Toy example
    gs_array = GrowableSparseArray(n_rows=10)
    for i in range(10):
        data = np.arange(10) - i
        data[data < 8] = 0
        gs_array.append(i, data)
    assert_array_equal(gs_array.get_data()['row'], np.array([0., 0., 1.]))
    assert_array_equal(gs_array.get_data()['col'], [8, 9, 9])
    assert_array_equal(gs_array.get_data()['data'], [8., 9., 8.])
Exemplo n.º 4
0
def test_gsarray_merge():
    """This function tests GrowableSparseArray merging.

    Because of the specific usage of GrowableSparseArrays, only a reduced
    number of manipulations has been implemented.

    """
    # Basic merge
    gs_array = GrowableSparseArray(n_rows=1)
    gs_array.append(0, np.ones(5))
    gs_array2 = GrowableSparseArray(n_rows=1)
    gs_array2.merge(gs_array)
    assert_array_equal(gs_array.get_data()['row'], gs_array2.get_data()['row'])
    assert_array_equal(gs_array.get_data()['col'], gs_array2.get_data()['col'])
    assert_array_equal(gs_array.get_data()['data'],
                       gs_array2.get_data()['data'])

    # Merge list
    gs_array = GrowableSparseArray(n_rows=2)
    gs_array.append(0, np.ones(5))
    gs_array2 = GrowableSparseArray(n_rows=2)
    gs_array2.append(1, 2 * np.ones(5))
    gs_array3 = GrowableSparseArray(n_rows=2)
    gs_array3.merge([gs_array, gs_array2])
    assert_array_equal(gs_array3.get_data()['row'],
                       np.array([0.] * 5 + [1.] * 5))
    assert_array_equal(gs_array3.get_data()['col'], np.tile(np.arange(5), 2))
    assert_array_equal(gs_array3.get_data()['data'],
                       np.array([1.] * 5 + [2.] * 5))
    # failure case
    assert_raises(TypeError, gs_array3.merge, [gs_array, gs_array2, "foo"])

    # Test failure case (merging arrays with different n_rows)
    gs_array_wrong = GrowableSparseArray(n_rows=2)
    gs_array_wrong.append(0, np.ones(5))
    gs_array_wrong.append(1, np.ones(5))
    gs_array = GrowableSparseArray(n_rows=1)
    assert_raises(ValueError, gs_array.merge, gs_array_wrong)

    # Test failure case (merge a numpy array)
    gs_array = GrowableSparseArray(n_rows=1)
    assert_raises(TypeError, gs_array.merge, np.ones(5))
Exemplo n.º 5
0
def test_compute_counting_statistic_from_parcel_level_scores(random_state=1):
    """Test the computation of RPBI's counting statistic.
    """
    # check random state
    rng = check_random_state(random_state)

    # Generate toy data
    # define data structure
    shape = (5, 5, 5)
    n_voxels = np.prod(shape)
    mask = np.ones(shape, dtype=bool)
    # data generation
    data1 = np.ones(shape)
    data1[1:3, 1:3, 1:3] = 2.
    data2 = np.ones(shape)
    data2[3:, 3:, 3:] = 4.
    data = np.ones((4, np.prod(shape)))  # 4 ravelized images
    data[0] = np.ravel(data1)
    data[1] = np.ravel(data2)

    # Parcellate data and extract signal averages
    n_parcellations = 2
    n_parcels = 3
    parcelled_data, labels = _build_parcellations(
        data,
        mask,
        n_parcellations=n_parcellations,
        n_parcels=n_parcels,
        # make sure we use observations 1 and 2 at least once
        n_bootstrap_samples=6,
        random_state=rng)
    parcel_level_results = GrowableSparseArray(n_rows=2)
    data_tmp = parcelled_data[0]
    data_tmp[data_tmp < 2] = 0
    parcel_level_results.append(0, data_tmp)
    data_tmp = parcelled_data[1]
    data_tmp[data_tmp < 2] = 0
    parcel_level_results.append(1, data_tmp)
    parcellation_masks = np.zeros((n_parcellations * n_parcels, n_voxels))
    for j in np.arange(n_parcellations):  # loop on parcellations
        label_slice = slice(j * n_voxels, (j + 1) * n_voxels)
        for l in np.unique(labels[label_slice]):
            parcellation_masks[l] = labels[label_slice] == l
    parcellation_masks = sparse.coo_matrix(
        parcellation_masks.astype(np.float32)).tocsr()

    # Transform back data
    # (transformed data should be similar to the original data (up to
    # thresholding and sum across parcellations) since by construction
    # the signal is homogeneous within each parcel for each subject)
    thresholded_data = data.copy()
    thresholded_data[thresholded_data < 2] = 0.
    thresholded_data *= 2.
    res = _compute_counting_statistic_from_parcel_level_scores(
        parcel_level_results.get_data(), slice(0, 2), parcellation_masks,
        n_parcellations, n_parcellations * n_parcels)
    counting_stats_original_data, h0 = res
    assert_array_equal(counting_stats_original_data, thresholded_data[0])
    assert_array_equal(h0, [8])

    # Same thing but only for the permuted data
    res = _compute_counting_statistic_from_parcel_level_scores(
        parcel_level_results.get_data()[2:], slice(1, 2), parcellation_masks,
        n_parcellations, n_parcellations * n_parcels)
    counting_stats_original_data, h0 = res
    assert_array_equal(counting_stats_original_data, [])
    assert_array_equal(h0, [8])
Exemplo n.º 6
0
def test_gsarray_append_data():
    """This function tests GrowableSparseArray creation and filling.

    """
    # Simplest example
    gs_array = GrowableSparseArray(n_rows=1)
    gs_array.append(0, np.ones(5))
    assert_array_equal(gs_array.get_data()['row'], np.zeros(5))
    assert_array_equal(gs_array.get_data()['col'], np.arange(5))
    assert_array_equal(gs_array.get_data()['data'], np.ones(5))

    # Append with no structure extension needed
    gs_array = GrowableSparseArray(n_rows=1, max_elts=10)
    gs_array.append(0, np.ones(5))
    assert_array_equal(gs_array.get_data()['row'], np.zeros(5))
    assert_array_equal(gs_array.get_data()['col'], np.arange(5))
    assert_array_equal(gs_array.get_data()['data'], np.ones(5))

    # Void array
    gs_array = GrowableSparseArray(n_rows=1)
    gs_array.append(0, np.zeros(5))
    assert_array_equal(gs_array.get_data()['row'], [])
    assert_array_equal(gs_array.get_data()['col'], [])
    assert_array_equal(gs_array.get_data()['data'], [])

    # Toy example
    gs_array = GrowableSparseArray(n_rows=10)
    for i in range(10):
        data = np.arange(10) - i
        data[data < 8] = 0
        gs_array.append(i, data)
    assert_array_equal(gs_array.get_data()['row'], np.array([0., 0., 1.]))
    assert_array_equal(gs_array.get_data()['col'], [8, 9, 9])
    assert_array_equal(gs_array.get_data()['data'], [8., 9., 8.])