我必须通过选择一些成员来从数组中构造Eigen::Vector
。我知道我可以使用Eigen::Map
初始化Eigen::Vector
而无需复制。
假设我有一个N
整数数组,我需要通过选择具有从Eigen::VectorXi
到j
和{{1}的索引的数组值来生成j+m
}} k
而不复制值。
这在Eigen或Armadillo有可能吗?
示例:
k+m
答案 0 :(得分:2)
使用犰狳,您可以使用advanced constructors向量,然后使用join_cols() / join_rows()函数:
int array[] = {1,2,3,4,5,6,7,8,9,10};
Col<int> A( &array[0], 4, false );
Col<int> B( &array[5], 4, false );
Col<int> C = join_cols(A,B);
Col<>是列向量的Armadillo模板类。如果您需要行向量,请将Col<int>
更改为Row<int>
。
答案 1 :(得分:1)
您可以使用commma initializer加入两个向量,每个向量都使用Map
生成:
int array[] = {1,2,3,4,5,6,7,8,9,10};
int m = 4;
int j = 0, k = 5;
VectorXi w(2*m);
w << Map<VectorXi>(&array[j], m) , Map<VectorXi>(&array[k], m);
请注意,必须使用其大小初始化w
以防止断言失败。