HILA
Loading...
Searching...
No Matches
Array< n, m, T > Class Template Reference

\( n\times m \) Array type More...

#include <array.h>

Public Member Functions

 Array ()=default
 Default constructor.
 
 Array (const Array< n, m, T > &v)=default
 Copy constructor.
 
template<typename S , std::enable_if_t< hila::is_assignable< T &, S >::value, int > = 0>
 Array (const S rhs)
 Scalar constructor.
 
 Array (const std::nullptr_t &z)
 Zero constructor.
 
template<typename S , std::enable_if_t< hila::is_assignable< T &, S >::value, int > = 0>
 Array (std::initializer_list< S > rhs)
 Initializer list constructor.
 
Matrix< n, m, T > & asMatrix ()
 Cast Array to Matrix.
 
Vector< n, T > & asVector ()
 Cast Array1D to Vector.
 
constexpr int columns () const
 Returns number of columns.
 
Array< n, m, T > conj () const
 Returns element wise Complex conjugate of Array.
 
template<int q = n, int p = m, std::enable_if_t<(q==1||p==1), int > = 0>
T & e (const int i)
 Standard array indexing operation for 1D Array.
 
template<int q = n, int p = m, std::enable_if_t<(q==1||p==1), int > = 0>
e (const int i) const
 Const overload.
 
T & e (const int i, const int j)
 Const overload.
 
e (const int i, const int j) const
 Standard array indexing operation for 2D Array.
 
Array< n, m, T > & gaussian_random (double width=1.0)
 Fill Array with Gaussian random elements.
 
Array< n, m, hila::arithmetic_type< T > > imag () const
 return imaginary part
 
template<typename S , int n1, int m1>
bool operator!= (const Array< n1, m1, S > &rhs) const
 Compare non-equality of two Arrays.
 
template<int n, int m, typename T >
Array< n, m, T > operator* (Array< n, m, T > a, const Array< n, m, T > &b)
 Multiplication operator.
 
template<typename S , std::enable_if_t< std::is_convertible< hila::type_mul< T, S >, T >::value, int > = 0>
Array< n, m, T > & operator*= (const Array< n, m, S > &rhs)
 Multiply assign scalar or array.
 
template<typename S , std::enable_if_t< std::is_convertible< hila::type_mul< T, S >, T >::value, int > = 0>
Array< n, m, T > & operator*= (const S rhs)
 multiply assign with scalar
 
Array< n, m, T > operator+ () const
 Unary + operator.
 
template<int n, int m, typename T >
Array< n, m, T > operator+ (Array< n, m, T > a, const Array< n, m, T > &b)
 Addition operator.
 
template<typename S , std::enable_if_t< std::is_convertible< S, T >::value, int > = 0>
Array< n, m, T > & operator+= (const Array< n, m, S > &rhs)
 Add assign operator with Array or scalar.
 
Array< n, m, T > operator- () const
 Unary - operator.
 
template<int n, int m, typename T >
Array< n, m, T > operator- (Array< n, m, T > a, const Array< n, m, T > &b)
 Subtraction operator.
 
template<typename S , std::enable_if_t< std::is_convertible< S, T >::value, int > = 0>
Array< n, m, T > & operator-= (const Array< n, m, S > &rhs)
 Subtract assign operator with Array or scalar.
 
template<int n, int m, typename T >
Array< n, m, T > operator/ (Array< n, m, T > a, const Array< n, m, T > &b)
 Division operator.
 
template<typename S , std::enable_if_t< std::is_convertible< hila::type_div< T, S >, T >::value, int > = 0>
Array< n, m, T > & operator/= (const Array< n, m, S > &rhs)
 Division assign with array or scalar.
 
template<typename S , std::enable_if_t< hila::is_assignable< T &, S >::value, int > = 0>
Array< n, m, T > & operator= (const S rhs)
 Scalar assignment operator.
 
template<typename S , int n1, int m1>
bool operator== (const Array< n1, m1, S > &rhs) const
 Compare equality of Arrays.
 
Array< n, m, T > & random ()
 Fill Array with random elements.
 
Array< n, m, hila::arithmetic_type< T > > real () const
 Returns real part of Array.
 
constexpr int rows () const
 Returns number of rows.
 
template<int q = n, int p = m, std::enable_if_t< q==1, int > = 0>
constexpr int size () const
 Returns size of Vector Array or square Array.
 
template<int N>
Array< n, m, T > sort (Vector< N, int > &permutation, hila::sort order=hila::sort::ascending) const
 implement sort as casting to array
 
hila::arithmetic_type< T > squarenorm () const
 calculate square norm - sum of squared elements
 
std::string str (int prec=8, char separator=' ') const
 Convert to string for printing.
 

Related Symbols

(Note that these are not member symbols.)

template<typename Ntype , typename T , int n, int m, std::enable_if_t< hila::is_arithmetic< T >::value, int > = 0>
Array< n, m, Ntype > cast_to (const Array< n, m, T > &mat)
 Array casting operation.
 
Arithmetic operations

all operations are applied linearly to the Array A

Most functions are self explanitory, but if necessary function will have a detailed section with additional information.

Template Parameters
nNumber of rows
mNumber of columns
TArray element type
Parameters
aInput array
Returns
Array<n, m, T>
template<int n, int m, typename T >
Array< n, m, T > sqrt (Array< n, m, T > a)
 Square root.
 
template<int n, int m, typename T >
Array< n, m, T > cbrt (Array< n, m, T > a)
 Cuberoot.
 
template<int n, int m, typename T >
Array< n, m, T > exp (Array< n, m, T > a)
 Exponential.
 
template<int n, int m, typename T >
Array< n, m, T > log (Array< n, m, T > a)
 Logarithm.
 
template<int n, int m, typename T >
Array< n, m, T > sin (Array< n, m, T > a)
 Sine.
 
template<int n, int m, typename T >
Array< n, m, T > cos (Array< n, m, T > a)
 Cosine.
 
template<int n, int m, typename T >
Array< n, m, T > tan (Array< n, m, T > a)
 Tangent.
 
template<int n, int m, typename T >
Array< n, m, T > asin (Array< n, m, T > a)
 Inverse Sine.
 
template<int n, int m, typename T >
Array< n, m, T > acos (Array< n, m, T > a)
 Inverse Cosine.
 
template<int n, int m, typename T >
Array< n, m, T > atan (Array< n, m, T > a)
 Inverse Tangent.
 
template<int n, int m, typename T >
Array< n, m, T > sinh (Array< n, m, T > a)
 Hyperbolic Sine.
 
template<int n, int m, typename T >
Array< n, m, T > cosh (Array< n, m, T > a)
 Hyperbolic Cosine.
 
template<int n, int m, typename T >
Array< n, m, T > tanh (Array< n, m, T > a)
 Hyperbolic tangent.
 
template<int n, int m, typename T >
Array< n, m, T > asinh (Array< n, m, T > a)
 Inverse Hyperbolic Sine.
 
template<int n, int m, typename T >
Array< n, m, T > acosh (Array< n, m, T > a)
 Inverse Hyperbolic Cosine.
 
template<int n, int m, typename T >
Array< n, m, T > atanh (Array< n, m, T > a)
 Inverse Hyperbolic Tangent.
 
template<int n, int m, typename T >
Array< n, m, T > pow (Array< n, m, T > a, int b)
 Power.
 
template<int n, int m, typename T , std::enable_if_t< hila::is_arithmetic< T >::value, int > = 0>
Array< n, m, T > round (Array< n, m, T > a)
 Rounding.
 
template<int n, int m, typename T , std::enable_if_t< hila::is_arithmetic< T >::value, int > = 0>
Array< n, m, T > floor (Array< n, m, T > a)
 Floor.
 
template<int n, int m, typename T , std::enable_if_t< hila::is_arithmetic< T >::value, int > = 0>
Array< n, m, T > ceil (Array< n, m, T > a)
 Ceiling.
 
template<int n, int m, typename T , std::enable_if_t< hila::is_arithmetic< T >::value, int > = 0>
Array< n, m, T > trunc (Array< n, m, T > a)
 Truncation.
 

Detailed Description

template<const int n, const int m, typename T>
class Array< n, m, T >

\( n\times m \) Array type

Acts as array class which stores data in a simple C style array.

Main functionality which the Array class offers is to supplement the fall backs of storing information in a Matrix data structure.

For example assigning a value to each element with the Matrix class is not directly possible using the assignment operator=. This is because assignment with matrices is defined as \( M = a = a*I \) where M is a general matrix, a is a scalar and I an identity matrix. The result would only assign a to the diagonal elements.

Unlike the Matrix object, the Array object assigns element wise. This allows filling the Array with the assignment operator. Additionally element wise operations are useable as long as they are defined for the Array type. For example the operation:

sin(m);
Array type
Definition array.h:43
Array< n, m, T > & random()
Fill Array with random elements.
Definition array.h:598
Array< n, m, T > sin(Array< n, m, T > a)
Sine.
Definition array.h:1019

is defined, since the \(sin\) function is defined for doubles.

The above operation would not work for matrices, but with casting operations. Matrix::asArray and Array::asMatrix one can take full advantage of element wise operations.

Template Parameters
nNumber of rows
mNumber of columns
TArray element type

Definition at line 43 of file array.h.

Constructor & Destructor Documentation

◆ Array() [1/5]

template<const int n, const int m, typename T >
Array< n, m, T >::Array ( )
default

Default constructor.

The following ways of constructing a matrix are:

Allocates undefined \( n\times m\) Array.

◆ Array() [2/5]

template<const int n, const int m, typename T >
Array< n, m, T >::Array ( const Array< n, m, T > &  v)
default

Copy constructor.

Construction from previously defined Array.

//
// A_0 is filled with content
//
Parameters
vArray to assign

◆ Array() [3/5]

template<const int n, const int m, typename T >
template<typename S , std::enable_if_t< hila::is_assignable< T &, S >::value, int > = 0>
Array< n, m, T >::Array ( const S  rhs)
inlineexplicit

Scalar constructor.

Construct with given scalar which is assigned to all elements in array

Complex definition.
Definition cmplx.h:50
double random()
Real valued uniform random number generator.
Definition hila_gpu.cpp:120
Template Parameters
SType for scalar
Parameters
rhsScalar to assign

Definition at line 100 of file array.h.

◆ Array() [4/5]

template<const int n, const int m, typename T >
Array< n, m, T >::Array ( const std::nullptr_t &  z)
inline

Zero constructor.

Constructing from 0 sets the whole Array to zero

Definition at line 113 of file array.h.

◆ Array() [5/5]

template<const int n, const int m, typename T >
template<typename S , std::enable_if_t< hila::is_assignable< T &, S >::value, int > = 0>
Array< n, m, T >::Array ( std::initializer_list< S >  rhs)
inline

Initializer list constructor.

Construction from c++ initializer list.

Array<2,2,int> A = {1, 0
0, 1};
Template Parameters
SElement type of initializer list
Parameters
rhsInitializer list to assign

Definition at line 134 of file array.h.

Member Function Documentation

◆ asMatrix()

template<const int n, const int m, typename T >
Matrix< n, m, T > & Array< n, m, T >::asMatrix ( )
inline

Cast Array to Matrix.

Returns
Matrix<n, m, T>&

Definition at line 234 of file array.h.

◆ asVector()

template<const int n, const int m, typename T >
Vector< n, T > & Array< n, m, T >::asVector ( )
inline

Cast Array1D to Vector.

asMatrix will perform the same operation.

Returns
Vector<n, T>&

Definition at line 248 of file array.h.

◆ columns()

template<const int n, const int m, typename T >
constexpr int Array< n, m, T >::columns ( ) const
inlineconstexpr

Returns number of columns.

Returns
constexpr int

Definition at line 155 of file array.h.

◆ conj()

template<const int n, const int m, typename T >
Array< n, m, T > Array< n, m, T >::conj ( ) const
inline

Returns element wise Complex conjugate of Array.

Returns
Array<n, m, T>

Definition at line 555 of file array.h.

◆ e() [1/2]

template<const int n, const int m, typename T >
template<int q = n, int p = m, std::enable_if_t<(q==1||p==1), int > = 0>
T & Array< n, m, T >::e ( const int  i)
inline

Standard array indexing operation for 1D Array.

Example for Vector Array:

MyType a = A.e(i); // i <= n
T e(const int i, const int j) const
Standard array indexing operation for 2D Array.
Definition array.h:197
Parameters
iVector index type
Returns
T matrix element type

Definition at line 225 of file array.h.

◆ e() [2/2]

template<const int n, const int m, typename T >
T Array< n, m, T >::e ( const int  i,
const int  j 
) const
inline

Standard array indexing operation for 2D Array.

Accessing singular elements is insufficient, but matrix elements are often quite small.

Example for 2D Array:

MyType a = A.e(i,j); // i <= n, j <= m
Parameters
irow index
jcolumn index
Returns
T matrix element type

Definition at line 197 of file array.h.

◆ gaussian_random()

template<const int n, const int m, typename T >
Array< n, m, T > & Array< n, m, T >::gaussian_random ( double  width = 1.0)
inline

Fill Array with Gaussian random elements.

Parameters
width
Returns
Array<n, m, T>&

Definition at line 611 of file array.h.

◆ operator!=()

template<const int n, const int m, typename T >
template<typename S , int n1, int m1>
bool Array< n, m, T >::operator!= ( const Array< n1, m1, S > &  rhs) const
inline

Compare non-equality of two Arrays.

Negation of operator==()

Template Parameters
S
n1
m1
Parameters
rhs
Returns
true
false

Definition at line 366 of file array.h.

◆ operator*()

template<int n, int m, typename T >
Array< n, m, T > operator* ( Array< n, m, T >  a,
const Array< n, m, T > &  b 
)
inline

Multiplication operator.

Defined for the following operations

Array*Array:

NOTE: Arrays must share same dimensionality

A = 2;
B = 3;
C = A*B; // C is uniformly 6

Scalar * Array / Array * Scalar:

NOTE: Exact definition exist in overloaded functions that can be viewed in source code.

Template Parameters
nNumber of rows
mNumber of columns
TArray element type
Parameters
a
b
Returns
Array<n, m, T>

Definition at line 825 of file array.h.

◆ operator*=()

template<const int n, const int m, typename T >
template<typename S , std::enable_if_t< std::is_convertible< hila::type_mul< T, S >, T >::value, int > = 0>
Array< n, m, T > & Array< n, m, T >::operator*= ( const Array< n, m, S > &  rhs)
inline

Multiply assign scalar or array.

Multiplication works element wise

Multiply assign operator can be used in the following ways

Multiply assign Array:

A = 2;
B = 2;
A *= B; \\ A is uniformly 4

Multiply assign scalar:

A *= 2 ; \\ A is uniformly 2
Template Parameters
S
Parameters
rhs
Returns
Array<n, m, T>&

Definition at line 488 of file array.h.

◆ operator+() [1/2]

template<const int n, const int m, typename T >
Array< n, m, T > Array< n, m, T >::operator+ ( ) const
inline

Unary + operator.

Equivalent to identity operator meaning that Arrat stays as is.

Returns
const Array<n, m, T>

Definition at line 300 of file array.h.

◆ operator+() [2/2]

template<int n, int m, typename T >
Array< n, m, T > operator+ ( Array< n, m, T >  a,
const Array< n, m, T > &  b 
)
inline

Addition operator.

Defined for the following operations

Array + Array:

NOTE: Arrays must share same dimensionality

A = 1;
B = 1;
C = A + B; // C is uniformly 2

Scalar + Array / Array + Scalar:

NOTE: Exact definition exist in overloaded functions that can be viewed in source code.

Template Parameters
nNumber of rows
mNumber of columns
TArray element type
Parameters
a
b
Returns
Array<n, m, T>

Definition at line 714 of file array.h.

◆ operator+=()

template<const int n, const int m, typename T >
template<typename S , std::enable_if_t< std::is_convertible< S, T >::value, int > = 0>
Array< n, m, T > & Array< n, m, T >::operator+= ( const Array< n, m, S > &  rhs)
inline

Add assign operator with Array or scalar.

Add assign operator can be used in the following ways

Add assign Array:

Requires that Arrays have same dimensions

A = 1;
B = 1;
A += B; \\ A is uniformly 2

Add assign scalar:

Adds scalar \( a \) to Array uniformly

A += 1 ; \\ A is uniformly 2
Template Parameters
SElement type of rhs
Parameters
rhsArray to add
Returns
Array<n, m, T>

Definition at line 400 of file array.h.

◆ operator-() [1/2]

template<const int n, const int m, typename T >
Array< n, m, T > Array< n, m, T >::operator- ( ) const
inline

Unary - operator.

Returns Array with the signs of all the elements in the Arrat flipped.

Returns
Array<n,m,T>

Definition at line 286 of file array.h.

◆ operator-() [2/2]

template<int n, int m, typename T >
Array< n, m, T > operator- ( Array< n, m, T >  a,
const Array< n, m, T > &  b 
)
inline

Subtraction operator.

Defined for the following operations

Array - Array:

NOTE: Arrays must share same dimensionality

A = 2;
B = 1;
C = A - B; // C is uniformly 2

Scalar - Array / Array - Scalar:

NOTE: Exact definition exist in overloaded functions that can be viewed in source code.

Template Parameters
nNumber of rows
mNumber of columns
TArray element type
Parameters
a
b
Returns
Array<n, m, T>

Definition at line 753 of file array.h.

◆ operator-=()

template<const int n, const int m, typename T >
template<typename S , std::enable_if_t< std::is_convertible< S, T >::value, int > = 0>
Array< n, m, T > & Array< n, m, T >::operator-= ( const Array< n, m, S > &  rhs)
inline

Subtract assign operator with Array or scalar.

Subtract assign operator can be used in the following ways

Subtract assign Array:

A = 3;
B = 1;
A -= B; \\ A is uniformly 2

Subtract assign scalar:

Subtract scalar uniformly from square matrix

A<n,m,MyType> A = 3;
A -= 1 ; \\ A is uniformly 2
Template Parameters
S
Parameters
rhs
Returns
Array<n, m, T>&

Definition at line 433 of file array.h.

◆ operator/()

template<int n, int m, typename T >
Array< n, m, T > operator/ ( Array< n, m, T >  a,
const Array< n, m, T > &  b 
)
inline

Division operator.

Defined for the following operations

Array/Array:

NOTE: Arrays must share same dimensionality

A = 4;
B = 2;
C = A/B; // C is uniformly 2

Scalar / Array / Array / Scalar:

NOTE: Exact definition exist in overloaded functions that can be viewed in source code.

Template Parameters
nNumber of rows
mNumber of columns
TArray element type
Parameters
a
b
Returns
Array<n, m, T>

Definition at line 864 of file array.h.

◆ operator/=()

template<const int n, const int m, typename T >
template<typename S , std::enable_if_t< std::is_convertible< hila::type_div< T, S >, T >::value, int > = 0>
Array< n, m, T > & Array< n, m, T >::operator/= ( const Array< n, m, S > &  rhs)
inline

Division assign with array or scalar.

Division works element wise

Division assign operator can be used in the following ways

Division assign Array:

A = 2;
B = 2;
A /= B; \\ A is uniformly 1

Division assign scalar:

A /= 2 ; \\ A is uniformly 1
Template Parameters
S
Parameters
rhs
Returns
Array<n, m, T>&

Definition at line 533 of file array.h.

◆ operator=()

template<const int n, const int m, typename T >
template<typename S , std::enable_if_t< hila::is_assignable< T &, S >::value, int > = 0>
Array< n, m, T > & Array< n, m, T >::operator= ( const S  rhs)
inline

Scalar assignment operator.

The following ways to assign an Array are:

Assignment from scalar:

Assignment from scalar assigns the scalar uniformly to the array

Definition at line 321 of file array.h.

◆ operator==()

template<const int n, const int m, typename T >
template<typename S , int n1, int m1>
bool Array< n, m, T >::operator== ( const Array< n1, m1, S > &  rhs) const
inline

Compare equality of Arrays.

Two Arrays are equal iff Arrays are of same dimension and all elements compare to equal Note: Complex == scalar if arithmetic value is equal

Template Parameters
S
Parameters
rhs
Returns
true if equal

Definition at line 340 of file array.h.

◆ random()

template<const int n, const int m, typename T >
Array< n, m, T > & Array< n, m, T >::random ( )
inline

Fill Array with random elements.

Returns
Array<n, m, T>&

Definition at line 598 of file array.h.

◆ real()

template<const int n, const int m, typename T >
Array< n, m, hila::arithmetic_type< T > > Array< n, m, T >::real ( ) const
inline

Returns real part of Array.

Returns
Array<n, m, T>

Definition at line 567 of file array.h.

◆ rows()

template<const int n, const int m, typename T >
constexpr int Array< n, m, T >::rows ( ) const
inlineconstexpr

Returns number of rows.

Returns
constexpr int

Definition at line 147 of file array.h.

◆ size()

template<const int n, const int m, typename T >
template<int q = n, int p = m, std::enable_if_t< q==1, int > = 0>
constexpr int Array< n, m, T >::size ( ) const
inlineconstexpr

Returns size of Vector Array or square Array.

Template Parameters
qNumber of rows n
pNumber of columns m
Returns
constexpr int

Definition at line 167 of file array.h.

Friends And Related Symbol Documentation

◆ cast_to()

template<typename Ntype , typename T , int n, int m, std::enable_if_t< hila::is_arithmetic< T >::value, int > = 0>
Array< n, m, Ntype > cast_to ( const Array< n, m, T > &  mat)
related

Array casting operation.

Cast array to different number type or Complex type

Allowed casting: number->number, number->Complex, Complex->Complex

Not allowed casting: Complex->number

Template Parameters
NtypeType to cast to
TInput Array type
nNumber of rows
mNumber of columns
Parameters
matArray to cast
Returns
Array<n, m, Ntype>

Definition at line 1229 of file array.h.

◆ ceil()

template<int n, int m, typename T , std::enable_if_t< hila::is_arithmetic< T >::value, int > = 0>
Array< n, m, T > ceil ( Array< n, m, T >  a)
related

Ceiling.

Ceiling function if T is arithmetic type

Template Parameters
TArray element type, must be arithmetic type

Definition at line 1194 of file array.h.

◆ floor()

template<int n, int m, typename T , std::enable_if_t< hila::is_arithmetic< T >::value, int > = 0>
Array< n, m, T > floor ( Array< n, m, T >  a)
related

Floor.

Flooring function if T is arithmetic type

Template Parameters
TArray element type, must be arithmetic type

Definition at line 1182 of file array.h.

◆ pow()

template<int n, int m, typename T >
Array< n, m, T > pow ( Array< n, m, T >  a,
int  b 
)
related

Power.

Array can be raised homogeneously to the power of a integer or scalar b or Array can be raised to the power of another Array b element wise.

Parameters
bArray, Integer or Real scalar to raise to the power of

Definition at line 1144 of file array.h.

◆ round()

template<int n, int m, typename T , std::enable_if_t< hila::is_arithmetic< T >::value, int > = 0>
Array< n, m, T > round ( Array< n, m, T >  a)
related

Rounding.

Rounding function if T is arithmetic type

Template Parameters
TArray element type, must be arithmetic type

Definition at line 1170 of file array.h.

◆ trunc()

template<int n, int m, typename T , std::enable_if_t< hila::is_arithmetic< T >::value, int > = 0>
Array< n, m, T > trunc ( Array< n, m, T >  a)
related

Truncation.

Truncation function if T is arithmetic type

Template Parameters
TArray element type, must be arithmetic type

Definition at line 1206 of file array.h.


The documentation for this class was generated from the following file: