我正在尝试在RcppArmadillo中编写一个将行动态添加到数组/矩阵的函数。它应该像R中的rbind
或Python中的pandas.concat
一样工作。 (我依靠C ++来提高效率。)
我的特定目标是接受一个称为foo
的向量并生成一个三列矩阵my_matrix
,该矩阵的每一行均由某种条件确定。因为需要为每个三元组{i,j,k}检查条件,所以它涉及一个三重循环。到目前为止,这就是我所拥有的(大写的词是我在此处包括的评论):
/* (From my RcppArmadillo script) */
arma::mat myFunction(arma::vec foo) {
int n = foo.size();
// initialize first row of column names
arma::vec my_matrix[] = {"i", "j", "k"};
// loop and append rows
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
for(int k = 0; k < n; k++) {
if (SOME CONDITION ABOUT i,j,k and foo) {
APPEND ROW {i,j,k} TO my_matrix
arma::vec new_row = {i,j,k};
my_matrix = join_vert(my_matrix, new_row);
}
}
}
}
return my_matrix;
}
我面临三个问题:
arma::vec new_row = {i,j,k};
上,我被告知“ 不能将非常数表达式的类型从初始值列表的'int'缩小为'double'“my_matrix = join_vert(my_matrix, new_row);
上,我被告知“ 没有匹配函数来调用'join_vert'“return my_matrix;
行上,我被告知“ 没有从'arma :: vec [3]'到'arma :: Mat'(又名'Mat << >>')]的可行转换”]因为我不熟悉C ++
我正在尝试在RcppArmadillo中编写一个将行动态添加到数组/矩阵的函数。它应该像R中的rbind或Python中的pandas.concat一样工作。 (我依靠C ++来提高效率。)我的...
(通常)将数据本地存储为列,因此添加行并不是那么明显。因为矩阵通常表示为连续向量,所以您需要完整的副本(以创建要填充的“孔”)。
请听Dirk以获得最佳实践-按列存储的数据是一个巨大的问题,您应该始终注意编写高效的代码。我仅单独撰写文章,以机械方式显示如果由于某种原因您不能听从他的建议,如何完成您所描述的内容。