【发布时间】:2018-03-01 09:26:04
【问题描述】:
我正在尝试使用 Eigen 加速向量范数的计算。
尝试了两种方式:
方式一:将向量分别存储在一个数组中(std::vector)
std::vector<Eigen::Matrix<double, 1, VECTOR_SIZE>> my_vectors(num_vectors);
Eigen::Matrix<double, Eigen::Dynamic, 1> norms(num_vectors, 1);
for (int i = 0 ; i < my_vectors.size() ; i++) {
norms(i, 0) = my_vectors[i].norm();
}
方式2:将向量存储为同一矩阵的行并使用行范数
Eigen::Matrix<double, Eigen::Dynamic, VECTOR_SIZE> my_vectors(num_vectors, VECTOR_SIZE);
Eigen::Matrix<double, Eigen::Dynamic, 1> norms = my_vectors.rowwise().norm();
我很惊讶地发现 Way1 很慢,而 Way2 更慢。
我做错了吗?有没有办法更快地计算规范?
在我做的另一个测试中,向量减法也是如此。对单独的向量进行迭代,从每个向量中减少相同的向量,比将所有向量存储为矩阵行并使用 .rowwise() - vector_to_subtract
【问题讨论】:
-
您使用的是哪个 Eigen 版本、哪个编译器、什么编译标志?而
num_vectors一般有多大,你有没有初始化my_vectors的内存?
标签: c++ linear-algebra eigen