|
Re: ublas::matrix sharing storage with ublas::vector: msg#00316lib.boost.user
Great! This is exactly what I was looking for. Is there a list of all these undocumenated features in boost anywhere besides the source? Here is a snippet of code that does exactly what I want. #define BOOST_UBLAS_SIMPLE_ARRAY_ADAPTOR #include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/io.hpp> using namespace boost::numeric::ublas; main() { matrix<double> m(5,5); vector<double,array_adaptor<double> > v(m.data().size(),array_adaptor<double>(m.data().size(),m.data().begin())); for (int i = 0; i < 25; i++) v[i] = i; std::cout << v << std::endl; std::cout << m << std::endl; } --Stephen On Thu, Nov 28, 2002 at 11:43:11AM +0100, Kresimir Fresl wrote: > > > Stephen Crowley wrote: > > > For example.. I have a matrix<double> m(5,5); > > > > In some code I actually need to use it as a 5x5 matrix.. but other parts > > must reference it as a vector (to pass to another library). > > > > Currently I am doing something like this > > > > matrix<double> m(5,5); > > // do stuff to m > > vector<double> v(25); > > v.data() = m.data(); > > // pass v to library > > // get results back > > m.data() = v.data(); > > > > This is obviously not optimal.. and if both m.data() and v.data() pointed to > > the same location in memory the problem would be solved. > > > > I suppose I might be able to get around it by making my own storage class > > that allows you to specify a location and size instead of allocating one > > itself. > > There is a storage class `array_adaptor<>' (in storage.hpp, currently > undocumented), which adapts some other array to interface > which ublas classes expect: > ============================================== > #include <cstddef> > #include <iostream> > > #define BOOST_UBLAS_SIMPLE_ARRAY_ADAPTOR > > #include <boost/numeric/ublas/vector.hpp> > #include <boost/numeric/ublas/matrix.hpp> > #include <boost/numeric/ublas/io.hpp> > > typedef boost::numeric::ublas::array_adaptor<double> storage_t; > typedef boost::numeric::ublas::vector<double, storage_t> vct_t; > typedef boost::numeric::ublas::row_major rm_t; > typedef boost::numeric::ublas::matrix<double, rm_t, storage_t> matr_t; > > int main() { > > std::size_t n = 5; > std::size_t nxn = n * n; > > double *a = new double[nxn]; > storage_t st (nxn, a); > > vct_t v (nxn, st); > for (std::size_t i = 0; i < nxn; ++i) > v (i) = i + 0.1; > std::cout << v << std::endl; > > matr_t m (n, n, st); > std::cout << m << std::endl; > > for (std::size_t i = 0; i < n; ++i) > for (std::size_t j = 0; j < n; ++j) > m (i, j) = 10 * i + j + 0.1; > > std::cout << v << std::endl; > std::cout << m << std::endl; > > delete[] a; > } > ============================================== > [Note that BOOST_UBLAS_SIMPLE_ARRAY_ADAPTOR must > be defined. Otherwise array_adaptor<> uses boost::shared_array<> > which doesn't have operator+, which is in turn needed in some > functions -- Joerg, are you listening?] > > Hope this helps, > > fres > > > > Info: <http://www.boost.org> > Wiki: <http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl> > Unsubscribe: <mailto:boost-users-unsubscribe@xxxxxxxxxxxxxxx> > > > Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ > > > -- Stephen ------------------------ Yahoo! Groups Sponsor ---------------------~--> Get 128 Bit SSL Encryption! http://us.click.yahoo.com/CBxunD/vN2EAA/xGHJAA/EbFolB/TM ---------------------------------------------------------------------~-> Info: <http://www.boost.org> Wiki: <http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl> Unsubscribe: <mailto:boost-users-unsubscribe@xxxxxxxxxxxxxxx> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | MSVC++, bind and namespaces: 00316, Andre Hentz |
|---|---|
| Next by Date: | Re: ublas::matrix sharing storage with ublas::vector: 00316, jhr . walter |
| Previous by Thread: | Re: ublas::matrix sharing storage with ublas::vectori: 00316, Kresimir Fresl |
| Next by Thread: | Re: ublas::matrix sharing storage with ublas::vector: 00316, jhr . walter |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |