c++ - 从 Boost C++ 数组的元素中减去最大值

标签 c++ arrays numpy boost

我有一个长度为 x 的 Boost.Numpy 数组 foo,例如foo = [-0.7, -0.9, -0.6]。我想从每个元素中减去最大值,得到 foo = [-0.1, -0.3, 0.0]。尝试 boost::range::max_element(foo) 我得到 错误:没有匹配函数调用 'max_element'。所以我做了以下 hack 以获得最大值,

// 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);

然后我尝试使用 lambda 减去最大值:

std::for_each(begin_foo, end_foo, [](double& d) {d-=foo_max;});

但无济于事:错误:没有匹配函数调用类型指向捕获[]的对象;尝试 [&][=] 也没有用。所以我现在有一个 for 循环:

for (auto i=0; i<x; ++i) {foo[ii] -= foo_max;}

但这并没有像预期的那样工作。 foo_max 实际上是一个在前面的赋值中转换为 double 的字符。因此,较早的寻找最大值的技巧被打破了。请帮忙。我知道 Boost.Numpy docs , tutorials , 和 examples ,而且他们很穷。

最佳答案

来自 @Dan Maš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;}

关于c++ - 从 Boost C++ 数组的元素中减去最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42637862/

相关文章:

Java:记住递归方法中上一步的结果

c++ - COM 的 CoUnintailize() api 崩溃

c++ - 如何为 python 迭代器编写 c++ 包装器?

c++ - Linux 命令检测程序的计算机资源使用情况

c++ - 取消引用数组地址不起作用?

Python:根据数组中的值拆分 NumPy 数组

c++基类到达子类变量

c++ - 错误 C3074 : an array can only be initialized with an initializer-list

python - Numpy 与 Python 的 Decimal 参数

python - 如何调整 Numpy 数组的大小以添加/替换行,其组合由数组每行中的值确定