[英]Assign values to equally spaced elements of VectorXf in Eigen
我被这个看似简单的问题搞疯了。 我正在用 Eigen 将代码从 Matlab 翻译成 C++。 在 Matlab 中,我有这样的事情:
v1 = zeros(100,1);
a=2;
b=5;
c=4;
v2 = [100 0.2 30 41 55];
v1(a:b:a+b*c) = v2;
通过这种方式,我只设置了 v1 的元素,从 a 开始到 a+b*c,并与 b 等距。 其他元素保持不变。 在 Eigen 中,我目前使用 for 循环解决了:
VectorXf v1 = VectorXf::Zero(100);
int a = 2;
int b = 5;
int c = 4;
VectorXf v2(5);
v2 << 100, 0.2, 30, 41, 55;
for (int i = 0; i < v2.size(); i++)
{
v1(a-1+b*i) = v2(i);
}
我正在寻找一种没有循环的方法。 是否可以? 我搜索了很多没有找到任何东西。 非常感谢。
感谢@chtz 解决了。
int a = 2;
int b = 5;
int c = 4;
VectorXf v2(5);
v2 << 100, 0.2, 30, 41, 55;
VectorXf vNew = VectorXf::Zero(30);
vNew(Eigen::seq(a-1, a+b*c-1, b)) = v2;
问题是,正如同一个@chtz 所建议的那样,“seq”不能在 Eigen 的最新稳定版本 3.3.8 中使用,因为它在 Eigen/src/core/ 中缺少 ArithmeticSequence.h 文件在这里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.