logical matrix divided by double matrix is slow
    4 views (last 30 days)
  
       Show older comments
    
    Chaoyang Jiang
 on 21 May 2018
  
    
    
    
    
    Commented: Image Analyst
      
      
 on 21 May 2018
            a=logical(12,90,111);
b=randi(100,[12,90,111]);
c = a ./ (b+1e-10).
This line seems a very simple operation but it is so time-consuming. I am wondering if any speed up can be done?

0 Comments
Accepted Answer
  Walter Roberson
      
      
 on 21 May 2018
        You are executing that line 8675040 times and it is taking 84367.53 seconds to do so, which is an average of 0.00972531884579207 seconds per iteration. Is that slow? 12*90*111 = 119880 divisions are done each time, for an average of 8.1125449164098e-08 seconds per division. Is that slow?
The code internally has to do
double(a) ./ (b+1e-10)
which is an extra operation compared to the case where a is already double. Those extra operations take time.
That said, my tests do tend to suggest that doing the double() yourself is faster, by up to a factor of 5. Try
c = double(a) ./ (b+1e-10);
More Answers (1)
  Image Analyst
      
      
 on 21 May 2018
        What is the last line in your post???
When I run your code I get this:
Error using logical
Too many input arguments.
Error in test2 (line 1)
a=logical(12,90,111);
When I do this:
a=false(12,90,111);
b=randi(100,[12,90,111]);
tic;
c = a ./ (b+1e-10);
toc
I get
Elapsed time is 0.000511 seconds.
which seems pretty fast to me. What are you doing differently?
2 Comments
  Image Analyst
      
      
 on 21 May 2018
				Well change it to false, which is also a logical, and it will run so much faster.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

