gpt4 book ai didi

function - 特征库 : return a matrix block in a function as lvalue

转载 作者:行者123 更新时间:2023-12-02 14:42:22 25 4
gpt4 key购买 nike

我试图将矩阵 block 作为函数的左值返回。假设我的函数如下所示:

Block<Derived> getBlock(MatrixXd & m, int i, int j, int row, int column)
{
return m.block(i,j,row,column);
}

事实证明,C++ 编译器似乎理解 block() 运算符仅提供临时值,因此编译器禁止将其作为左值返回。然而,在 Eigen 文档中有一些例子,我们可以使用 Eigen 作为左值(http://eigen.tuxfamily.org/dox/TutorialBlockOperations.html#TutorialBlockOperationsUsing),所以我想知道我们如何不能对函数做同样的事情返回。

a.block(0,0,2,3) = a.block(2,1,2,3);

谢谢!

最佳答案

我想把我自己发现的东西写下来,这样可能对其他人有帮助:

我的基本解决方案是了解您想要 block 的派生类型。在这种情况下:

Block<MatrixXd> getBlock(MatrixXd & m, int i, int j, int row, int column)
{
return m.block(i,j,row,column);
}

有趣的是我注意到这个方法默认会返回对矩阵 m 内容的引用。所以如果我们这样做:

MatrixXd m = MatrixXd::Zero(10,10);
Block<MatrixXd> myBlock = getBlock(m, 1, 1, 3, 3);
myBlock << 1, 0, 0,
0, 1, 0,
0, 0, 1;

矩阵 m 中的内容也会被修改。但请注意,

MatrixXd m = MatrixXd::Zero(10,10);
MatrixXd myBlock = getBlock(m, 1, 1, 3, 3);
myBlock << 1, 0, 0,
0, 1, 0,
0, 0, 1;

不会工作。我的理解是,一旦我们将 block 转换为另一种类型,Eigen 就会在转换之前复制数据。

关于function - 特征库 : return a matrix block in a function as lvalue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548253/

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