1
我有一個長度爲x
的Boost.Numpy數組foo
,例如, foo = [-0.7, -0.9, -0.6]
。我想從每個元素中減去最大值,導致foo = [-0.1, -0.3, 0.0]
。嘗試boost::range::max_element(foo)
我得到error: no matching function for call to 'max_element'
。所以,我已經做了下面的技巧來獲取最大價值,從Boost C++數組元素中減去最大值
// 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;});
但無濟於事:error: no matching function for call to object of type
指向捕獲[]
;嘗試[&]
和[=]
也沒有工作。所以,我現在有一個循環:
for (auto i=0; i<x; ++i) {foo[ii] -= foo_max;}
但如預期,這並不工作。 foo_max
實際上是一個字符,它在之前的作業中被加倍。所以更早找到最大值的黑客破解了。請幫忙。我知道Boost.Numpy docs,tutorials和examples,而且他們很窮。
這不是你的一天:) –
'字符常量* begin_foo' - 也許應該投那些'雙常量*'如果你想讀的雙打,而不是有符號的字節.... –
一些進一步的想法 - 有['numpy.amax'](https://docs.scipy.org/doc/numpy/reference/generated/numpy.amax.html)。 Boost python讓我們[導入模塊](http://www.boost.org/doc/libs/1_63_0/libs/python/doc/html/reference/embedding/boost_python_import_hpp.html)表示爲'object'。我們可以獲取屬性(函數是模塊的屬性)並將它們存儲在一個'object'實例中,我們可以在這些對象上使用'operator()'來調用它們所代表的函數。所以你可以得到一個對象來表示'numpy.amax'並使用它來獲得最大值。 (續...) –