autolens.Array2D#
- class Array2D[source]#
Bases:
AbstractArray2DA uniform 2D array of values, which are paired with a 2D mask of pixels.
The
Array2D`, like all data structures (e.g. ``Grid2D,VectorYX2D) has in-built functionality which:Applies a 2D mask (a
Mask2Dobject) to the da_ta structure’s values.Maps the data structure between two data representations: slim` (all unmasked values in a 1D
ndarray) andnative(all unmasked values in a 2Dndarray).Associates Cartesian
Grid2Dobjects of (y,x) coordinates with the data structure (e.g. a (y,x) grid of all unmasked pixels).Associates grids with the data structure, which perform calculations higher resolutions which are then binned up.
Each entry of an
Array2Dcorresponds to a value at the centre of a pixel in its correspondingMask2D. It is ordered such that pixels begin from the top-row of the corresponding mask and go right and down. The positive y-axis is upwards and positive x-axis to the right.A detailed description of the data structure API is provided below.
__slim__
Below is a visual illustration of an
Array2D’s 2D mask, where a total of 10 pixels are unmasked and are included in the array.x x x x x x x x x x x x x x x x x x x x This is an example ``Mask2D``, where: x x x x x x x x x x x x x x O O x x x x x = `True` (Pixel is masked and excluded from the array) x x x O O O O x x x O = `False` (Pixel is not masked and included in the array) x x x O O O O x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
The mask pixel index’s are as follows (the positive / negative direction of the
Grid2Dobjects associated with the array are also shown on the y and x axes).<--- -ve x +ve --> x x x x x x x x x x ^ array_2d[0] = 10 x x x x x x x x x x I array_2d[1] = 20 x x x x x x x x x x I array_2d[2] = 30 x x x x 0 1 x x x x +ve array_2d[3] = 40 x x x 2 3 4 5 x x x y array_2d[4] = 50 x x x 6 7 8 9 x x x -ve array_2d[5] = 60 x x x x x x x x x x I array_2d[6] = 70 x x x x x x x x x x I array_2d[7] = 80 x x x x x x x x x x \/ array_2d[8] = 90 x x x x x x x x x x array_2d[9] = 100
The
Array2Din itsslimdata representation is anndarrayof shape [total_unmasked_pixels].For the
Mask2Dabove theslimrepresentation therefore contains 10 entries and two examples of these entries are:array[3] = the 4th unmasked pixel's value, given by value 40 above. array[6] = the 7th unmasked pixel's value, given by value 80 above.
A Cartesian grid of (y,x) coordinates, corresponding to all
slimvalues (e.g. unmasked pixels) is given byarray_2d.derive_grid.masked.slim.__native__
The
Array2Dabove, but represented as an anndarrayof shape [total_y_values, total_x_values], where all masked entries have values of 0.0.For the following mask:
x x x x x x x x x x x x x x x x x x x x This is an example ``Mask2D``, where: x x x x x x x x x x x x x x O O x x x x x = `True` (Pixel is masked and excluded from the array) x x x O O O O x x x O = `False` (Pixel is not masked and included in the array) x x x O O O O x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
Where the array has the following indexes (left figure) and values (right):
<--- -ve x +ve --> x x x x x x x x x x ^ array_2d[0] = 10 x x x x x x x x x x I array_2d[1] = 20 x x x x x x x x x x I array_2d[2] = 30 x x x x 0 1 x x x x +ve array_2d[3] = 40 x x x 2 3 4 5 x x x y array_2d[4] = 50 x x x 6 7 8 9 x x x -ve array_2d[5] = 60 x x x x x x x x x x I array_2d[6] = 70 x x x x x x x x x x I array_2d[7] = 80 x x x x x x x x x x \/ array_2d[8] = 90 x x x x x x x x x x array_2d[9] = 100
In the above array:
- array[0,0] = 0.0 (it is masked, thus zero) - array[0,0] = 0.0 (it is masked, thus zero) - array[3,3] = 0.0 (it is masked, thus zero) - array[3,3] = 0.0 (it is masked, thus zero) - array[3,4] = 10 - array[3,5] = 20 - array[4,5] = 50
SLIM TO NATIVE MAPPING
The
Array2Dhas functionality which maps data between theslimandnativedata representations.For the example mask above, the 1D
ndarraygiven bymask.derive_indexes.slim_to_nativeis:slim_to_native[0] = [3,4] slim_to_native[1] = [3,5] slim_to_native[2] = [4,3] slim_to_native[3] = [4,4] slim_to_native[4] = [4,5] slim_to_native[5] = [4,6] slim_to_native[6] = [5,3] slim_to_native[7] = [5,4] slim_to_native[8] = [5,5] slim_to_native[9] = [5,6]
In PyAutoCTI all Array2D objects are used in their native representation. Significant memory can be saved by only store this format, thus the native_only config override can force this behaviour. It is recommended users do not use this option to avoid unexpected behaviour.
- Parameters:
values (
Union[ndarray,List,AbstractArray2D]) – The values of the array, which can be input in theslimornativeformat.mask (
Mask2D) – The 2D mask associated with the array, defining the pixels each array value in itsslimrepresentation is paired with.header (
Header) – Optional metadata header (e.g. from a FITS file) associated with the array.store_native (
bool) – If True, the ndarray is stored in its native format [total_y_pixels, total_x_pixels]. This avoids mapping large data arrays to and from the slim / native formats, which can be a computational bottleneck.skip_mask (
bool) – If True, masking is skipped and values are stored as-is without zeroing masked entries.xp – The array module to use (default
numpy; passjax.numpyfor JAX support).
Examples
This example uses the
Array2D.no_maskmethod to create theArray2D.Different methods using different inputs are available and documented throughout this webpage.
import autoarray as aa array_2d = aa.Array2D.no_mask( values=np.array([1.0, 2.0, 3.0, 4.0]), shape_native=(2, 2), pixel_scales=1.0, )
import autoarray as aa array_2d = aa.Array2D.no_mask( values=[1.0, 2.0, 3.0, 4.0], shape_native=(2, 1), pixel_scales=1.0, ) mask = aa.Mask2D( mask=[[False, False], [True, True]], pixel_scales=2.0, ) array_2d = array_2d.apply_mask(mask=mask) # Print certain array attributes. print(array_2d.slim) # masked 1D data representation. print(array_2d.native) # masked 2D data representation.
Methods
allapply_maskastypebrightest_coordinate_in_region_fromReturns the brightest pixel in the array inside an input region of form (y0, y1, x0, x1) where the region is in scaled coordinates.
brightest_sub_pixel_coordinate_in_region_fromReturns the brightest sub-pixel in the array inside an input region of form (y0, y1, x0, x1) where the region is in scaled coordinates.
copyReturns an
Array2Dby loading the array values from a .fits file.Returns an
Array2Dby inputting the y and x pixel values where the array is filled and the values that fill it.Returns an
Array2Dwhere all values are filled with an input fill value, analogous tonp.full().instance_flattenFlatten an instance of an autoarray class into a tuple of its attributes (i.e.. a pytree).
instance_unflattenUnflatten a tuple of attributes (i.e. a pytree) into an instance of an autoarray class.
invertmaxminReturns an
Array2Dfrom an array via inputs in its slim or native data representation.Returns an
Array2Dwhere all values are filled with ones, analogous tonp.ones().padded_before_convolution_fromWhen the edge pixels of a mask are unmasked and a convolution is to occur, the signal of edge pixels will be 'missing' if the grid is used to evaluate the signal via an analytic function.
reshaperesized_fromResize the array around its centre to a new input shape.
sqrtsumtrimmed_after_convolution_fromWhen the edge pixels of a mask are unmasked and a convolution is to occur, the signal of edge pixels will be 'missing' if the grid is used to evaluate the signal via an analytic function.
with_new_arrayCopy this object but give it a new array.
Returns an
Array2Dwhere all values are filled with zeros, analogous tonp.zeros().Attributes
arraybinned_across_columnsBins the 2D array up to a 1D array, where each value is the mean of all unmasked values in each column.
binned_across_rowsBins the 2D array up to a 1D array, where each value is the mean of all unmasked values in each row.
derive_gridThe
DeriveGrid2Dobject of the mask, used to compute derived grids of (y,x) coordinates such as the edge grid, border grid, and full unmasked grid.derive_indexesThe
DeriveIndexes2Dobject of the mask, used to compute index arrays that map data between theslim(1D unmasked) andnative(2D full-shape) representations.derive_maskThe
DeriveMask2Dobject of the mask, used to compute derived masks such as the edge mask, border mask, and blurring mask.dtypegeometryThe geometry object of the mask associated with this structure, which defines coordinate conversions between pixel units and scaled units.
header_dictThe FITS header dictionary of the mask associated with this structure, containing pixel scale and origin entries.
imagin_countsThe array converted from electrons-per-second (eps) to total counts, using the exposure time stored in the associated
Header.in_counts_per_secondThe array converted from electrons-per-second (eps) to counts-per-second, via an intermediate conversion to total counts using the
Headerexposure time.is_transformednativeReturn a Array2D where the data is stored in its native representation, which is an
ndarrayof shape [total_y_pixels, total_x_pixels].native_for_fitsReturn a Array2D for output to a .fits file, where the data is stored in its native representation, which is an
ndarrayof shape [total_y_pixels, total_x_pixels].native_skip_maskReturn a Array2D where the data is stored in its native representation, which is an
ndarrayof shape [total_y_pixels, total_x_pixels].ndimoriginThe (y,x) scaled units origin of the mask's coordinate system.
original_orientationThe array rotated back to its original CCD read-out orientation, using the read-out-electronics (ROE) corner stored in the associated
Header.pixel_areaThe area of a single pixel in scaled units squared (
pixel_scales[0] * pixel_scales[1]).pixel_scaleThe pixel scale as a single float value.
pixel_scalesThe (y,x) scaled units to pixel units conversion factors of every pixel, as a tuple of floats.
readout_offsetsThe (y,x) pixel offsets of the read-out electronics corner, taken from the associated
Header.realshapeshape_nativeThe shape of the data structure in its
nativerepresentation (e.g.(total_y_pixels, total_x_pixels)for a 2D structure).shape_slimThe 1D shape of the data structure in its
slimrepresentation, equal to the number of unmasked pixels.sizeslimReturn an Array2D where the data is stored its slim representation, which is an
ndarrayof shape [total_unmasked_pixels].store_nativetotal_areaThe total area of all unmasked pixels in scaled units squared (
total_pixels * pixel_area).total_pixelsThe total number of unmasked pixels in the data structure (its
slimlength).unmasked_gridA grid of (y,x) coordinates of every pixel in the full mask shape (including masked pixels), using the mask's geometry to compute each pixel's scaled coordinate.
values- classmethod no_mask(values, pixel_scales, shape_native=None, origin=(0.0, 0.0), header=None)[source]#
Returns an
Array2Dfrom an array via inputs in its slim or native data representation.From a
slim1D input the method cannot determine the 2D shape of the array and its mask. Theshape_nativemust therefore also be input into this method. The mask is setup as a unmasked Mask2D ofshape_native.For a full description of
Array2Dobjects, including a description of theslimandnativeattribute used by the API, see theArray2D class API documentation.- Parameters:
values (
Union[ndarray,List,AbstractArray2D]) – The values of the array input with shape [total_unmasked_pixels] or shape [total_y_pixels, total_x_pixels].pixel_scales (
Union[Tuple[float],Tuple[float,float],float]) – The (y,x) scaled units to pixel units conversion factors of every pixel. If this is input as a float, it is converted to a (float, float) structure.shape_native (
Tuple[int,int]) – The 2D shape of the array in itsnativeformat, and its 2D mask (only required if input shape is inslimformat).origin (
Tuple[float,float]) – The (y,x) scaled units origin of the mask’s coordinate system.
Examples
import autoarray as aa # Make Array2D from input list, native format # (This array has shape_native=(2,2)). array_2d = aa.Array2D.no_mask( values=np.array([[1.0, 2.0], [3.0, 4.0]]), pixel_scales=1.0, )
- classmethod full(fill_value, shape_native, pixel_scales, origin=(0.0, 0.0), header=None)[source]#
Returns an
Array2Dwhere all values are filled with an input fill value, analogous tonp.full().For a full description of
Array2Dobjects, including a description of theslimandnativeattribute used by the API, see theArray2D class API documentation.From this input the method cannot determine the 2D shape of the array and its mask. The
shape_nativemust therefore also be input into this method. The mask is setup as a unmasked Mask2D ofshape_native.- Parameters:
fill_value (
float) – The value all array elements are filled with.shape_native (
Tuple[int,int]) – The 2D shape of the array in itsnativeformat, and its 2D mask.pixel_scales (
Union[Tuple[float],Tuple[float,float],float]) – The (y,x) scaled units to pixel units conversion factors of every pixel. If this is input as a float, it is converted to a (float, float) structure.origin (
Tuple[float,float]) – The (y,x) scaled units origin of the mask’s coordinate system.
Examples
import autoarray as aa array_2d = aa.Array2D.full( fill_value=2.0, shape_native=(2, 2), pixel_scales=1.0, )
- classmethod ones(shape_native, pixel_scales, origin=(0.0, 0.0), header=None)[source]#
Returns an
Array2Dwhere all values are filled with ones, analogous tonp.ones().For a full description of
Array2Dobjects, including a description of theslimandnativeattribute used by the API, see theArray2D class API documentation.From this input the method cannot determine the 2D shape of the array and its mask. The
shape_nativemust therefore also be input into this method. The mask is setup as a unmasked Mask2D ofshape_native.- Parameters:
shape_native (
Tuple[int,int]) – The 2D shape of the array in itsnativeformat, and its 2D mask.pixel_scales (
Union[Tuple[float],Tuple[float,float],float]) – The (y,x) scaled units to pixel units conversion factors of every pixel. If this is input as a float, it is converted to a (float, float) structure.origin (
Tuple[float,float]) – The (y,x) scaled units origin of the mask’s coordinate system.
Examples
import autoarray as aa array_2d = aa.Array2D.ones( shape_native=(2, 2), pixel_scales=1.0, )
- classmethod zeros(shape_native, pixel_scales, origin=(0.0, 0.0), header=None)[source]#
Returns an
Array2Dwhere all values are filled with zeros, analogous tonp.zeros().For a full description of
Array2Dobjects, including a description of theslimandnativeattribute used by the API, see theArray2D class API documentation.From this input the method cannot determine the 2D shape of the array and its mask. The
shape_nativemust therefore also be input into this method. The mask is setup as a unmasked Mask2D ofshape_native.- Parameters:
shape_native (
Tuple[int,int]) – The 2D shape of the array in itsnativeformat, and its 2D mask.pixel_scales (
Union[Tuple[float],Tuple[float,float],float]) – The (y,x) scaled units to pixel units conversion factors of every pixel. If this is input as a float, it is converted to a (float, float) structure.origin (
Tuple[float,float]) – The (y,x) scaled units origin of the mask’s coordinate system.
Examples
import autoarray as aa array_2d = aa.Array2D.zeros( shape_native=(2, 2), pixel_scales=1.0, )
- classmethod from_fits(file_path, pixel_scales, hdu=0, origin=(0.0, 0.0))[source]#
Returns an
Array2Dby loading the array values from a .fits file.For a full description of
Array2Dobjects, including a description of theslimandnativeattribute used by the API, see theArray2D class API documentation.- Parameters:
file_path (
Union[Path,str]) – The path the file is loaded from, including the filename and the .fits extension, e.g. ‘/path/to/filename.fits’pixel_scales (
Union[Tuple[float],Tuple[float,float],float,None]) – The (y,x) scaled units to pixel units conversion factors of every pixel. If this is input as a float, it is converted to a (float, float) structure.hdu (
int) – The Header-Data Unit of the .fits file the array data is loaded from.origin (
Tuple[float,float]) – The (y,x) scaled units origin of the coordinate system.
Examples
import autoarray as aa array_2d = aa.Array2D.from_fits( file_path="path/to/file.fits", hdu=0, pixel_scales=1.0, )
- classmethod from_yx_and_values(y, x, values, shape_native, pixel_scales, header=None)[source]#
Returns an
Array2Dby inputting the y and x pixel values where the array is filled and the values that fill it.For a full description of
Array2Dobjects, including a description of theslimandnativeattribute used by the API, see theArray2D class API documentation.- Parameters:
y (
Union[ndarray,List]) – The y pixel indexes where value are input, with shape [total_unmasked_pixels].x (
Union[ndarray,List]) – The x pixel indexes where value are input, with shape [total_unmasked_pixels].list (values or) – The values which are used to fill in the array, with shape [total_unmasked_pixel].
shape_native (
Tuple[int,int]) – The 2D shape of the array in itsnativeformat, and its 2D mask.pixel_scales (
Union[Tuple[float],Tuple[float,float],float]) – The (y,x) scaled units to pixel units conversion factors of every pixel. If this is input as a float, it is converted to a (float, float) structure.origin – The origin of the grid’s mask.
Examples
import autoarray as aa array_2d = aa.Array2D.from_yx_and_values( y=np.array([0.5, 0.5, -0.5, -0.5]), x=np.array([-0.5, 0.5, -0.5, 0.5]), values=np.array([1.0, 2.0, 3.0, 4.0]), shape_native=(2, 2), pixel_scales=1.0, )