У меня есть функция
// [[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, которые не очень ручные и не очень работают. Поэтому я ищу идею или предложение для решения этой проблемы.