(Rcpp, броненосец) конвертировать arma :: vec в arma :: mat - PullRequest
0 голосов
/ 15 июня 2019

У меня есть матрица X, которая векторизована функцией arma::vectorise. После некоторых вычислений для преобразованного вектора x я хочу изменить его на arma::mat. Я пытался использовать функцию .reshape в броненосце, но это выдает мне эту ошибку.

Код RCPP

// [[Rcpp::export]]
arma::mat vec2mat(arma::vec x, int nrow, int ncol){
  return x.reshape(nrow, ncol);
}

Сообщение об ошибке

no viable conversion from returned value of type 'void' to function return type 'arma::mat' (aka 'Mat<doubld>')

Кто-нибудь поможет мне найти хороший способ справиться с этим? Я не уверен, какой тип я должен использовать для функции возвращаемого типа в этом случае. Если вы знаете другой способ преобразования вектора в матрицу, то это было бы также здорово:)

Заранее спасибо!

1 Ответ

3 голосов
/ 15 июня 2019

Вы пропустили / проигнорировали детали в документации Armadillo: reshape() является функцией-членом уже существующей матрицы , тогда как вы пытаетесь вызвать ее с помощью присвоения. И компилятор говорит вам нет мас . Так что слушайте компилятор.

Рабочий код

#include <RcppArmadillo.h>

// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
arma::mat vec2mat(arma::vec x, int nrow, int ncol) {
  arma::mat y(x);
  y.reshape(nrow, ncol);
  return y;
}

Демо

> Rcpp::sourceCpp("56606499/answer.cpp")  ## filename I used
> vec2mat(sqrt(1:10), 2, 5)
         [,1]     [,2]     [,3]     [,4]     [,5]
[1,] 1.000000 1.732051 2.236068 2.645751 3.000000
[2,] 1.414214 2.000000 2.449490 2.828427 3.162278
> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...