Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down at the end of May, and its replacement, statalist.org is already up and running.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: Why is Mata much slower than MATLAB at matrix inversion?


From   Richard Herron <richard.c.herron@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: Why is Mata much slower than MATLAB at matrix inversion?
Date   Fri, 20 Jul 2012 14:57:39 -0400

-cholinv()- would be faster if you met the symmetric, positive
definite requirement. I am also surprised that Mata isn't competitive
with Matlab on matrix inversion (I thought they all used the same
algorithms).

Have you tried taking the matrix generation step out of the timing
block? Is there a chance that the matrix formation process if
different between the two (Sorry, I don't have Stata and Matlab
installs handy).

Richard Herron


On Fri, Jul 20, 2012 at 2:50 PM, Patrick Roland
<patrick.rolande@gmail.com> wrote:
> luinv() takes about 15 times longer than MATLAB's inverse function.
> Maybe I'm being naive, but why wouldn't all serious matrix languages
> invert matrices at roughly the same speed? Don't they use the same
> linear algebra routines?
>
> Another curiosity is that the luinv() is more general and faster. Why
> would anyone want to use cholinv()?
>
> On Fri, Jul 20, 2012 at 9:17 AM, Richard Herron
> <richard.c.herron@gmail.com> wrote:
>> Patrick, -cholinv()- requires a symmetric positive definite matrix,
>> but I don't think you M matrix is PD. Try -luinv()-.
>>
>> Although for most use cases your matrix will be symmetric, right? Then
>> you should use -invsym()- or a solve function.
>>
>> Richard Herron
>>
>>
>> On Thu, Jul 19, 2012 at 9:22 PM, Patrick Roland
>> <patrick.rolande@gmail.com>
>> wrote:
>>>
>>> I'm comparing two code snippets. In Mata:
>>>
>>> mata
>>> timer_on(1)
>>> M = rnormal(2000,2000,0,1)
>>> J = cholinv(M)
>>> timer_off(1)
>>> timer()
>>> end
>>>
>>> In MATLAB:
>>>
>>> tic;
>>> M = normrnd(0,1,2000,2000);
>>> J = inv(M);
>>> toc;
>>>
>>> I find that MATLAB is about 20 times faster (1.5 seconds vs 30
>>> seconds). Is there something I'm missing here, or is MATLAB just much
>>> faster at matrix inversion? I'd much prefer to use Mata because of
>>> integration with Stata, but if the speed difference is going to be on
>>> this order then MATLAB is more attractive.
>>>
>>>
>>> Any input here is appreciated.
>>> *
>>> *   For searches and help try:
>>> *   http://www.stata.com/help.cgi?search
>>> *   http://www.stata.com/support/statalist/faq
>>> *   http://www.ats.ucla.edu/stat/stata/
>> *
>> *   For searches and help try:
>> *   http://www.stata.com/help.cgi?search
>> *   http://www.stata.com/support/statalist/faq
>> *   http://www.ats.ucla.edu/stat/stata/
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/statalist/faq
> *   http://www.ats.ucla.edu/stat/stata/
*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index