如何在没有 return 值的情况下使用 (eigen) unaryExpr 和 lambda 函数?
How to use (eigen) unaryExpr and lambda function without return values?
这是我的示例代码:
using namespace Eigen;
VectorXi a = VectorXi::Random(10);
VectorXi b = VectorXi::Random(10);
VectorXi c;
c << 0, 2, 5, 7;
c.unaryExpr([&](int i) { a[i] = b[i]; }); // This will not work
c.unaryExpr([&](int i) { a[i] = b[i]; return 0; }); // This works
我想使用存储在 c 中的索引将元素从 b 复制到 a。这是在 eigen unaryExpr 中使用 lambda 函数的正确方法吗?我如何避免代码 "return 0;" 因为我没有返回任何东西。
我正在使用 g++ 8.1.0
谢谢
您正在使用函数式编程风格来产生纯粹的副作用,这不是很优雅,这不是 unaryExpr
应该使用的方式。我建议 std::vector<int>
用于 c
和 for 循环以使您的意图更清晰:
std::vector<int> c = {0, 2, 5, 7};
for(auto i:c) a[i] = b[i];
或者使用Eigen的头部:
a(c) = b(c);
与 c
VectorXi
或 std::vector<int>
或其他...
这是我的示例代码:
using namespace Eigen;
VectorXi a = VectorXi::Random(10);
VectorXi b = VectorXi::Random(10);
VectorXi c;
c << 0, 2, 5, 7;
c.unaryExpr([&](int i) { a[i] = b[i]; }); // This will not work
c.unaryExpr([&](int i) { a[i] = b[i]; return 0; }); // This works
我想使用存储在 c 中的索引将元素从 b 复制到 a。这是在 eigen unaryExpr 中使用 lambda 函数的正确方法吗?我如何避免代码 "return 0;" 因为我没有返回任何东西。
我正在使用 g++ 8.1.0
谢谢
您正在使用函数式编程风格来产生纯粹的副作用,这不是很优雅,这不是 unaryExpr
应该使用的方式。我建议 std::vector<int>
用于 c
和 for 循环以使您的意图更清晰:
std::vector<int> c = {0, 2, 5, 7};
for(auto i:c) a[i] = b[i];
或者使用Eigen的头部:
a(c) = b(c);
与 c
VectorXi
或 std::vector<int>
或其他...