In [1]:
#include <xtensor/xtensor.hpp>
#include <xtensor/xarray.hpp>
#include <xtensor/xmath.hpp>
#include <xtensor/xview.hpp>
#include <xtensor/xio.hpp>

In [2]:
xt::xarray<double> a = xt::arange<double>(0., 22.5, 2.5);

In [3]:
a


Out[3]:
  0. 
  2.5
  5. 
  7.5
 10. 
 12.5
 15. 
 17.5
 20. 

In [4]:
a.reshape({3, 3});
a


Out[4]:
  0. 
  2.5
  5. 
  7.5
 10. 
 12.5
 15. 
 17.5
 20. 

In [5]:
a = xt::sin(a * 2)


Out[5]:
 0.      
-0.958924
-0.544021
 0.650288
 0.912945
-0.132352
-0.988032
-0.428183
 0.745113

In [6]:
xt::xarray<double> x1 = {-1,  2,  3};

In [7]:
a * x1


Out[7]:
-0.      
-1.917849
-1.632063
-0.650288
 1.825891
-0.397055
 0.988032
-0.856365
 2.235339

In [8]:
xt::view(a * x1, xt::all(), xt::range(1, 3, 2))


Out[8]:
-1.917849
 1.825891
-0.856365

In [9]:
#include <numeric>                        // Standard library import for std::accumulate
#include <xtensor/xmath.hpp>              // xtensor import for the C++ universal functions

template <class E>
double sum_of_sines(const E& m)
{
    auto sines = xt::sin(m);
    // return xt::sum(sines)();
    return std::accumulate(sines.begin(), sines.end(), 0.0);
}

In [10]:
sum_of_sines(xt::arange(0., 10000.))


Out[10]:
1.93951