Simple array functions

The following functions work for any object modeling ImmutableCuboidArray concept.

In this section, we present some simple functions already in the library. It is however very easy to create new one using the usual functional constructions map and fold.

Element-wise functions

The following functions are mapped on the array (using map):

abs real imag pow cos sin tan cosh sinh tanh acos asin atan exp log sqrt floor

meaning that e.g. if A is an array, real(A) models ImmutableCuboidArray, with the same size and returns the real part of the elements. In other words, it applies the function term-by-term.

Note

These functions do NOT compute a new array in memory, they are lazy.

sum

Synopsis:

template<ImmutableCuboidArray A> A::value_type sum (A const &);
template<ImmutableCuboidArray A> A::value_type prod (A const &);

Returns the sum (resp. product) of the all the elements of the array.

max_element, min_element

Synopsis:

template<ImmutableCuboidArray A> A::value_type max_element (A const &);
template<ImmutableCuboidArray A> A::value_type min_element (A const &);

Returns the maximum/minimum element of the array (provided that value_type is an ordered type of course…).

Examples

#include <triqs/arrays.hpp>
#include <triqs/arrays/algorithms.hpp>
using triqs::arrays::matrix;
using triqs::clef::placeholder;
int main() {
  // declare and init a matrix
  placeholder<0> i_;
  placeholder<1> j_;
  matrix<int> A(2, 2);
  A(i_, j_) << i_ - j_;

  std::cout << "A = " << A << std::endl;
  std::cout << "abs(A)= " << matrix<double>(abs(A)) << std::endl;
  std::cout << "sum(A) = " << sum(A) << std::endl;
  std::cout << "max_element(A) = " << max_element(A) << std::endl;
  std::cout << "min_element(A) = " << min_element(A) << std::endl;
  std::cout << "min_element(abs(A)) = " << min_element(abs(A)) << std::endl;
}