当A类通过Eigen :: Array成员的列时,Eigen3能否对该除法进行矢量化,另一个类B取列,然后用B的Eigen :: Array进行除法?
示例:
#include <Eigen/Dense>
class A_interface {
public:
template <typename T>
void div_by(const T& rhs);
const auto col(const int col_id) const;
};
enum A_implementation { test };
template <A_implementation A_t> class A;
template <>
class A<test> : public A_interface{
public:
A(const int n_rows, const int n_cols)
: _n_rows(n_rows), _n_cols(n_cols),
_data(n_rows, n_cols) {}
const auto col(const int col_id) const {
return _data.col(col_id);
}
template <typename T>
void div_by(const T& rhs) {
for (int i = 0; i < _n_cols; ++i) {
_data.col(i) /= rhs.col(i);
}
}
private:
const int _n_rows;
const int _n_cols;
Eigen::ArrayXXf _data;
template <A_implementation A_t> friend class A;
};
int main() {
A<test> a(10,2);
A<test> b(10,2);
a.div_by(b);
}
我想这样做是因为并非A的所有实现都使用Eigen :: Array。
在这种情况下,是由Eigen3或编译器矢量化的div_by
方法中的双循环?
答案 0 :(得分:2)
如果两个数组都按列存储(默认为Eigen),则div_by
将被矢量化。但是你为什么要对列进行循环?那么_data/=rhs
呢?你为什么要存储_n_rows,n_cols
?该信息已在_data
。