犰狳库具有将pow(A, p)
向量/矩阵的所有元素提升A
到幂的功能p
。犰狳、std 或其他地方是否有执行元素级功能的函数?也就是说,将向量中的每个元素提升到向量A
中的相应幂p
?
问问题
2854 次
1 回答
2
Armadillo 中没有这种预定义的函数。
这是一个快速的自制版本,但是它不会受益于 Armadillo 的任何延迟表达式评估模板功能:
#include <cassert>
#include <cmath>
#include <armadillo>
#include <iostream>
template<class Object>
Object elementwise_pow(const Object& base, const Object& p) {
assert(base.n_elem == p.n_elem);
Object result;
result.copy_size(base);
for (std::size_t i = 0; i < result.n_elem; ++i) {
result[i] = std::pow(base[i], p[i]);
}
return result;
}
int main() {
arma::mat m(3,3);
m.fill(2.);
arma::mat p(3,3);
p << 1 << 2 << 3 << arma::endr
<< 4 << 5 << 6 << arma::endr
<< 7 << 8 << 9 << arma::endr;
arma::mat r = elementwise_pow(m, p);
r.print(std::cout);
return 0;
}
优化编译器还应该轻松地向量化此代码。
于 2014-03-31T17:18:31.163 回答