gpt4 book ai didi

c++ - 从 Eigen 中的矩阵中提取 vector 的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 03:39:35 31 4
gpt4 key购买 nike

我是 Eigen 的初学者,我正在做的是从矩阵中提取不同的行并进行一些计算。

代码是这样的

MatrixXd mat(5, 10);
VectorXd vec1 = mat.row(1);
VectorXd vec2 = mat.row(2);
// do some calculation with vec1 and vec2

所以问题是,通过像 VectorXd vec = mat.row(1) 这样的操作,内存分配/内存复制可能对性能不利。因为我只是用它来计算,肯定不会对下面的矩阵做任何改变,有没有更好的方法来做到这一点?

我尝试使用 Eigen::Block 但似乎 Block 不支持某些矩阵运算(我不确定)。

最佳答案

.row() 本身对性能一点都不差,它是 Eigen 的 block 表达式之一。

Blocks expressions can be used both as rvalues and as lvalues. As usual with Eigen expressions, this abstraction has zero runtime cost provided that you let your compiler optimize.

如果您根据表达式制定计算,编译器可以进行所有类型的优化。

这里是一些例子:

mat.row(2) = 2 * mat.row(0) + mat.row(1);
float x = (mat.row(0) - mat.row(1)).squaredNorm();

这样,您就可以在编译时提供足够的信息,Eigen 可以对其进行优化。

不确定Eigen::Block 是什么意思,最常见的用法应该是矩阵的.block()https://eigen.tuxfamily.org/dox/group__TutorialBlockOperations.html

关于c++ - 从 Eigen 中的矩阵中提取 vector 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38740108/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com