Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从Boost C+的元素中减去max+;排列_C++_Arrays_Numpy_Boost - Fatal编程技术网

C++ 从Boost C+的元素中减去max+;排列

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_

我有一个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_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;}