アルマジロキューブ(チューブまたはスライスを使用)からベクトル/ダブルを取得しようとすると、コンパイルエラーが発生します。どのようにキューブから(行)vecに取得するには?私はエレガントなキャスト/変換アルマジロ機能を見つけることができません。Armadillo:キューブのサブビュー(チューブ)をベクトルに変換する
#include <RcppArmadillo.h>
//#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
void testarma() {
arma::mat B;
B << 0.555950 << 0.274690 << 0.540605 << 0.798938 << arma::endr
<< 0.108929 << 0.83<< 0.891726 << 0.895283 << arma::endr
<< 0.948014 << 0.973234 << 0.216504 << 0.883152 << arma::endr
<< 0.023787 << 0.675382 << 0.231751 << 0.450332 << arma::endr;
B.print("B:");
// cubes ("3D matrices")
arma::cube Q(B.n_rows, B.n_cols, 4);
Q.slice(0) = B;
Q.slice(1) = 2.0 * B;
Q.slice(2) = 3.0 * B;
Q.slice(3) = 4.0 * B;
Q.print("Q:");
Rcpp::Rcout << "Q.tube(0, 1): " << std::endl << Q.tube(0, 1) << std::endl;
arma::rowvec whatIwant = arma::rowvec(4).fill(0.0);
for (int i = 0; i < 4; i++) {
// This gives an error. cannot convert 'arma::subview_col<double>' to 'double' in assignment
//whatIwant[i] = Q.slice(i).row(0).col(1);
Rcpp::Rcout << "At slice i=" << i << " value=" << Q.slice(i).row(0).col(1) << std::endl;
}
// But I don't want to write for loop. I am sure there exists
// an "armadillo" way (function) that does exactly this
// How to convert output of tube to rowvec?
}
のコード例が再現してください.... – coatless
@coatless:大好きだけど、それは何百行ものコードを持っているでしょう。問題は、アルマジロキューブのすべてのスライスで、各行列のi、j要素(私の場合は(0、1))としてarma :: rowvecを取得する方法です。 – Samo
その場合、おもちゃの例を作成できますか? – coatless