complex matrix operations
Hello, I am looking for a C++ library that has routines for a variety of complex matrix decompositions (eigen, cholesky, singular value etc) and even complex matrix inverse, principal matrix logarthm of a complex matrix etc. And the matrices which I am talking are pretty huge..can go upto 1024 x 1024 x 32. I have already found a library that can do all of the above..used it..it works fine..but a disadvantage is that it cannot handle multidimensional arrays. Now the question is, does Boost C++ library have functions for the above? Looking forward to a reply and thanks in advance Ramesh
On 08/31/11 08:04, sairamesh raghuraman wrote:
Hello,
I am looking for a C++ library that has routines for a variety of complex matrix decompositions (eigen, cholesky, singular value etc) and even complex matrix inverse, principal matrix logarthm of a complex matrix etc. And the matrices which I am talking are pretty huge..can go upto 1024 x 1024 x 32.
I have already found a library that can do all of the above..used it..it works fine..but a disadvantage is that it cannot handle multidimensional arrays. Now the question is, does Boost C++ library have functions for the above?
Looking forward to a reply and thanks in advance
Ramesh
Hi Ramesh, I'm not a multi_array expert, but I would guess that multi_array views: http://www.boost.org/doc/libs/1_47_0/libs/multi_array/doc/user.html#sec_view... could be used to return a 1020 x 1024 view of your 1024 x 1024 x 32 array, and that view could be passed to whatever you're now using to do the matrix decompositions. To be more concrete (an copy/pasting from the above user.html#sec_views and: http://www.boost.org/doc/libs/1_47_0/libs/multi_array/doc/user.html#sec_exam... ): // Create a 3D array that is 1024 x 1024 x 3 typedef boost::multi_array<double, 3> array_type; typedef array_type::index index; array_type myarray(boost::extents[1024][1024][3]); typedef boost::multi_array_types::index_range range; array_type::index_gen indices; unsigned const index3=0;//or 1 or 2 array_type::array_view<2>::type myview = myarray[ indices[range(0,1024)][range(0,1024)][index3] ]; for (array_type::index i = 0; i != 1024; ++i) for (array_type::index j = 0; j != 1024; ++j) assert(myview[i][j] == myarray[i][1][index3]); Then I guess myview could be passed to whatever existing matrix decomposition functions you have; however, I've not even compiled the above code. HTH -Larry
On Wed, Aug 31, 2011 at 6:04 AM, sairamesh raghuraman <generalsairamesh@gmail.com> wrote:
Hello,
I am looking for a C++ library that has routines for a variety of complex matrix decompositions (eigen, cholesky, singular value etc) and even complex matrix inverse, principal matrix logarthm of a complex matrix etc. And the matrices which I am talking are pretty huge..can go upto 1024 x 1024 x 32.
I have already found a library that can do all of the above..used it..it works fine..but a disadvantage is that it cannot handle multidimensional arrays. Now the question is, does Boost C++ library have functions for the above?
Looking forward to a reply and thanks in advance
Ramesh _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
I'm not positive if Eigen would fulfill your requirements, but it is pretty generic and quite well optimized. Brian
On 08/31/11 11:25, Brian Budge wrote:
Hello,
I am looking for a C++ library that has routines for a variety of complex matrix decompositions (eigen, cholesky, singular value etc) and even complex matrix inverse, principal matrix logarthm of a complex matrix etc. And the matrices which I am talking are pretty huge..can go upto 1024 x 1024 x 32. [snip] I'm not positive if Eigen would fulfill your requirements, but it is
On Wed, Aug 31, 2011 at 6:04 AM, sairamesh raghuraman <generalsairamesh@gmail.com> wrote: [snip] pretty generic and quite well optimized.
Brian
Hi Brian, Based on: 1024 x 1024 x 32 from Ramesh's post, I'm assuming he needs something more than a 2D array, and at least a 3D arraay; however, based on a quick look at: http://eigen.tuxfamily.org/dox/QuickRefPage.html#QuickRef_Types it appears Eigen only supplies 2D arrays. -regards, Larry
On Wed, Aug 31, 2011 at 10:15 AM, Larry Evans <cppljevans@suddenlink.net> wrote:
On 08/31/11 11:25, Brian Budge wrote:
Hello,
I am looking for a C++ library that has routines for a variety of complex matrix decompositions (eigen, cholesky, singular value etc) and even complex matrix inverse, principal matrix logarthm of a complex matrix etc. And the matrices which I am talking are pretty huge..can go upto 1024 x 1024 x 32. [snip] I'm not positive if Eigen would fulfill your requirements, but it is
On Wed, Aug 31, 2011 at 6:04 AM, sairamesh raghuraman <generalsairamesh@gmail.com> wrote: [snip] pretty generic and quite well optimized.
Brian
Hi Brian,
Based on:
1024 x 1024 x 32
from Ramesh's post, I'm assuming he needs something more than a 2D array, and at least a 3D arraay; however, based on a quick look at:
http://eigen.tuxfamily.org/dox/QuickRefPage.html#QuickRef_Types
it appears Eigen only supplies 2D arrays.
-regards, Larry
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
Ah, but the types held by the 2D matrix can be vector types. I'm unsure how a 3D matrix would work without knowing special information about each 2D element in any case.
Hi Larry/Brian, thanks for the replies...will come back in a few days... regards Ramesh On Wed, Aug 31, 2011 at 6:25 PM, Brian Budge <brian.budge@gmail.com> wrote:
Hello,
I am looking for a C++ library that has routines for a variety of complex matrix decompositions (eigen, cholesky, singular value etc) and even complex matrix inverse, principal matrix logarthm of a complex matrix etc. And
matrices which I am talking are pretty huge..can go upto 1024 x 1024 x
On Wed, Aug 31, 2011 at 6:04 AM, sairamesh raghuraman <generalsairamesh@gmail.com> wrote: the 32.
I have already found a library that can do all of the above..used it..it works fine..but a disadvantage is that it cannot handle multidimensional arrays. Now the question is, does Boost C++ library have functions for
the
above?
Looking forward to a reply and thanks in advance
Ramesh _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
I'm not positive if Eigen would fulfill your requirements, but it is pretty generic and quite well optimized.
Brian _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
On 8/31/2011 6:04 AM, sairamesh raghuraman wrote: ...
I have already found a library that can do all of the above..used it..it works fine..but a disadvantage is that it cannot handle multidimensional arrays.
Out of curiosity and in case it is relevant for a reply, what library are you using? eg
Hi... As of now, I am using ALGLIB....it has routines for almost all the operations i need for my project...The only reason i am asking for a library that can handle multi-dimensional arrays is to reduce the complexity of code a little bit. (which with those operations are complex anyway)..But as one of commented, the operations are for 2d matrices..And the application is raw image processing concerned with MRI...and here in MRI, the number of dimensions can go upto 7 or 8 in a matrix (rows, columns, channels, sets, echoes, phases, averages, measurements, partitions, slices...and it can go on)..with the datalength sometimes being, 1024 x 1024 x 32 x 10 x 5 x 20 x 20 x 30. (this is actually an extreme case)..but usually standard datasets can be easily 512 x 512 x 32 x 20.. so in this library (ALGLIB) to handle such datasets, which I receive from the scanner, i put them all in a huge 2D matrix..and access them using routines, having for loops..and this is getting more complex with larger dimensions.. thanks and regards Ramesh On Thu, Sep 1, 2011 at 7:40 AM, egoots <egoots@gmail.com> wrote:
On 8/31/2011 6:04 AM, sairamesh raghuraman wrote: ...
I have already found a library that can do all of the above..used it..it
works fine..but a disadvantage is that it cannot handle multidimensional arrays.
Out of curiosity and in case it is relevant for a reply, what library are you using?
eg
______________________________**_________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/**mailman/listinfo.cgi/boost-**users<http://lists.boost.org/mailman/listinfo.cgi/boost-users>
On Fri, Sep 2, 2011 at 00:40, sairamesh raghuraman <generalsairamesh@gmail.com> wrote:
Hi...
As of now, I am using ALGLIB....it has routines for almost all the operations i need for my project...The only reason i am asking for a library that can handle multi-dimensional arrays is to reduce the complexity of code a little bit. (which with those operations are complex anyway)..But as one of commented, the operations are for 2d matrices..And the application is raw image processing concerned with MRI...and here in MRI, the number of dimensions can go upto 7 or 8 in a matrix (rows, columns, channels, sets, echoes, phases, averages, measurements, partitions, slices...and it can go on)..with the datalength sometimes being, 1024 x 1024 x 32 x 10 x 5 x 20 x 20 x 30. (this is actually an extreme case)..but usually standard datasets can be easily 512 x 512 x 32 x 20.. so in this library (ALGLIB) to handle such datasets, which I receive from the scanner, i put them all in a huge 2D matrix..and access them using routines, having for loops..and this is getting more complex with larger dimensions..
thanks and regards Ramesh
so it sounds like you need a more transparent / easier to understand storage system. I'm also not a multi_array expert, but you might want to look at Larry Evans' suggestion and see how that storage container interacts with your library. Best, Dee
On 09/01/11 11:40, sairamesh raghuraman wrote:
Hi...
As of now, I am using ALGLIB....it has routines for almost all the operations i need for my project...The only reason i am asking for a library that can handle multi-dimensional arrays is to reduce the complexity of code a little bit. (which with those operations are complex anyway)..But as one of commented, the operations are for 2d matrices..And the application is raw image processing concerned with MRI...and here in MRI, the number of dimensions can go upto 7 or 8 in a matrix (rows, columns, channels, sets, echoes, phases, averages, measurements, partitions, slices...and it can go on)..with the datalength sometimes being, 1024 x 1024 x 32 x 10 x 5 x 20 x 20 x 30. (this is actually an extreme case)..but usually standard datasets can be easily 512 x 512 x 32 x 20.. so in this library (ALGLIB) to handle such datasets, which I receive from the scanner, i put them all in a huge 2D matrix..and access them using routines, having for loops..and this is getting more complex with larger dimensions..
thanks and regards Ramesh
Another post: http://thread.gmane.org/gmane.comp.lib.boost.user/63640/focus=63662 was also asking about medical image processing. Maybe you and the author of that other post could collaborate. In that post he was wanting to use variants because the number of dimensions was not known until runtime. Is that your situation? If so then you might be interested in this: http://svn.boost.org/svn/boost/sandbox/variadic_templates/sandbox/array_dyn/ which, unlike multi_array, allows the dimensions to be specified at runtime and I don't think would suffer as much rumtime overhead as Alle's incomplete attempt to use variants. HTH. -regards, Larry
participants (5)
-
Brian Budge
-
Diederick C. Niehorster
-
egoots
-
Larry Evans
-
sairamesh raghuraman