array_like#

Functions and classes for array-like objects, implementing common numpy array features for datasets or nested sequences, while trying to avoid copying data.

Classes:

  • DatasetView: Similar to a numpy view, to access a h5py dataset as if it was transposed, without casting it into a numpy array (this lets h5py handle reading the data from the file into memory, as needed).

  • ListOfImages: Similar to a numpy view, to access a list of 2D numpy arrays as if it was a 3D array (possibly transposed), without casting it into a numpy array.

Functions:

is_array(obj)[source]#

Return True if object implements necessary attributes to be considered similar to a numpy array.

Attributes needed are “shape”, “dtype”, “__getitem__” and “__array__”.

Parameters:

obj – Array-like object (numpy array, h5py dataset…)

Returns:

boolean

is_list_of_arrays(obj)[source]#

Return True if object is a sequence of numpy arrays, e.g. a list of images as 2D arrays.

Parameters:

obj – list of arrays

Returns:

boolean

is_nested_sequence(obj)[source]#

Return True if object is a nested sequence.

A simple 1D sequence is considered to be a nested sequence.

Numpy arrays and h5py datasets are not considered to be nested sequences.

To test if an object is a nested sequence in a more general sense, including arrays and datasets, use:

is_nested_sequence(obj) or is_array(obj)
Parameters:

obj – nested sequence (numpy array, h5py dataset…)

Returns:

boolean

get_shape(array_like)[source]#

Return shape of an array like object.

In case the object is a nested sequence but not an array or dataset (list of lists, tuples…), the size of each dimension is assumed to be uniform, and is deduced from the length of the first sequence.

Parameters:

array_like – Array like object: numpy array, hdf5 dataset, multi-dimensional sequence

Returns:

Shape of array, as a tuple of integers

get_dtype(array_like)[source]#

Return dtype of an array like object.

In the case of a nested sequence, the type of the first value is inspected.

Parameters:

array_like – Array like object: numpy array, hdf5 dataset, multi-dimensional nested sequence

Returns:

numpy dtype of object

get_concatenated_dtype(arrays)[source]#

Return dtype of array resulting of concatenation of a list of arrays (without actually concatenating them).

Parameters:

arrays – list of numpy arrays

Returns:

resulting dtype after concatenating arrays

class ListOfImages(images, transposition=None)[source]#

This class provides a way to access values and slices in a stack of images stored as a list of 2D numpy arrays, without creating a 3D numpy array first.

A transposition can be specified, as a 3-tuple of dimensions in the wanted order. For example, to transpose from xyz (0, 1, 2) into yzx, the transposition tuple is (1, 2, 0)

All the 2D arrays in the list must have the same shape.

The global dtype of the stack of images is the one that would be obtained by casting the list of 2D arrays into a 3D numpy array.

Parameters:
  • images – list of 2D numpy arrays, or ListOfImages object

  • transposition – Tuple of dimension numbers in the wanted order

images#

List of images

shape#

Tuple of array dimensions

dtype#

Data-type of the global array

ndim#

Number of array dimensions

size#

Number of elements in the array.

transposition#

List of dimension indices, in an order depending on the specified transposition. By default this is simply [0, …, self.ndim], but it can be changed by specifying a different transposition parameter at initialization.

Use transpose(), to create a new ListOfImages with a different transposition.

transpose(transposition=None)[source]#

Return a re-ordered (dimensions permutated) ListOfImages.

The returned object refers to the same images but with a different transposition.

Parameters:

transposition (List[int]) – List/tuple of dimension numbers in the wanted order. If None (default), reverse the dimensions.

Returns:

new ListOfImages object

property T#

Same as self.transpose()

Returns:

DatasetView with dimensions reversed.

min()[source]#
Returns:

Global minimum value

max()[source]#
Returns:

Global maximum value

class DatasetView(dataset, transposition=None)[source]#

This class provides a way to transpose a dataset without casting it into a numpy array. This way, the dataset in a file need not necessarily be integrally read into memory to view it in a different transposition.

Note

The performances depend a lot on the way the dataset was written to file. Depending on the chunking strategy, reading a complete 2D slice in an unfavorable direction may still require the entire dataset to be read from disk.

Parameters:
  • dataset – h5py dataset

  • transposition – List of dimensions sorted in the order of transposition (relative to the original h5py dataset)

dataset#

original dataset

shape#

Tuple of array dimensions

dtype#

Data-type of the array’s element

ndim#

Number of array dimensions

size#

Number of elements in the array.

transposition#

List of dimension indices, in an order depending on the specified transposition. By default this is simply [0, …, self.ndim], but it can be changed by specifying a different transposition parameter at initialization.

Use transpose(), to create a new DatasetView with a different transposition.

transpose(transposition=None)[source]#

Return a re-ordered (dimensions permutated) DatasetView.

The returned object refers to the same dataset but with a different transposition.

Parameters:

transposition (List[int]) – List of dimension numbers in the wanted order. If None (default), reverse the dimensions.

Returns:

Transposed DatasetView

property T#

Same as self.transpose()

Returns:

DatasetView with dimensions reversed.