performance when copying data from object array to cell
    5 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
Hi, I encounter performance issues, when copying data from an object property to a cell. My test class looks as follows:
 classdef Class < handle
    %CLASS Summary of this class goes here
    %   Detailed explanation goes here
    properties
        data = [1 2 3 4 5];
    end
    methods
    end
 end
My test script is the following:
 % settings
 N = 20000; % try 1000/10000
 % create N objects
 cls(N) = Class();
 % collect data
 tic;
 data = {cls.data};
 toc;
 % result:
 % N = 1000:     T = 0.008s
 % N = 10000:    T = 0.6s
 % N = 20000:    T = 2.4s
I'd expect linear scaling of computation time with array size. This however does not hold. Can someone give a hint about how to increase copy performance in this example? Is there a reason why it does not scale linearly?
Thanks, Daniel
0 Commenti
Risposta accettata
  Kirby Fears
      
 il 9 Gen 2017
        
      Modificato: Kirby Fears
      
 il 9 Gen 2017
  
      Darim,
Since you are not pre-allocating the data cell, Matlab is probably expanding the size of data iteratively. With pre-allocation the timing is linear. Try for yourself.
 % settings
 N = 20000; % try 1000/10000
 % create N objects
 cls(N) = Class();
 % collect data
 tic;
 data = cell(1,N);
 for i = 1:numel(cls),
     data{i} = cls(i).data;
 end
 toc;
8 Commenti
  Kirby Fears
      
 il 10 Gen 2017
				
      Modificato: Kirby Fears
      
 il 10 Gen 2017
  
			Adam's approach is definitely best for the latest Matlab release. As for 2015b, I don't see a direct way to dynamically access a single property from the class without suffering the string resolution time.
If you know all the properties you might want to extract from your class, and if the contents of those properties are not too large, you could extract all properties during the loop (using hard coded names) into a MxN cell array with corresponding collection of property name strings like {'prop1','prop2',...,'propN'}.
After the loop, you can extract a specific property from the MxN cell array as needed. The performance of this approach relies entirely on the class you're working with. It might be faster than dynamic property access in your case.
Più risposte (0)
Vedere anche
Categorie
				Scopri di più su JSON Format in Help Center e File Exchange
			
	Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


