Реорганизовать вектор матриц Rcpp / Rarmadillo - PullRequest
0 голосов
/ 24 марта 2020

У меня есть функция

// [[Rcpp::export]]
arma::mat Jf(arma::vec x, arma::mat S)
{
    return(arma::repmat(pow(x, -2), 1, S.n_rows).t() % 
        arma::pow(arma::repmat(x, 1, S.n_rows).t() - S, 2)
    );
}

Для этой функции требуется вектор x и матрица S размера d × 1 и n × d соответственно. Функция возвращает матрицу того же размера, что и S.

. Проблема в том, что я хочу применить эту функцию к набору m x переменных (S fixed), т.е. я применяю JF (строка) к матрице m × d matrix X:

std::vector<arma::mat> df;

for(int l = 0; l != m; ++l)
{
    df.push_back(Jf(arma::trans(X.row(l)), S));
}     

С учетом вышеизложенного для l oop я получаю std::vector длины m, содержащей n × d arma::mat объектов , Это прекрасно работает (и, надеюсь, не слишком неэффективно). Моя настоящая цель - оперировать первым, вторым и т. Д. Столбцом каждой матрицы в df и оценить, например, средний вектор или матрицу дисперсии-ковариации. Другими словами, я хочу реорганизовать df таким образом, чтобы я получил вектор матриц, где первый элемент представляет собой матричную сборку из первых столбцов матриц в df, второй элемент представляет собой матричную сборку из вторые столбцы матриц и т. д.

К сожалению, я не знаю, как это реализовать (это также причина, по которой я не могу предоставить MWE). В моем нынешнем подходе используются 2 вложенных цикла for, которые не очень ручные и не очень работают. Поэтому я ищу идею или предложение для решения этой проблемы.

...