犰狳中的矢量化功率函数

时间:2013-09-06 22:10:01

标签: c++ armadillo

犰狳库有一个函数pow(A, p),可将向量/矩阵A的所有元素提升到幂p。在犰狳,标准或其他地方是否有一个执行元素功率的功能?也就是说,将向量A中的每个元素提升为向量p中的相应幂?

1 个答案:

答案 0 :(得分:2)

在犰狳中没有这种预定义的功能。

这是一个快速的自制版本,但不会受益于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;
}

优化编译器也应该矢量化这段代码。