nanshe.syn.data module

The module data provides a few primitives for generating synthetic data.

Overview

These include generating mask stacks, gaussian stacks, and random points. These are primarily used for testing the algorithm, but could be used in benchmarking or other applications.

API

nanshe.syn.data.generate_gaussian_images(space, means, std_devs, magnitudes)[source]

Generate a stack of gaussians (first index indicates which image); where, each contains a gaussian using a center and radius provided.

Note

This uses a normalized gaussian filter to create the gaussians. So, the sum over any image in the stack will be the magnitude given (with some small error).

Parameters:
  • space (tuple of ints) – The size of the mask.
  • means (list of tuples of numbers) – List of means with one per gaussian.
  • std_devs (list of numbers) – List of standard deviations with one per gaussian.
  • magnitudes (list of numbers) – List of magnitudes for each gaussian.
Returns:

A stack of masks (first index

indicates which mask) with a gaussian using a center and radius for each mask.

Return type:

numpy.ndarray

Examples

>>> generate_gaussian_images((5, 5), (2, 2), 0.5, 1) #doctest: +NORMALIZE_WHITESPACE
array([[[ 6.96247819e-08, 2.80886418e-05, 2.07548550e-04, 2.80886418e-05, 6.96247819e-08],
        [ 2.80886418e-05, 1.13317669e-02, 8.37310610e-02, 1.13317669e-02, 2.80886418e-05],
        [ 2.07548550e-04, 8.37310610e-02, 6.18693507e-01, 8.37310610e-02, 2.07548550e-04],
        [ 2.80886418e-05, 1.13317669e-02, 8.37310610e-02, 1.13317669e-02, 2.80886418e-05],
        [ 6.96247819e-08, 2.80886418e-05, 2.07548550e-04, 2.80886418e-05, 6.96247819e-08]]])
>>> round(
...     generate_gaussian_images((5, 5), (2, 2), 0.5, 1).sum(), 3
... )
1.0
>>> generate_gaussian_images((5, 5), (2, 2), 0.25, 1) #doctest: +NORMALIZE_WHITESPACE
array([[[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],
        [ 0.00000000e+00, 1.12384321e-07, 3.35012940e-04, 1.12384321e-07, 0.00000000e+00],
        [ 0.00000000e+00, 3.35012940e-04, 9.98659499e-01, 3.35012940e-04, 0.00000000e+00],
        [ 0.00000000e+00, 1.12384321e-07, 3.35012940e-04, 1.12384321e-07, 0.00000000e+00],
        [ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]]])
>>> round(
...     generate_gaussian_images((5, 5), (2, 2), 0.25, 1).sum(), 3
... )
1.0
>>> generate_gaussian_images(
...     (5, 5), (2, 2), 0.25, 5
... ) #doctest: +NORMALIZE_WHITESPACE
array([[[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],
        [ 0.00000000e+00, 5.61921606e-07, 1.67506470e-03, 5.61921606e-07, 0.00000000e+00],
        [ 0.00000000e+00, 1.67506470e-03, 4.99329749e+00, 1.67506470e-03, 0.00000000e+00],
        [ 0.00000000e+00, 5.61921606e-07, 1.67506470e-03, 5.61921606e-07, 0.00000000e+00],
        [ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]]])
>>> round(
...     generate_gaussian_images((5, 5), (2, 2), 0.25, 5).sum(), 3
... )
5.0
>>> generate_gaussian_images((3, 3, 3), (1, 1, 1), 0.25, 100)
array([[[[  3.76754623e-09,   1.12308970e-05,   3.76754623e-09],
         [  1.12308970e-05,   3.34788322e-02,   1.12308970e-05],
         [  3.76754623e-09,   1.12308970e-05,   3.76754623e-09]],
<BLANKLINE>
        [[  1.12308970e-05,   3.34788322e-02,   1.12308970e-05],
         [  3.34788322e-02,   9.97989922e+01,   3.34788322e-02],
         [  1.12308970e-05,   3.34788322e-02,   1.12308970e-05]],
<BLANKLINE>
        [[  3.76754623e-09,   1.12308970e-05,   3.76754623e-09],
         [  1.12308970e-05,   3.34788322e-02,   1.12308970e-05],
         [  3.76754623e-09,   1.12308970e-05,   3.76754623e-09]]]])
>>> round(
...     generate_gaussian_images(
...         (3, 3, 3), (1, 1, 1), 0.25, 100
...     ).sum(),
...     3
... )
100.0
nanshe.syn.data.generate_hyperdisc_masks(space, centers, radii_max, include_boundary_max=False, radii_min=None, include_boundary_min=False)[source]

Generate a stack of masks (first index indicates which mask); where, each contains a hyperdisc constructed using a center and radius provided.

Parameters:
  • space (tuple of ints) – The size of the mask.
  • centers (list of tuples of numbers) – List of centers with one per hyperdisc.
  • radii_max (list of numbers) – List of max radii with one per hyperdisc.
  • include_boundary_max (bool) – Whether the mask should contain the max boundary of the hyperdisc or not.
  • radii_min (list of numbers) – List of min radii with one per hyperdisc.
  • include_boundary_min (bool) – Whether the mask should contain the min boundary of the hyperdisc or not.
Returns:

A stack of masks (first index

indicates which mask) with a filled hyperdisc using a center and radius for each mask.

Return type:

numpy.ndarray

Examples

>>> generate_hyperdisc_masks((3, 3), (1, 1), 1.25)
array([[[False,  True, False],
        [ True,  True,  True],
        [False,  True, False]]], dtype=bool)
>>> generate_hyperdisc_masks((3, 3), (1, 1), 1.25, radii_min=0.0, include_boundary_min=False)
array([[[False,  True, False],
        [ True, False,  True],
        [False,  True, False]]], dtype=bool)
>>> generate_hyperdisc_masks((3, 3, 3), (1, 1, 1), 1.25)
array([[[[False, False, False],
         [False,  True, False],
         [False, False, False]],
<BLANKLINE>
        [[False,  True, False],
         [ True,  True,  True],
         [False,  True, False]],
<BLANKLINE>
        [[False, False, False],
         [False,  True, False],
         [False, False, False]]]], dtype=bool)
>>> generate_hyperdisc_masks((9, 9), (4, 4), 5)
array([[[False, False,  True,  True,  True,  True,  True, False, False],
        [False,  True,  True,  True,  True,  True,  True,  True, False],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [False,  True,  True,  True,  True,  True,  True,  True, False],
        [False, False,  True,  True,  True,  True,  True, False, False]]], dtype=bool)
>>> generate_hyperdisc_masks(
...     (9, 9), (4, 4), 5, include_boundary_max=True
... )
array([[[False,  True,  True,  True,  True,  True,  True,  True, False],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [False,  True,  True,  True,  True,  True,  True,  True, False]]], dtype=bool)
>>> generate_hyperdisc_masks(
...     (9, 9), (4, 4), 5, True, 4, True
... )
array([[[False,  True,  True,  True,  True,  True,  True,  True, False],
        [ True,  True, False, False, False, False, False,  True,  True],
        [ True, False, False, False, False, False, False, False,  True],
        [ True, False, False, False, False, False, False, False,  True],
        [ True, False, False, False, False, False, False, False,  True],
        [ True, False, False, False, False, False, False, False,  True],
        [ True, False, False, False, False, False, False, False,  True],
        [ True,  True, False, False, False, False, False,  True,  True],
        [False,  True,  True,  True,  True,  True,  True,  True, False]]], dtype=bool)
nanshe.syn.data.generate_hypersphere_masks(space, centers, radii, include_boundary=False)[source]

Generate a stack of masks (first index indicates which mask); where, each contains a hypersphere constructed using a center and radius provided.

Parameters:
  • space (tuple of ints) – The size of the mask.
  • centers (list of tuples of numbers) – List of centers with one per hypersphere.
  • radii (list of numbers) – List of radii with one per hypersphere.
  • include_boundary (bool) – Whether the mask should contain the boundary of the hypersphere or not.
Returns:

A stack of masks (first index

indicates which mask) with a filled hypersphere using a center and radius for each mask.

Return type:

numpy.ndarray

Examples

>>> generate_hypersphere_masks((3, 3), (1, 1), 1.25)
array([[[False,  True, False],
        [ True,  True,  True],
        [False,  True, False]]], dtype=bool)
>>> generate_hypersphere_masks((3, 3, 3), (1, 1, 1), 1.25)
array([[[[False, False, False],
         [False,  True, False],
         [False, False, False]],
<BLANKLINE>
        [[False,  True, False],
         [ True,  True,  True],
         [False,  True, False]],
<BLANKLINE>
        [[False, False, False],
         [False,  True, False],
         [False, False, False]]]], dtype=bool)
>>> generate_hypersphere_masks((9, 9), (4, 4), 5)
array([[[False, False,  True,  True,  True,  True,  True, False, False],
        [False,  True,  True,  True,  True,  True,  True,  True, False],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [False,  True,  True,  True,  True,  True,  True,  True, False],
        [False, False,  True,  True,  True,  True,  True, False, False]]], dtype=bool)
>>> generate_hypersphere_masks(
...     (9, 9), (4, 4), 5, include_boundary=True
... )
array([[[False,  True,  True,  True,  True,  True,  True,  True, False],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [ True,  True,  True,  True,  True,  True,  True,  True,  True],
        [False,  True,  True,  True,  True,  True,  True,  True, False]]], dtype=bool)
nanshe.syn.data.generate_random_bound_points(space, radii)[source]

Generate a collection of random points that are the center of a hypersphere contained within the space.

Note

Uses the typical convention [0, space_i) for all space_i from space. Applies the additional constraint [radius_i, space_i - radius_i).

Parameters:
  • space (tuple of ints) – The size of the space where the points will lie.
  • radii (list of numbers) – Additional radius for each point to remain away from the boundary.
Returns:

An array with the random

points each using a radius from radii to constrain itself. First index is which point. Second is which coordinate.

Return type:

numpy.ndarray

Examples

>>> numpy.random.seed(0)
>>> generate_random_bound_points((100, 100), 5)
array([[49, 52]])
>>> numpy.random.seed(0)
>>> generate_random_bound_points((100, 100), (5, 5))
array([[49, 52],
       [69, 72]])
>>> numpy.random.seed(0)
>>> generate_random_bound_points((100, 100, 100), (5,))
array([[49, 52, 69]])
>>> numpy.random.seed(0)
>>> generate_random_bound_points((100, 100, 100), (5, 5))
array([[49, 52, 69],
       [72, 72, 14]])