C++ 从Boost C+的元素中减去max+;排列
我有一个Boost.Numpy数组C++ 从Boost C+的元素中减去max+;排列,c++,arrays,numpy,boost,C++,Arrays,Numpy,Boost,我有一个Boost.Numpy数组foo,长度x,例如foo=[-0.7,-0.9,-0.6]。我想从每个元素中减去最大值,得到foo=[-0.1,-0.3,0.0]。正在尝试boost::range::max\u element(foo)我得到错误:调用“max\u element”时没有匹配的函数。。所以我做了下面的破解来获得最大值 // a bunch of hacky stuff b/c std algorithms don't work well w/ boost arrays Py_
foo
,长度x
,例如foo=[-0.7,-0.9,-0.6]
。我想从每个元素中减去最大值,得到foo=[-0.1,-0.3,0.0]
。正在尝试boost::range::max\u element(foo)
我得到错误:调用“max\u element”时没有匹配的函数。
。所以我做了下面的破解来获得最大值
// a bunch of hacky stuff b/c std algorithms don't work well w/ boost arrays
Py_intptr_t const *foo_stride = foo.get_strides();
char const *begin_foo = foo.get_data();
char const *end_foo = foo + foo_stride[0]*x;
double foo_max = *std::max_element(begin_foo, end_foo);
然后我试着用λ减去最大值:
std::for_each(begin_foo, end_foo, [](double& d) {d-=foo_max;});
但是没有用:错误:对指向捕获的类型为
的对象的调用没有匹配函数[];尝试[&]
和[=]
也不起作用。现在我有一个for循环:
for (auto i=0; i<x; ++i) {foo[ii] -= foo_max;}
for(自动i=0;iPer注释来自:
//加载numpy.amax模块
对象numpy=bpy::导入(“numpy”);
对象numpy_amax=numpy.attr(“amax”);
自动foo_max=numpy_amax(foo);
对于(自动i=0;i根据以下评论):
//加载numpy.amax模块
对象numpy=bpy::导入(“numpy”);
对象numpy_amax=numpy.attr(“amax”);
自动foo_max=numpy_amax(foo);
对于(自动i=0;iIt不是你的日子。:char-const*begin\u-foo
——如果你想读取双精度而非带符号的字节,可能应该将它们转换为double-const*
。.Boost-python让我们可以获取属性(函数是模块的属性)并将它们存储在对象
实例中,我们可以对这些对象使用操作符()
来调用它们所表示的函数。因此,您可以得到一个对象来表示numpy.amax
,并使用它来获得最大值。(续…)感谢您提供的提示@DanMašek!我尝试了boost::python::object numpy=bpy::import(“numpy”);
然后double Y_left_max=numpy.amax(foo);
,但这不会构建b/c错误:在“boost::python::api::object”中没有名为“amax”的成员。
@DanMašek啊,当然,现在开始工作了,谢谢。今天不是你的日子。:)char-const*begin\u-foo
——如果您想读取双倍字节而不是有符号的字节,可能应该将它们转换为double-const*
。。还有一些进一步的想法。Boost-python让我们,表示为对象
。我们可以获取属性(函数是模块的属性)然后将它们存储在一个对象
实例中,我们可以对这些对象使用操作符()
来调用它们所表示的函数。这样你就可以得到一个对象来表示numpy.amax
,并使用它来获得最大值。(续…)谢谢你的提示@DanMašek!我试过boost::python::object numpy=bpy::import(“numpy);
然后double Y_left_max=numpy.amax(foo);
,但这不会构建b/c错误:在'boost::python::api::object'中没有名为'amax'的成员。
@DanMašek啊当然,现在它正在工作,谢谢。
// Load the numpy.amax module
bpy::object numpy = bpy::import("numpy");
bpy::object numpy_amax = numpy.attr("amax");
auto foo_max = numpy_amax(foo);
for (auto i=0; i<x; ++i) {foo[i] -= foo_max;}