Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[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 <[email protected]>
To
[email protected]
Subject
Re: st: Why is Mata much slower than MATLAB at matrix inversion?
Date
Fri, 20 Jul 2012 15:47:58 -0400
Your matrix j isn't necessarily positive definite, although it is symmetric.
Does this significant speed advantage stand for real use cases? I
don't know of a use case where you need to invert a 2000 x 2000
matrix.
I think this is about all the the help that I can provide; I spend
most of my time outside of Mata. Hopefully one of the experts can shed
some light here.
Richard Herron
On Fri, Jul 20, 2012 at 3:18 PM, Patrick Roland
<[email protected]> wrote:
> The matrix formation takes a negligible amount of time. luinv() seems
> to be (much) faster than cholinv() even for positive definite
> matrices. Here's the code I used to check:
>
> timer_clear()
> mata
> m = runiform(2000,2000)
> j = m*m'
> timer_on(1)
> h = cholinv(j)
> timer_off(1)
> timer_on(2)
> p = luinv(j)
> timer_off(2)
> timer()
>
>
> On Fri, Jul 20, 2012 at 11:57 AM, Richard Herron
> <[email protected]> wrote:
>> -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
>> <[email protected]> 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
>>> <[email protected]> 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
>>>> <[email protected]>
>>>> 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/
> *
> * 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/