Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I have to compute the covariance of 50 very large integer matrices (2500x2000 elements). However, according to my estimation this will take around 10 days. Do you have any ideas how to speed things up?

share|improve this question
    
A 5000x5000 matrix calculates under 10s for me Covariance[RandomReal[1, {5000, 5000}]]; // AbsoluteTiming What type of elements do you have? –  ssch Nov 14 '13 at 20:58
    
How did you estimate it will takes 10 days per matrix? (btw, 10 days using which type of computer? since the CPU type and amount of RAM should make some difference) –  Nasser Nov 14 '13 at 21:01
    
@Nasser Sorry, I made a mistake; it's 10 days altogether. I compute the covariance of 100 smaller, and scaled everything assuming linearity. –  phidelio Nov 14 '13 at 21:10
    
@ssch Well, maybe it depends on the matrix. I take the data from a stack of 50 b/w tiff files. Could you try with random tiff image? –  phidelio Nov 14 '13 at 21:17
1  
@phidelio Make sure your matrix contains only machine precision numbers, i.e. use N[matrix] instead of matrix. –  Szabolcs Nov 14 '13 at 21:26

1 Answer 1

up vote 8 down vote accepted

If the matrix contains exact integers, Mathematica will compute an exact result (in terms of exact rational numbers). This is very slow.

If you convert your matrix to (inexact) machine precision numbers, the calculation will be much much faster.

Use Covariance@N[matrix] instead of Covariance[matrix].

share|improve this answer
    
Thanks, I will try it tomorrow and let you know (I don't have Mathematica on this computer). –  phidelio Nov 14 '13 at 22:14
    
This definitely works. Thanks a lot. –  phidelio Nov 15 '13 at 21:12

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.