mirror of
https://github.com/boostorg/histogram.git
synced 2025-05-09 23:04:07 +00:00
faster with static_vector
This commit is contained in:
parent
fbe82e3c58
commit
d2306810ee
@ -43,7 +43,7 @@ void compare_1d(unsigned n)
|
||||
|
||||
double best_root = std::numeric_limits<double>::max();
|
||||
double best_boost = std::numeric_limits<double>::max();
|
||||
for (unsigned k = 0; k < 3; ++k) {
|
||||
for (unsigned k = 0; k < 10; ++k) {
|
||||
TH1I hroot("", "", 100, 0, 1);
|
||||
clock_t t = clock();
|
||||
for (unsigned i = 0; i < n; ++i)
|
||||
@ -72,7 +72,7 @@ void compare_3d(unsigned n)
|
||||
|
||||
double best_root = std::numeric_limits<double>::max();
|
||||
double best_boost = std::numeric_limits<double>::max();
|
||||
for (unsigned k = 0; k < 3; ++k) {
|
||||
for (unsigned k = 0; k < 10; ++k) {
|
||||
TH3I hroot("", "", 100, 0, 1, 100, 0, 1, 100, 0, 1);
|
||||
clock_t t = clock();
|
||||
for (unsigned i = 0; i < n; ++i)
|
||||
@ -102,7 +102,7 @@ void compare_6d(unsigned n)
|
||||
|
||||
double best_root = std::numeric_limits<double>::max();
|
||||
double best_boost = std::numeric_limits<double>::max();
|
||||
for (unsigned k = 0; k < 3; ++k) {
|
||||
for (unsigned k = 0; k < 10; ++k) {
|
||||
double x[6];
|
||||
vector<int> bin(6, 10);
|
||||
vector<double> min(6, 0);
|
||||
|
@ -248,8 +248,6 @@ typedef variant<
|
||||
integer_axis
|
||||
> axis_type;
|
||||
|
||||
typedef std::vector<axis_type> axes_type;
|
||||
|
||||
std::ostream& operator<<(std::ostream&, const axis_type&);
|
||||
|
||||
}
|
||||
|
@ -172,7 +172,7 @@ private:
|
||||
ar & data_;
|
||||
}
|
||||
|
||||
friend class buffer_access;
|
||||
friend class histogram_access;
|
||||
};
|
||||
|
||||
histogram operator+(const histogram& a, const histogram& b) {
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include <boost/serialization/split_member.hpp>
|
||||
#include <boost/serialization/variant.hpp>
|
||||
#include <boost/serialization/vector.hpp>
|
||||
#include <boost/container/static_vector.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
|
||||
#include <bitset>
|
||||
@ -21,7 +22,8 @@ namespace histogram {
|
||||
// holds an array of axis and computes the internal index
|
||||
class histogram_base {
|
||||
public:
|
||||
typedef uint64_t size_type;
|
||||
typedef container::static_vector<axis_type, BOOST_HISTOGRAM_AXIS_LIMIT> axes_type;
|
||||
typedef uintptr_t size_type;
|
||||
|
||||
histogram_base(const histogram_base&);
|
||||
histogram_base& operator=(const histogram_base&);
|
||||
@ -55,7 +57,7 @@ protected:
|
||||
update_buffers(); \
|
||||
}
|
||||
|
||||
// generates constructors taking 2 to AXIS_LIMIT arguments
|
||||
// generates constructors taking 1 to AXIS_LIMIT arguments
|
||||
BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_HISTOGRAM_BASE_CTOR, nil)
|
||||
|
||||
bool operator==(const histogram_base&) const;
|
||||
@ -106,9 +108,15 @@ private:
|
||||
void serialize(Archive& ar, unsigned version)
|
||||
{
|
||||
using namespace serialization;
|
||||
ar & axes_;
|
||||
if (Archive::is_loading::value)
|
||||
unsigned size = axes_.size();
|
||||
ar & size;
|
||||
if (Archive::is_loading::value) {
|
||||
axes_.resize(size);
|
||||
ar & serialization::make_array(&axes_[0], size);
|
||||
update_buffers();
|
||||
} else {
|
||||
ar & serialization::make_array(&axes_[0], size);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -29,7 +29,7 @@ histogram_init(python::tuple args, python::dict kwargs) {
|
||||
}
|
||||
|
||||
// normal constructor
|
||||
axes_type axes;
|
||||
histogram_base::axes_type axes;
|
||||
for (unsigned i = 1, n = len(args); i < n; ++i) {
|
||||
object pa = args[i];
|
||||
extract<regular_axis> er(pa);
|
||||
@ -135,7 +135,7 @@ histogram_getitem(const histogram& self, python::object oidx) {
|
||||
return self.value(self.dim(), idx);
|
||||
}
|
||||
|
||||
class buffer_access {
|
||||
class histogram_access {
|
||||
public:
|
||||
static
|
||||
python::dict
|
||||
@ -161,8 +161,8 @@ void register_histogram()
|
||||
>("histogram", no_init)
|
||||
.def("__init__", raw_function(histogram_init))
|
||||
// shadowed C++ ctors
|
||||
.def(init<const axes_type&>())
|
||||
.add_property("__array_interface__", &buffer_access::histogram_array_interface)
|
||||
.def(init<const histogram_base::axes_type&>())
|
||||
.add_property("__array_interface__", &histogram_access::histogram_array_interface)
|
||||
.def("fill", raw_function(histogram_fill))
|
||||
.add_property("depth", &histogram::depth)
|
||||
.add_property("sum", &histogram::sum)
|
||||
|
@ -275,7 +275,7 @@ void register_histogram_base() {
|
||||
// used to pass arguments from raw python init to specialized C++ constructors
|
||||
class_<std::vector<double> >("vector_double", no_init);
|
||||
class_<std::vector<std::string> >("vector_string", no_init);
|
||||
class_<axes_type>("axes", no_init);
|
||||
class_<histogram_base::axes_type>("axes", no_init);
|
||||
|
||||
class_<regular_axis>("regular_axis", no_init)
|
||||
.def(init<unsigned, double, double, std::string, bool>(
|
||||
|
Loading…
x
Reference in New Issue
Block a user