Esempio n. 1
0
 typename std::enable_if<
     E::value != 1,
     types::ndarray<typename E::dtype, types::array<long, E::value - 1>>>::type
 any(E const &array, long axis)
 {
   constexpr long N = E::value;
   using T = typename E::dtype;
   if (axis < 0 || axis >= long(N))
     throw types::ValueError("axis out of bounds");
   auto shape = array.shape();
   if (axis == 0) {
     types::array<long, N> shp;
     shp[0] = 1;
     sutils::copy_shape<1, 0>(shp, shape, utils::make_index_sequence<N - 1>());
     types::ndarray<bool, types::array<long, N>> out(shp, false);
     return std::accumulate(array.begin(), array.end(), *out.begin(),
                            numpy::functor::add());
   } else {
     types::array<long, N - 1> shp;
     sutils::copy_shape<0, 0>(shp, shape, utils::make_index_sequence<N - 1>());
     types::ndarray<bool, types::array<long, N - 1>> anyy(shp,
                                                          __builtin__::None);
     std::transform(
         array.begin(), array.end(), anyy.begin(),
         [=](types::ndarray<T, types::array<long, N - 1>> const &other) {
           return any(other, axis - 1);
         });
     return anyy;
   }
 }
Esempio n. 2
0
 typename std::enable_if<E::value != 1, types::ndarray<typename E::dtype, E::value - 1>>::type
 any(E const& array, long axis)
 {
     constexpr long N = E::value;
     typedef typename E::dtype T;
     if(axis<0 || axis >=long(N))
         throw types::ValueError("axis out of bounds");
     auto shape = array.shape;
     if(axis==0)
     {
         types::array<long, N> shp;
         shp[0] = 1;
         std::copy(shape.begin() + 1, shape.end(), shp.begin() + 1);
         types::ndarray<bool,N> out(shp, false);
         return std::accumulate(array.begin(), array.end(), *out.begin(), numpy::proxy::add());
     }
     else
     {
         types::array<long, N-1> shp;
         std::copy(shape.begin(), shape.end() - 1, shp.begin());
         types::ndarray<bool,N-1> anyy(shp, __builtin__::None);
         std::transform(array.begin(), array.end(), anyy.begin(), [=](types::ndarray<T,N-1> const& other) {return any(other, axis-1);});
         return anyy;
     }
 }