[ VIGRA Homepage | Function Index | Class Index | Namespaces | File List | Main Page ]
![]() |
MultiArrayView< N, T, StrideTag > | ![]() |
Base class for, and view to, vigra::MultiArray. More...
#include <vigra/multi_array.hxx>
Base class for, and view to, vigra::MultiArray.
This class implements the interface of both MultiArray and MultiArrayView. By default, MultiArrayViews are tagged as unstrided. If necessary, strided arrays are constructed automatically by calls to a variant of the bind...() function.
In addition to the member functions described here, MultiArrayView
and its subclasses support arithmetic and algebraic functions via the module vigra::multi_math.
If you want to apply an algorithm requiring an image to a MultiArrayView
of appropriate (2-dimensional) shape, you can create a vigra::BasicImageView that acts as a wrapper with the necessary interface -- see Wrap aref vigra::MultiArrayView in.
The template parameter are as follows
N: the array dimension T: the type of the array elements C: a tag determining whether the array's inner dimension is strided or not. An array is unstrided if the array elements occupy consecutive memory location, strided if there is an offset in between (e.g. when a view is created that skips every other array element). The compiler can generate faster code for unstrided arrays. Possible values: UnstridedArrayTag (default), StridedArrayTag
#include <vigra/multi_array.hxx>
Namespace: vigra
typedef T value_type |
the array's value type
Reimplemented in Matrix< T, ALLOC >, MultiArray< N, T, A >, NumpyArray< N, T, Stride >, Matrix< T >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
typedef value_type& reference |
reference type (result of operator[])
Reimplemented in Matrix< T, ALLOC >, MultiArray< N, T, A >, NumpyArray< N, T, Stride >, Matrix< T >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
typedef const value_type& const_reference |
const reference type (result of operator[] const)
Reimplemented in Matrix< T, ALLOC >, MultiArray< N, T, A >, NumpyArray< N, T, Stride >, Matrix< T >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
typedef value_type* pointer |
pointer type
Reimplemented in Matrix< T, ALLOC >, MultiArray< N, T, A >, NumpyArray< N, T, Stride >, Matrix< T >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
typedef const value_type* const_pointer |
const pointer type
Reimplemented in Matrix< T, ALLOC >, MultiArray< N, T, A >, NumpyArray< N, T, Stride >, Matrix< T >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
typedef MultiArrayShape<actual_dimension>::type difference_type |
difference type (used for multi-dimensional offsets and indices)
Reimplemented in Matrix< T, ALLOC >, MultiArray< N, T, A >, NumpyArray< N, T, Stride >, Matrix< T >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
typedef difference_type size_type |
size type
Reimplemented in MultiArray< N, T, A >, NumpyArray< N, T, Stride >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
typedef MultiArrayIndex difference_type_1 |
difference and index type for a single dimension
Reimplemented in Matrix< T, ALLOC >, MultiArray< N, T, A >, NumpyArray< N, T, Stride >, Matrix< T >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
typedef StridedScanOrderIterator<actual_dimension, T, T &, T *> iterator |
scan-order iterator (StridedScanOrderIterator) type
Reimplemented in MultiArray< N, T, A >, NumpyArray< N, T, Stride >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
typedef StridedScanOrderIterator<actual_dimension, T, T const &, T const *> const_iterator |
const scan-order iterator (StridedScanOrderIterator) type
Reimplemented in MultiArray< N, T, A >, NumpyArray< N, T, Stride >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
typedef vigra::detail::MultiIteratorChooser< StrideTag>::template Traverser<actual_dimension, T, T &, T *>::type traverser |
traverser (MultiIterator) type
Reimplemented in MultiArray< N, T, A >, NumpyArray< N, T, Stride >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
typedef vigra::detail::MultiIteratorChooser< StrideTag>::template Traverser<actual_dimension, T, T const &, T const *>::type const_traverser |
const traverser (MultiIterator) type
Reimplemented in MultiArray< N, T, A >, NumpyArray< N, T, Stride >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
typedef MultiArrayView<N, T, StrideTag> view_type |
the view type associated with this array.
Reimplemented in Matrix< T, ALLOC >, MultiArray< N, T, A >, NumpyArray< N, T, Stride >, Matrix< T >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
typedef MultiArray<N, T> matrix_type |
the matrix type associated with this array.
Reimplemented in Matrix< T, ALLOC >, MultiArray< N, T, A >, Matrix< T >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
enum ActualDimension |
the array's actual dimensionality. This ensures that MultiArrayView can also be used for scalars (that is, when N == 0
). Calculated as:
actual_dimension = (N==0) ? 1 : N
MultiArrayView | ( | ) |
MultiArrayView | ( | const difference_type & | shape, | |
pointer | ptr | |||
) |
construct from shape and pointer
MultiArrayView | ( | const difference_type & | shape, | |
const difference_type & | stride, | |||
pointer | ptr | |||
) |
Construct from shape, strides (offset of a sample to the next) for every dimension, and pointer. (Note that strides are not given in bytes, but in offset steps of the respective pointer type.)
operator MultiArrayView< N, T, StridedArrayTag > | ( | ) | const |
Conversion to a strided view.
MultiArrayView< N, T, StrideTag > & operator= | ( | MultiArrayView< N, T, StrideTag > const & | rhs | ) |
Assignment. There are 3 cases:
MultiArrayView
does not point to valid data (e.g. after default construction), it becomes a copy of rhs. PreconditionViolation
exception is thrown. MultiArrayView& operator= | ( | MultiArrayView< N, U, C1 > const & | rhs | ) |
Assignment of a differently typed MultiArrayView. Fails with PreconditionViolation
exception when the shapes do not match.
MultiArrayView& operator+= | ( | MultiArrayView< N, U, C1 > const & | rhs | ) |
Add-assignment of a compatible MultiArrayView. Fails with PreconditionViolation
exception when the shapes do not match.
MultiArrayView& operator-= | ( | MultiArrayView< N, U, C1 > const & | rhs | ) |
Subtract-assignment of a compatible MultiArrayView. Fails with PreconditionViolation
exception when the shapes do not match.
MultiArrayView& operator*= | ( | MultiArrayView< N, U, C1 > const & | rhs | ) |
Multiply-assignment of a compatible MultiArrayView. Fails with PreconditionViolation
exception when the shapes do not match.
MultiArrayView& operator/= | ( | MultiArrayView< N, U, C1 > const & | rhs | ) |
Divide-assignment of a compatible MultiArrayView. Fails with PreconditionViolation
exception when the shapes do not match.
MultiArrayView& operator+= | ( | T const & | rhs | ) |
Add-assignment of a scalar.
Reimplemented in MultiArray< N, T, A >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
MultiArrayView& operator-= | ( | T const & | rhs | ) |
Subtract-assignment of a scalar.
Reimplemented in MultiArray< N, T, A >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
MultiArrayView& operator*= | ( | T const & | rhs | ) |
Multiply-assignment of a scalar.
Reimplemented in MultiArray< N, T, A >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
MultiArrayView& operator/= | ( | T const & | rhs | ) |
Divide-assignment of a scalar.
Reimplemented in MultiArray< N, T, A >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
MultiArrayView& operator= | ( | multi_math::MultiMathOperand< Expression > const & | rhs | ) |
Assignment of an array expression. Fails with PreconditionViolation
exception when the shapes do not match.
Reimplemented in MultiArray< N, T, A >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
MultiArrayView& operator+= | ( | multi_math::MultiMathOperand< Expression > const & | rhs | ) |
Add-assignment of an array expression. Fails with PreconditionViolation
exception when the shapes do not match.
Reimplemented in MultiArray< N, T, A >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
MultiArrayView& operator-= | ( | multi_math::MultiMathOperand< Expression > const & | rhs | ) |
Subtract-assignment of an array expression. Fails with PreconditionViolation
exception when the shapes do not match.
Reimplemented in MultiArray< N, T, A >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
MultiArrayView& operator*= | ( | multi_math::MultiMathOperand< Expression > const & | rhs | ) |
Multiply-assignment of an array expression. Fails with PreconditionViolation
exception when the shapes do not match.
Reimplemented in MultiArray< N, T, A >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
MultiArrayView& operator/= | ( | multi_math::MultiMathOperand< Expression > const & | rhs | ) |
Divide-assignment of an array expression. Fails with PreconditionViolation
exception when the shapes do not match.
Reimplemented in MultiArray< N, T, A >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
reference operator[] | ( | const difference_type & | d | ) |
array access.
const_reference operator[] | ( | const difference_type & | d | ) | const |
array access.
MultiArrayView<N-M, T, StridedArrayTag> operator[] | ( | const TinyVector< MultiArrayIndex, M > & | d | ) | const |
equivalent to bindInner(), when M < N.
reference operator[] | ( | difference_type_1 | d | ) |
Array access in scan-order sense. Mostly useful to support standard indexing for 1-dimensional multi-arrays, but works for any N. Use scanOrderIndexToCoordinate() and coordinateToScanOrderIndex() for conversion between indices and coordinates.
Note: This function should not be used in the inner loop, because the conversion of the scan order index into a memory address is expensive (it must take into account that memory may not be consecutive for subarrays and/or strided arrays). Always prefer operator() if possible.
const_reference operator[] | ( | difference_type_1 | d | ) | const |
Array access in scan-order sense. Mostly useful to support standard indexing for 1-dimensional multi-arrays, but works for any N. Use scanOrderIndexToCoordinate() and coordinateToScanOrderIndex() for conversion between indices and coordinates.
Note: This function should not be used in the inner loop, because the conversion of the scan order index into a memory address is expensive (it must take into account that memory may not be consecutive for subarrays and/or strided arrays). Always prefer operator() if possible.
difference_type scanOrderIndexToCoordinate | ( | difference_type_1 | d | ) | const |
convert scan-order index to coordinate.
difference_type_1 coordinateToScanOrderIndex | ( | const difference_type & | d | ) | const |
convert coordinate to scan-order index.
reference operator() | ( | difference_type_1 | x | ) |
1D array access. Use only if N == 1.
reference operator() | ( | difference_type_1 | x, | |
difference_type_1 | y | |||
) |
2D array access. Use only if N == 2.
reference operator() | ( | difference_type_1 | x, | |
difference_type_1 | y, | |||
difference_type_1 | z | |||
) |
3D array access. Use only if N == 3.
reference operator() | ( | difference_type_1 | x, | |
difference_type_1 | y, | |||
difference_type_1 | z, | |||
difference_type_1 | u | |||
) |
4D array access. Use only if N == 4.
reference operator() | ( | difference_type_1 | x, | |
difference_type_1 | y, | |||
difference_type_1 | z, | |||
difference_type_1 | u, | |||
difference_type_1 | v | |||
) |
5D array access. Use only if N == 5.
const_reference operator() | ( | difference_type_1 | x | ) | const |
1D const array access. Use only if N == 1.
const_reference operator() | ( | difference_type_1 | x, | |
difference_type_1 | y | |||
) | const |
2D const array access. Use only if N == 2.
const_reference operator() | ( | difference_type_1 | x, | |
difference_type_1 | y, | |||
difference_type_1 | z | |||
) | const |
3D const array access. Use only if N == 3.
const_reference operator() | ( | difference_type_1 | x, | |
difference_type_1 | y, | |||
difference_type_1 | z, | |||
difference_type_1 | u | |||
) | const |
4D const array access. Use only if N == 4.
const_reference operator() | ( | difference_type_1 | x, | |
difference_type_1 | y, | |||
difference_type_1 | z, | |||
difference_type_1 | u, | |||
difference_type_1 | v | |||
) | const |
5D const array access. Use only if N == 5.
MultiArrayView& init | ( | const U & | init | ) |
Init with a constant.
Reimplemented in Matrix< T, ALLOC >, MultiArray< N, T, A >, Matrix< T >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
void copy | ( | const MultiArrayView< N, T, StrideTag > & | rhs | ) |
Copy the data of the right-hand array (array shapes must match).
void copy | ( | const MultiArrayView< N, U, CN > & | rhs | ) |
Copy the data of the right-hand array (array shapes must match).
void swapData | ( | MultiArrayView< N, T, StrideTag > | rhs | ) |
swap the data between two MultiArrayView objects.
The shapes of the two array must match.
void swapData | ( | MultiArrayView< N, T2, C2 > | rhs | ) |
swap the data between two MultiArrayView objects.
The shapes of the two array must match.
bool isUnstrided | ( | unsigned int | dimension = N-1 |
) | const |
check whether the array is unstrided (i.e. has consecutive memory) up to the given dimension.
dimension can range from 0 ... N-1. If a certain dimension is unstrided, all lower dimensions are also unstrided.
MultiArrayView< N-M, T, StrideTag > bindOuter | ( | const TinyVector< MultiArrayIndex, M > & | d | ) | const |
bind the M outmost dimensions to certain indices. this reduces the dimensionality of the image to max { 1, N-M }.
Usage:
// create a 3D array of size 40x30x20 typedef MultiArray<3, double>::difference_type Shape; MultiArray<3, double> array3(Shape(40, 30, 20)); // get a 1D array by fixing index 1 to 12, and index 2 to 10 MultiArrayView <1, double> array1 = array3.bindOuter(TinyVector<MultiArrayIndex, 2>(12, 10));
MultiArrayView< N-M, T, StridedArrayTag > bindInner | ( | const TinyVector< MultiArrayIndex, M > & | d | ) | const |
bind the M innermost dimensions to certain indices. this reduces the dimensionality of the image to max { 1, N-M }.
Usage:
// create a 3D array of size 40x30x20 typedef MultiArray<3, double>::difference_type Shape; MultiArray<3, double> array3(Shape(40, 30, 20)); // get a 1D array by fixing index 0 to 12, and index 1 to 10 MultiArrayView <1, double, StridedArrayTag> array1 = array3.bindInner(TinyVector<MultiArrayIndex, 2>(12, 10));
MultiArrayView< N-1, T, typename detail::MaybeStrided< StrideTag, M >::type > bind | ( | difference_type_1 | d | ) | const |
bind dimension M to index d. this reduces the dimensionality of the image to max { 1, N-1 }.
Usage:
// create a 3D array of size 40x30x20 typedef MultiArray<3, double>::difference_type Shape; MultiArray<3, double> array3(Shape(40, 30, 20)); // get a 2D array by fixing index 1 to 12 MultiArrayView <2, double> array2 = array3.bind<1>(12); // get a 2D array by fixing index 0 to 23 MultiArrayView <2, double, StridedArrayTag> array2a = array3.bind<0>(23);
MultiArrayView< N-1, T, StrideTag > bindOuter | ( | difference_type_1 | d | ) | const |
bind the outmost dimension to a certain index. this reduces the dimensionality of the image to max { 1, N-1 }.
Usage:
// create a 3D array of size 40x30x20 typedef MultiArray<3, double>::difference_type Shape; MultiArray<3, double> array3(Shape(40, 30, 20)); // get a 2D array by fixing the outermost index (i.e. index 2) to 12 MultiArrayView <2, double> array2 = array3.bindOuter(12);
MultiArrayView< N-1, T, StridedArrayTag > bindInner | ( | difference_type_1 | d | ) | const |
bind the innermost dimension to a certain index. this reduces the dimensionality of the image to max { 1, N-1 }.
Usage:
// create a 3D array of size 40x30x20 typedef MultiArray<3, double>::difference_type Shape; MultiArray<3, double> array3(Shape(40, 30, 20)); // get a 2D array by fixing the innermost index (i.e. index 0) to 23 MultiArrayView <2, double, StridedArrayTag> array2 = array3.bindInner(23);
MultiArrayView< N-1, T, StridedArrayTag > bindAt | ( | difference_type_1 | m, | |
difference_type_1 | d | |||
) | const |
bind dimension m to index d. this reduces the dimensionality of the image to max { 1, N-1 }.
Usage:
// create a 3D array of size 40x30x20 typedef MultiArray<3, double>::difference_type Shape; MultiArray<3, double> array3(Shape(40, 30, 20)); // get a 2D array by fixing index 2 to 15 MultiArrayView <2, double, StridedArrayTag> array2 = array3.bindAt(2, 15);
MultiArrayView<N, typename ExpandElementResult<T>::type, StridedArrayTag> bindElementChannel | ( | difference_type_1 | i | ) | const |
Create a view to channel 'i' of a vector-like value type. Possible value types (of the original array) are: TinyVector, RGBValue, FFTWComplex, and std::complex
. The list can be extended to any type whose memory layout is equivalent to a fixed-size C array, by specializing ExpandElementResult
.
Usage:
MultiArray<2, RGBValue<float> > rgb_image(Shape2(w, h)); MultiArrayView<2, float, StridedArrayTag> red = rgb_image.bindElementChannel(0); MultiArrayView<2, float, StridedArrayTag> green = rgb_image.bindElementChannel(1); MultiArrayView<2, float, StridedArrayTag> blue = rgb_image.bindElementChannel(2);
MultiArrayView< N+1, typename ExpandElementResult< T >::type, StridedArrayTag > expandElements | ( | difference_type_1 | d | ) | const |
Create a view where a vector-like element type is expanded into a new array dimension. The new dimension is inserted at index position 'd', which must be between 0 and N inclusive.
Possible value types of the original array are: TinyVector, RGBValue, FFTWComplex, std::complex
, and the built-in number types (in this case, expandElements
is equivalent to insertSingletonDimension
). The list of supported types can be extended to any type whose memory layout is equivalent to a fixed-size C array, by specializing ExpandElementResult
.
Usage:
MultiArray<2, RGBValue<float> > rgb_image(Shape2(w, h)); MultiArrayView<3, float, StridedArrayTag> multiband_image = rgb_image.expandElements(2);
MultiArrayView< N+1, T, StrideTag > insertSingletonDimension | ( | difference_type_1 | i | ) | const |
Add a singleton dimension (dimension of length 1).
Singleton dimensions don't change the size of the data, but introduce a new index that can only take the value 0. This is mainly useful for the 'reduce mode' of transformMultiArray() and combineTwoMultiArrays(), because these functions require the source and destination arrays to have the same number of dimensions.
The range of i must be 0 <= i <= N
. The new dimension will become the i'th index, and the old indices from i upwards will shift one place to the right.
Usage:
Suppose we want have a 2D array and want to create a 1D array that contains the row average of the first array.
typedef MultiArrayShape<2>::type Shape2; MultiArray<2, double> original(Shape2(40, 30)); typedef MultiArrayShape<1>::type Shape1; MultiArray<1, double> rowAverages(Shape1(30)); // temporarily add a singleton dimension to the destination array transformMultiArray(srcMultiArrayRange(original), destMultiArrayRange(rowAverages.insertSingletonDimension(0)), FindAverage<double>());
MultiArrayView subarray | ( | const difference_type & | p, | |
const difference_type & | q | |||
) | const |
create a rectangular subarray that spans between the points p and q, where p is in the subarray, q not.
Usage:
// create a 3D array of size 40x30x20 typedef MultiArray<3, double>::difference_type Shape; MultiArray<3, double> array3(Shape(40, 30, 20)); // get a subarray set is smaller by one element at all sides MultiArrayView <3, double> subarray = array3.subarray(Shape(1,1,1), Shape(39, 29, 19));
MultiArrayView<N, T, StridedArrayTag> stridearray | ( | const difference_type & | s | ) | const |
apply an additional striding to the image, thereby reducing the shape of the array. for example, multiplying the stride of dimension one by three turns an appropriately laid out (interleaved) rgb image into a single band image.
MultiArrayView<N, T, StridedArrayTag> transpose | ( | ) | const |
Transpose an array. If N==2, this implements the usual matrix transposition. For N > 2, it reverses the order of the indices.
Usage:
typedef MultiArray<2, double>::difference_type Shape; MultiArray<2, double> array(10, 20); MultiArray<2, double, StridedArrayTag> transposed = array.transpose(); for(int i=0; i<array.shape(0), ++i) for(int j=0; j<array.shape(1); ++j) assert(array(i, j) == transposed(j, i));
Reimplemented in Matrix< T, ALLOC >, and Matrix< T >.
MultiArrayView< N, T, StridedArrayTag > permuteDimensions | ( | const difference_type & | s | ) | const |
permute the dimensions of the array. The function exchanges the meaning of the dimensions without copying the data. In case of a 2-dimensional array, this is simply array transposition. In higher dimensions, there are more possibilities.
Usage:
typedef MultiArray<2, double>::difference_type Shape; MultiArray<2, double> array(10, 20); MultiArray<2, double, StridedArrayTag> transposed = array.permuteDimensions(Shape(1,0)); for(int i=0; i<array.shape(0), ++i) for(int j=0; j<array.shape(1); ++j) assert(array(i, j) == transposed(j, i));
MultiArrayView< N, T, StridedArrayTag > permuteStridesAscending | ( | ) | const |
Permute the dimensions of the array so that the strides are in ascending order. Determines the appropriate permutation and then calls permuteDimensions().
MultiArrayView< N, T, StridedArrayTag > permuteStridesDescending | ( | ) | const |
Permute the dimensions of the array so that the strides are in descending order. Determines the appropriate permutation and then calls permuteDimensions().
difference_type strideOrdering | ( | ) | const |
Compute the ordering of the strides in this array. The result is describes the current permutation of the axes relative to the standard ascending stride order.
MultiArrayView< N, T, StrideTag >::difference_type strideOrdering | ( | difference_type | strides | ) | [static] |
Compute the ordering of the given strides. The result is describes the current permutation of the axes relative to the standard ascending stride order.
difference_type_1 elementCount | ( | ) | const |
number of the elements in the array.
Reimplemented in Matrix< T, ALLOC >, and Matrix< T >.
difference_type_1 size | ( | ) | const |
number of the elements in the array. Same as elementCount()
. Mostly useful to support the std::vector interface.
const difference_type& shape | ( | ) | const |
return the array's shape.
difference_type_1 size | ( | difference_type_1 | n | ) | const |
return the array's size at a certain dimension.
difference_type_1 shape | ( | difference_type_1 | n | ) | const |
return the array's shape at a certain dimension (same as size(n)
).
const difference_type& stride | ( | ) | const |
return the array's stride for every dimension.
difference_type_1 stride | ( | int | n | ) | const |
return the array's stride at a certain dimension.
bool operator== | ( | MultiArrayView< N, U, C1 > const & | rhs | ) | const |
check whether two arrays are elementwise equal.
bool operator!= | ( | MultiArrayView< N, U, C1 > const & | rhs | ) | const |
check whether two arrays are not elementwise equal. Also true when the two arrays have different shapes.
bool isInside | ( | difference_type const & | p | ) | const |
check whether the given point is in the array range.
bool all | ( | ) | const |
Check if the array contains only non-zero elements (or if all elements are 'true' if the value type is 'bool').
bool any | ( | ) | const |
Check if the array contains a non-zero element (or an element that is 'true' if the value type is 'bool').
void minmax | ( | T * | minimum, | |
T * | maximum | |||
) | const |
Find the minimum and maximum element in this array.
void meanVariance | ( | U * | mean, | |
U * | variance | |||
) | const |
Compute the mean and variance of the values in this array.
U sum | ( | ) | const |
Compute the sum of the array elements.
You must provide the type of the result by an explicit template parameter:
MultiArray<2, UInt8> A(width, height); double sum = A.sum<double>();
Reimplemented in Matrix< T, ALLOC >, and Matrix< T >.
void sum | ( | MultiArrayView< N, U, S > | sums | ) | const |
Compute the sum of the array elements over selected axes.
multi_pointoperators.hxx
for this function to work.Usage:
#include <vigra/multi_array.hxx> #include <vigra/multi_pointoperators.hxx> MultiArray<2, double> A(rows, cols); ... // fill A // make the first axis a singleton to sum over the first index MultiArray<2, double> rowSums(1, cols); A.sum(rowSums); // this is equivalent to transformMultiArray(srcMultiArrayRange(A), destMultiArrayRange(rowSums), FindSum<double>());
U product | ( | ) | const |
Compute the product of the array elements.
You must provide the type of the result by an explicit template parameter:
MultiArray<2, UInt8> A(width, height); double prod = A.product<double>();
NormTraits<MultiArrayView>::SquaredNormType squaredNorm | ( | ) | const |
Compute the squared Euclidean norm of the array (sum of squares of the array elements).
Reimplemented in Matrix< T, ALLOC >, and Matrix< T >.
NormTraits< MultiArrayView< N, T, StrideTag > >::NormType norm | ( | int | type = 2 , |
|
bool | useSquaredNorm = true | |||
) | const |
Compute various norms of the array. The norm is determined by parameter type:
squaredNorm()
when useSquaredNorm is true
,Parameter useSquaredNorm has no effect when type != 2. Defaults: compute L2 norm as square root of squaredNorm()
.
pointer data | ( | ) | const |
return the pointer to the image data
bool hasData | ( | ) | const |
returns true iff this view refers to valid data, i.e. data() is not a NULL pointer. (this is false after default construction.)
iterator begin | ( | ) |
returns a scan-order iterator pointing to the first array element.
Reimplemented in MultiArray< N, T, A >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
const_iterator begin | ( | ) | const |
returns a const scan-order iterator pointing to the first array element.
Reimplemented in MultiArray< N, T, A >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
iterator end | ( | ) |
returns a scan-order iterator pointing beyond the last array element.
Reimplemented in MultiArray< N, T, A >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
const_iterator end | ( | ) | const |
returns a const scan-order iterator pointing beyond the last array element.
Reimplemented in MultiArray< N, T, A >, MultiArray< 2, T, ALLOC >, MultiArray< 2, int >, MultiArray< 2, LabelInt >, MultiArray< 2, double >, MultiArray< 4, double >, MultiArray< N, Complex, FFTWAllocator< Complex > >, MultiArray< 2, T, std::allocator< T > >, and MultiArray< 2, T >.
traverser traverser_begin | ( | ) |
returns the N-dimensional MultiIterator pointing to the first element in every dimension.
const_traverser traverser_begin | ( | ) | const |
returns the N-dimensional MultiIterator pointing to the const first element in every dimension.
traverser traverser_end | ( | ) |
returns the N-dimensional MultiIterator pointing beyond the last element in dimension N, and to the first element in every other dimension.
const_traverser traverser_end | ( | ) | const |
returns the N-dimensional const MultiIterator pointing beyond the last element in dimension N, and to the first element in every other dimension.
difference_type m_shape [protected] |
the shape of the image pointed to is stored here.
difference_type m_stride [protected] |
the strides (offset of a sample to the next) for every dimension are stored here.
© Ullrich Köthe (ullrich.koethe@iwr.uni-heidelberg.de) |
html generated using doxygen and Python
|