numpy.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 137 行
CPP
137 行
// Copyright David Abrahams 2002.// Distributed under the Boost Software License, Version 1.0. (See// accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)#include <boost/python/numeric.hpp>#include <boost/python/tuple.hpp>#include <boost/python/module.hpp>#include <boost/python/def.hpp>#include <boost/python/str.hpp>using namespace boost::python;namespace py = boost::python;// See if we can invoke array() from C++numeric::array new_array(){ return numeric::array( py::make_tuple( py::make_tuple(1,2,3) , py::make_tuple(4,5,6) , py::make_tuple(7,8,9) ) );}// test argument conversionvoid take_array(numeric::array /*x*/){}// A separate function to invoke the info() member. Must happen// outside any doctests since this prints directly to stdout and the// result text includes the address of the 'self' array.void info(numeric::array const& z){ z.info();}namespace{ object handle_error() { PyObject* type, *value, *traceback; PyErr_Fetch(&type, &value, &traceback); handle<> ty(type), v(value), tr(traceback); return object("exception"); str format("exception type: %sn"); format += "exception value: %sn"; format += "traceback:n%s" ; object ret = format % py::make_tuple(ty, v, tr); return ret; }}#define CHECK(expr) \{ \ object result; \ try { result = object(expr); } \ catch(error_already_set) \ { \ result = handle_error(); \ } \ check(result); \}// Tests which work on both Numeric and numarray array objects. Of// course all of the operators "just work" since numeric::array// inherits that behavior from object.void exercise(numeric::array& y, object check){ y[py::make_tuple(2,1)] = 3; CHECK(y); CHECK(y.astype('D')); CHECK(y.copy()); CHECK(y.typecode());}// numarray-specific tests. check is a callable object which we can// use to record intermediate results, which are later compared with// the results of corresponding python operations.void exercise_numarray(numeric::array& y, object check){ CHECK(str(y)); CHECK(y.argmax()); CHECK(y.argmax(0)); CHECK(y.argmin()); CHECK(y.argmin(0)); CHECK(y.argsort()); CHECK(y.argsort(1)); y.byteswap(); CHECK(y); CHECK(y.diagonal()); CHECK(y.diagonal(1)); CHECK(y.diagonal(0, 0)); CHECK(y.diagonal(0, 1, 0)); CHECK(y.is_c_array()); CHECK(y.isbyteswapped()); CHECK(y.trace()); CHECK(y.trace(1)); CHECK(y.trace(0, 0)); CHECK(y.trace(0, 1, 0)); CHECK(y.new_("D").getshape()); CHECK(y.new_("D").type()); y.sort(); CHECK(y); CHECK(y.type()); CHECK(y.factory(py::make_tuple(1.2, 3.4))); CHECK(y.factory(py::make_tuple(1.2, 3.4), "f8")); CHECK(y.factory(py::make_tuple(1.2, 3.4), "f8", true)); CHECK(y.factory(py::make_tuple(1.2, 3.4), "f8", true, false)); CHECK(y.factory(py::make_tuple(1.2, 3.4), "f8", true, false, object())); CHECK (y.factory(py::make_tuple(1.2, 3.4), "f8", true, false, object(), py::make_tuple(1,2,1)));}BOOST_PYTHON_MODULE(numpy_ext){ def("new_array", new_array); def("take_array", take_array); def("exercise", exercise); def("exercise_numarray", exercise_numarray); def("set_module_and_type", &numeric::array::set_module_and_type); def("get_module_name", &numeric::array::get_module_name); def("info", info);}#include "module_tail.cpp"
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?