Мне нужно выполнить вычисления для каждой записи матрицы в Rcpp::List. Список содержит произвольную комбинацию плотных и разреженных матриц. Этот список передается в C++ из R. Мой вопрос касается как подходов к реализации, так и эффективности. Моя текущая мысль состоит в том, чтобы перебрать каждый элемент списка, проверить его тип (плотный или разреженный) и сгенерировать Arma::mat или Arma::sp_mat для элемента и использовать его для расчеты, желательно без копирования. Меня смущает следующее:
Как проверить, является ли тип матрицы плотным или разреженным, из Rcpp::List[d], где d является индексом?
Я могу использовать расширенный конструктор для Arma::mat через NumericMatrix, который позволяет избежать копирования (как показано ниже), но я не знаю, как сделать то же самое с арма::sp_mat. Эти матрицы большие, и я хочу избежать копирования.
Rcpp::NumericMatrix Ad = RcppListObject[d];
arma::mat ad=arma::mat( Ad.begin(), Ad.nrow(), Ad.ncol(), false );
//any needed calculations based on the d^{th} entry uses `ad`.
Тесно связанный со 2, мне нужно будет выполнить множество вычислений с d^{th матрица в списке в разных точках алгоритма. Нужно ли мне каждый раз выполнять два шага, отмеченные в пункте 2, прежде чем я смогу выполнять с его помощью вычисления, или есть более эффективный путь? (Например, может ли Arma::field помочь и обработать комбинацию матриц Arma::mat и Arma::sp_mat без копирования? )
Мне нужно выполнить вычисления для каждой записи матрицы в Rcpp::List. Список содержит произвольную комбинацию плотных и разреженных матриц. Этот список передается в C++ из R. Мой вопрос касается как подходов к реализации, так и эффективности. Моя текущая мысль состоит в том, чтобы перебрать каждый элемент списка, проверить его тип (плотный или разреженный) и сгенерировать Arma::mat или Arma::sp_mat для элемента и использовать его для расчеты, желательно без копирования. Меня смущает следующее: [list] [*]Как проверить, является ли тип матрицы плотным или разреженным, из Rcpp::List[d], где d является индексом? [*]Я могу использовать расширенный конструктор для Arma::mat через NumericMatrix, который позволяет избежать копирования (как показано ниже), но я не знаю, как сделать то же самое с арма::sp_mat. Эти матрицы большие, и я хочу избежать копирования. [/list] [code]Rcpp::NumericMatrix Ad = RcppListObject[d]; arma::mat ad=arma::mat( Ad.begin(), Ad.nrow(), Ad.ncol(), false ); //any needed calculations based on the d^{th} entry uses `ad`. [/code] [list] [*]Тесно связанный со 2, мне нужно будет выполнить множество вычислений с d^{th матрица в списке в разных точках алгоритма. Нужно ли мне каждый раз выполнять два шага, отмеченные в пункте 2, прежде чем я смогу выполнять с его помощью вычисления, или есть более эффективный путь? (Например, может ли Arma::field помочь и обработать комбинацию матриц Arma::mat и Arma::sp_mat без копирования? ) [/list] Большое спасибо!
Я хочу предоставить класс C++ и функцию, которая принимает объекты этого класса в качестве параметра для R. Мне нужно следовать упрощенному примеру. Я создал пакет, используя
Rscript -e 'Rcpp::Rcpp.package.skeleton( soq )'
Я решил начать изучать Rcpp и C++, чтобы быстрее создавать некоторые аспекты своего кода R. Для начала я использую учебник Хэдли, который есть в вики devtools. У меня есть компилятор С++ на этой машине, поскольку это Mac, и на нем установлен xcode -...
Это простой пример, воспроизводящий мою проблему в сети, которую я пытаюсь развернуть.
У меня есть входной слой изображения (который мне нужно поддерживать), а затем плотный слой. , слой Conv2D и плотный слой.
Идея состоит в том, что входные данные...
Я хотел бы хранить и управлять массивом матриц (или указателей на них), который может быть либо Arma::mat, либо Arma::sp_mat различных размеров (передаваемых из R через Ркпп). Какой был бы самый простой способ добиться этого? Например, учитывая...