从单个数组

时间:2018-02-16 06:55:23

标签: c++ arrays eigen armadillo

我必须通过选择一些成员来从数组中构造Eigen::Vector。我知道我可以使用Eigen::Map初始化Eigen::Vector而无需复制。

假设我有一个N整数数组,我需要通过选择具有从Eigen::VectorXij和{{1}的索引的数组值来生成j+m }} k而不复制值。

这在Eigen或Armadillo有可能吗?

示例:

k+m

2 个答案:

答案 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以防止断言失败。