Skip to content

[Rcpp-devel] RcppArmadillo: resize vs. insert_cols

3 messages · c s, Ramon Diaz-Uriarte

#
Dear All,

I am using RcppArmadillo, and I am creating matrices in the C++ code
(i.e., these are not matrices passed from R). The sizes of these matrices
might need to increase dynamically during run time, with elements being
added at the end. What is the recommended way of doing this:


a) Just insert elements as needed. E.g.: Y.insert_cols(Y.n_cols, the_new_thing);

b) Create initial object. Double size of object (using resize) each time I
run out of space. Copy the_new_thing to the appropriate place.



I thought b) was a reasonable manual approach (e.g., Skiena, "The
algorithm design manual, 2nd ed", p. 67), but I think I've read that for
std::vector, a) (with push_back), is a better choice than b) (using
reserve, not resize).


For me, a) involves writing less code.  

Thanks,


R.
c s
#
Hi Ramon,

Option (b) would be more efficient, at the expense of slightly more code.

However, you can use option (a) to quickly get something working. Once you
test that your code works okay, you can always optimise it by selectively
refactoring it into (b).

If the code in question is not inside a critical loop, you may not need to
bother with the refactoring. Eg. if most of the time is spent inside matrix
multiplication, or solve(), or svd(), etc, refactoring would make little
overall difference.
On Monday, December 10, 2012, Ramon Diaz-Uriarte <rdiaz02 at gmail.com> wrote:
the_new_thing);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20121210/9e171ebf/attachment.html>
#
Hi Conrad,

Thanks a lot. Understood; I'll stay away from premature optimization,
then, and see if it is really needed.


Best,

R.
On Mon, 10 Dec 2012 23:48:36 +1000,c s <conradsand.arma at gmail.com> wrote: