繁体   English   中英

为 Eigen 中 VectorXf 的等距元素赋值

[英]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 文件在这里

所以,如果你需要使用它,你必须下载从主分支不稳定的源代码,这里还是以前的,过时,镜子在github 这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM