Iterators
Default iteration
#include <iostream>
#include <iterator>
#include <xtensor/xarray.hpp>
xt::xarray<int> a = {{1, 2, 3}, {4, 5, 6}};
std::copy(a.begin(), a.end(), std::ostream_iterator<int>(std::cout, ", "));
// Prints 1, 2, 3, 4, 5, 6,
Specified traversal order
#include <iostream>
#include <iterator>
#include <xtensor/xarray.hpp>
xt::xarray<int> a = {{1, 2, 3}, {4, 5, 6}};
std::copy(a.begin<layout_type::row_major>(),
a.end<layout_type::row_major>(),
std::ostream_iterator<int>(std::cout, ", "));
// Prints 1, 2, 3, 4, 5, 6,
std::copy(a.begin<layout_type::column_major>(),
a.end<layout_type>::column_major>(),
std::ostream_iterator<int>(std::cout, ", "));
// Prints 1, 4, 2, 5, 3, 6,
Broacasting iteration
#include <iostream>
#include <iterator>
#include <xtensor/xarray.hpp>
xt::xarray<int> a = {{1, 2, 3}, {4, 5, 6}};
using shape_type = xt::dynamic_shape<std::size_t>;
shape_type s = {2, 2, 3};
std::copy(a.begin(s), a.end(s), std::ostream_iterator<int>(std::cout, ", "));
// Prints 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6,
std::copy(a.begin<layout_type::row_major>(s),
a.end<layout_type::row_major>(s),
std::ostream_iterator<int>(std::cout, ", "));
// Prints 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6,
std::copy(a.begin<layout_type::column_major>(s),
a.end<layout_type>::column_major>(s),
std::ostream_iterator<int>(std::cout, ", "));
// Prints 1, 4, 2, 5, 3, 6, 1, 4, 2, 5, 3, 6,
1-D slice iteration
Iterating over axis 0:
#include <xtensor/xarray.hpp>
#include <xtensor/xaxis_slice_iterator.hpp>
#include <xtensor/xio.hpp>
xarray<int> a = {{{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}},
{{13, 14, 15, 16},
{17, 18, 19, 20},
{21, 22, 23, 24}}};
auto iter = axis_slice_begin(a, 0);
auto end = axis_slice_end(a, 0);
while(iter != end)
{
std::cout << *iter++ << std::endl;
}
// Prints:
// { 1, 13 }
// { 2, 14 }
// { 3, 15 }
// { 4, 16 }
// { 5, 17 }
// { 6, 18 }
// { 7, 19 }
// { 8, 20 }
// { 9, 21 }
// { 10, 22 }
// { 11, 23 }
// { 12, 24 }
Iterating over axis 1:
#include <xtensor/xarray.hpp>
#include <xtensor/xaxis_slice_iterator.hpp>
#include <xtensor/xio.hpp>
xarray<int> a = {{{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}},
{{13, 14, 15, 16},
{17, 18, 19, 20},
{21, 22, 23, 24}}};
auto iter = axis_slice_begin(a, 1u);
auto end = axis_slice_end(a, 1u);
while(iter != end)
{
std::cout << *iter++ << std::endl;
}
// Prints:
// { 1, 5, 9 }
// { 2, 6, 10 }
// { 3, 7, 11 }
// { 4, 8, 12 }
// { 13, 17, 21 }
// { 14, 18, 22 }
// { 15, 19, 23 }
// { 16, 20, 24 }
Iterating over axis 2:
#include <xtensor/xarray.hpp>
#include <xtensor/xaxis_slice_iterator.hpp>
#include <xtensor/xio.hpp>
xarray<int> a = {{{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}},
{{13, 14, 15, 16},
{17, 18, 19, 20},
{21, 22, 23, 24}}};
auto iter = axis_slice_begin(a, 2u);
auto end = axis_slice_end(a, 2u);
while(iter != end)
{
std::cout << *iter++ << std::endl;
}
// Prints:
// { 1, 2, 3, 4 }
// { 5, 6, 7, 8 }
// { 9, 10, 11, 12 }
// { 13, 14, 15, 16 }
// { 17, 18, 19, 20 }
// { 21, 22, 23, 24 }
(N-1)-dimensional iteration
Iterating over axis 0:
#include <xtensor/xarray.hpp>
#include <xtensor/xaxis_iterator.hpp>
#include <xtensor/xio.hpp>
xarray<int> a = {{{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}},
{{13, 14, 15, 16},
{17, 18, 19, 20},
{21, 22, 23, 24}}};
auto iter = axis_begin(a, 0);
auto end = axis_end(a, 0);
while(iter != end)
{
std::cout << *iter++ << std::endl;
}
// Prints:
// {{ 1, 2, 3, 4 },
// { 5, 6, 7, 9 },
// { 9, 10, 11, 12 }}
// {{ 13, 14, 15, 16 },
// { 17, 18, 19, 20 },
// { 21, 22, 23, 24 }}
Iterating over axis 1:
#include <xtensor/xarray.hpp>
#include <xtensor/xaxis_iterator.hpp>
#include <xtensor/xio.hpp>
xarray<int> a = {{{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}},
{{13, 14, 15, 16},
{17, 18, 19, 20},
{21, 22, 23, 24}}};
auto iter = axis_begin(a, 1u);
auto end = axis_end(a, 1u);
while(iter != end)
{
std::cout << *iter++ << std::endl;
}
// Prints:
// {{ 1, 2, 3, 4 },
// { 13, 14, 15, 16 }}
// {{ 5, 6, 7, 8 },
// { 17, 18, 19, 20 }}
// {{ 9, 10, 11, 12 },
// { 21, 22, 23, 24 }}
Iterating over axis 2:
#include <xtensor/xarray.hpp>
#include <xtensor/xaxis_iterator.hpp>
#include <xtensor/xio.hpp>
xarray<int> a = {{{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}},
{{13, 14, 15, 16},
{17, 18, 19, 20},
{21, 22, 23, 24}}};
auto iter = axis_begin(a, 2u);
auto end = axis_end(a, 2u);
while(iter != end)
{
std::cout << *iter++ << std::endl;
}
// Prints:
// {{ 1, 5, 9 }
// { 13, 17, 21 }}
// {{ 2, 6, 10 },
// { 14, 18, 22 }}
// {{ 3, 7, 11 },
// { 15, 19, 23 }}
// {{ 4, 8, 12 },
// { 16, 20, 24 }}