
Following my original request:
Is it possible to adapt e.g. a pointer to double in to a ublas::matrix<double>, or construct a matrix from a pointer to double?
And the following suggestion,
You could write your own storage class (see the Storage concept in the uBLAS documentation) which is an adaptor for a pointer and you can assign set the pointer via the data() member function of matrix<double>.
-- François Duranleau LIGUM, Université de Montréal
I have found the following seems to work. That said I would like comments on this solution. Is this the "right" way to achieve what I want? If not, what is? If this is the best way, I recommend adding a note to the ublas:....matrix|vector documentation to this effect, perhaps with something like this as an example. I imagine that this would be a common requirement for many people. Regards, -ed /** * * Example of constructing a boost matrix and vector object from * previously allocated heap memory using an array_adaptor. * * Comments please on the legitamacy of this and potential catches. * * ej.grace@imperial.ac.uk */ // Why should I have to define the following in order to use // shallow_array_adaptor? #define BOOST_UBLAS_SHALLOW_ARRAY_ADAPTOR // Definitions for vector and matrix. #include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <iostream> int main() { using namespace boost::numeric::ublas; unsigned int N=100,M=200; double *data_vector, *data_matrix; data_vector = new double[N]; data_matrix = new double[N*M]; // Set Mat(0,1) to -Pi. data_matrix[1] = -3.14159; // Crate a boost vector object using the data_vector as storage. vector<double,shallow_array_adaptor<double> > Vec (N,shallow_array_adaptor<double>(N,data_vector) ); // Create a boost matrix object using the data_matrix pointer as storage. matrix<double,row_major, shallow_array_adaptor<double> > Mat (N,M,shallow_array_adaptor<double>(N*M,data_matrix) ); Mat(3,3) = 3.0; // Should print -3.14159, 3 std::cout << Mat(0,1) << "," << Mat(3,3) << std::endl; return 0; };