从单个数组的不同段中初始化eigen ::向量



我必须通过选择其一些成员来从数组中构造Eigen::Vector。我知道我可以使用Eigen::Map在不复制的情况下初始化Eigen::Vector

假设我有一个N整数数组,我需要通过选择具有从jj+m到CC_7到CC_7的数组值来制作Eigen::VectorXi,而无需复制值。

在特征或armadillo中,这是否有可能?

示例:

 int array[]= {1,2,3,4,5,6,7,8,9,10};
 //I need to initialize a Eigen::VectorXi with values having 0 to 0+3   
 // indices and 5 to 5+3 indices. ie with elements {1,2,3,4,6,7,8,9} 

使用armadillo,您可以将高级构造函数用于向量,然后使用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&lt;>是用于列矢量的Armadillo模板类。如果需要行向量,将Col<int>更改为Row<int>

您可以使用COMMMA初始器加入两个使用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必须以其大小初始化以防止断言失败。

最新更新