gpt4 book ai didi

c++ - Eigen unaryExpr() : get index of element

转载 作者:搜寻专家 更新时间:2023-10-31 02:03:28 26 4
gpt4 key购买 nike

我知道在 Eigen 中我可以使用 unaryExpr() 将自定义函数应用于我的 Eigen 矩阵和 vector ,例如

Eigen::VectorXd vec(4);
vec.unaryExpr([](double d) {
return d * cos(d);
});

将自定义函数应用于 Eigen::VectorXd。但是还有一种方法可以获取当前元素在我的 Vector 中的位置吗?我希望能够做这样的事情:

Eigen::VectorXd vec(4);
vec.unaryExpr([](double d, int index) {
return index * d;
});

例如,将 vector 中的每个条目乘以它的位置。

最佳答案

除了按照@ggael 的建议使用零表达式外,您还可以将二进制表达式与LinSpaced(size, 0, size-1) 一起使用。 :

VectorXd v; // some input vector

v = v.binaryExpr(VectorXd::LinSpaced(v.size(), 0, v.size()-1),
[](double d, double i){return d*i;});
// or much simpler and more efficient in this case:
v = v.cwiseProduct(VectorXd::LinSpaced(v.size(), 0, v.size()-1));

在足够新的 Eigen 版本上,LinSpaced 应该被矢量化(尽管关于最后一个元素有一些边界情况)。当然,binaryExpr 只有在传递的仿函数被矢量化时才会被矢量化。

注意:如果您主要进行元素方面的操作,请考虑使用 ArrayXd 而不是 VectorXd

关于c++ - Eigen unaryExpr() : get index of element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55414798/

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