我有一个长度为 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/