<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Dear List,<div class=""><br class=""></div><div class="">I wonder if there is a way to convert a big matrix to ‘float’ instead of ‘double’ within a Rcpp program. The reason for using float is mainly for performance improvement.</div><div class=""><br class=""></div><div class="">For instance, I have a simple function named ‘print_bigmat’ as shown below.</div><div class=""><br class=""></div><div class="">As shown in the output, ‘double_bigmat' will save the correct values of the original matrix ‘x’ but not ‘float_bigmat’.</div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-size: 16px; font-family: 'Bitstream Vera Sans Mono'; color: rgb(0, 132, 0);" class="">// [[Rcpp::export]]</div><div style="margin: 0px; font-size: 16px; font-family: 'Bitstream Vera Sans Mono';" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">int</span> print_bigmat(SEXP pBigMat) {</div><p style="margin: 0px; font-size: 16px; font-family: 'Bitstream Vera Sans Mono'; min-height: 19px;" class="">    <br class="webkit-block-placeholder"></p><div style="margin: 0px; font-size: 16px; font-family: 'Bitstream Vera Sans Mono';" class="">    XPtr<BigMatrix> xpMat(pBigMat);</div><p style="margin: 0px; font-size: 16px; font-family: 'Bitstream Vera Sans Mono'; min-height: 19px;" class="">    <br class="webkit-block-placeholder"></p><div style="margin: 0px; font-size: 16px; font-family: 'Bitstream Vera Sans Mono';" class="">    <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">const</span> mat& double_bigmat = arma::Mat<<span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">double</span>>((<span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">double</span> *)xpMat->matrix(), xpMat->nrow(), xpMat->ncol(), <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">false</span>);</div><p style="margin: 0px; font-size: 16px; font-family: 'Bitstream Vera Sans Mono'; min-height: 19px;" class="">    <br class="webkit-block-placeholder"></p><div style="margin: 0px; font-size: 16px; font-family: 'Bitstream Vera Sans Mono';" class="">    <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">const</span> fmat& float_bigmat = arma::Mat<<span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">float</span>>((<span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">float</span> *)xpMat->matrix(), xpMat->nrow(), xpMat->ncol(), <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">false</span>);</div><p style="margin: 0px; font-size: 16px; font-family: 'Bitstream Vera Sans Mono'; min-height: 19px;" class="">    <br class="webkit-block-placeholder"></p><div style="margin: 0px; font-size: 16px; font-family: 'Bitstream Vera Sans Mono';" class="">    Rcout << double_bigmat << endl;</div><p style="margin: 0px; font-size: 16px; font-family: 'Bitstream Vera Sans Mono'; min-height: 19px;" class="">    <br class="webkit-block-placeholder"></p><div style="margin: 0px; font-size: 16px; font-family: 'Bitstream Vera Sans Mono';" class="">    Rcout << float_bigmat << endl;</div><p style="margin: 0px; font-size: 16px; font-family: 'Bitstream Vera Sans Mono'; min-height: 19px;" class="">    <br class="webkit-block-placeholder"></p><div style="margin: 0px; font-size: 16px; font-family: 'Bitstream Vera Sans Mono';" class="">    <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">return</span> <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">0</span>;</div><div style="margin: 0px; font-size: 16px; font-family: 'Bitstream Vera Sans Mono';" class="">}</div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Output:</div><div class=""><br class=""></div><div class=""><div class="">> x <- matrix(rnorm(10), nrow=2)</div><div class="">> x</div><div class="">            [,1]        [,2]      [,3]       [,4]       [,5]</div><div class="">[1,] -0.05514382 -0.03943825 1.4145593 -0.1161918  2.3282466</div><div class="">[2,] -1.22023371 -0.35592125 0.7714512  0.6865120 -0.3504811</div><div class="">> print_bigmat(as.big.matrix(x)@address)</div><div class="">  -0.0551  -0.0394   1.4146  -0.1162   2.3282</div><div class="">  -1.2202  -0.3559   0.7715   0.6865  -0.3505</div><div class=""><br class=""></div><div class="">  -3.3865e-14  -8.6552e+04   4.5441e-07  -5.0912e+23  -1.5184e+34</div><div class="">  -1.3456e+00  -1.9025e+00  -1.2828e+00  -1.6780e+00   1.9268e+00</div><div class=""><br class=""></div><div class="">[1] 0</div><div class="">> </div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Thanks much,</div><div class=""><div class="">Yue</div></div><div class=""><br class=""></div><div class=""><br class=""></div></body></html>