#ifndef PYTHONIC_NUMPY_BINCOUNT_HPP #define PYTHONIC_NUMPY_BINCOUNT_HPP #include "pythonic/include/numpy/bincount.hpp" #include "pythonic/numpy/max.hpp" #include "pythonic/utils/numpy_conversion.hpp" PYTHONIC_NS_BEGIN namespace numpy { template typename std::enable_if::value == 1, types::ndarray>>::type bincount(types::ndarray const &expr, types::none_type weights, types::none minlength) { long length = 0; if (minlength) length = (long)minlength; length = std::max(length, 1 + max(expr)); types::ndarray> out(types::pshape(length), 0L); for (auto iter = expr.fbegin(), end = expr.fend(); iter != end; ++iter) ++out[*iter]; return out; } template typename std::enable_if< std::tuple_size::value == 1, types::ndarray() * std::declval()), types::pshape>>::type bincount(types::ndarray const &expr, E const &weights, types::none minlength) { long length = 0; if (minlength) length = (long)minlength; length = std::max(length, 1 + max(expr)); typename std::enable_if< std::tuple_size::value == 1, types::ndarray() * std::declval()), types::pshape>>::type out(types::pshape(length), 0L); auto iweight = weights.begin(); for (auto iter = expr.fbegin(), end = expr.fend(); iter != end; ++iter, ++iweight) out[*iter] += *iweight; return out; } NUMPY_EXPR_TO_NDARRAY0_IMPL(bincount); } PYTHONIC_NS_END #endif