@@ -34,7 +34,7 @@ class PrincipalComponent(object):
3434 performed.
3535 """
3636 def __init__ (self , L , block_val = None , num_blocks = 10 , data_dir = None ,
37- save_dir = None , save = True , verbose = False ):
37+ save_dir = None , save = True , load = False , verbose = False ):
3838 self ._L = L
3939 self ._block_val = block_val
4040 self ._num_blocks = num_blocks
@@ -74,12 +74,12 @@ def __init__(self, L, block_val=None, num_blocks=10, data_dir=None,
7474 ])
7575 temp_strings = [i .split ('_' )[- 1 ].rstrip ('.txt' ) for i in config_files ]
7676 self ._temp_strings = [i .rstrip ('0' ) for i in temp_strings ]
77-
78- self ._PCA ()
79- # self._leading_eig_val_avg = self.average_data()
80- # self._leading_eig_val_err = list( self._err.values() )
81- if save :
82- self ._save ()
77+ if not load :
78+ self ._PCA ()
79+ if save :
80+ self ._save ( )
81+ else :
82+ self ._load ()
8383
8484 def _get_data (self , _file = None ):
8585 """ Read in configuration data from file. """
@@ -145,28 +145,10 @@ def _PCA(self, num_components=1):
145145 self ._err [key ] = jackknife_err (y_i = eig_pairs_rs ,
146146 y_full = eig_pairs [0 ][0 ],
147147 num_blocks = self ._num_blocks )
148- # self._eig_vals = OrderedDict(
149- # self._eig_vals.items(), key=lambda t: t[0]
150- # )
151- # self._leading_eig_val = OrderedDict(
152- # self._leading_eig_val.items(), key=lambda t: t[0]
153- # )
154-
155- # def average_data(self):
156- # """ Average leading eigenvalue data and use jackknife resampling for
157- # error bars.
158- # """
159- # leading_eig_val_avg = []
160- # #leading_eig_val_err = []
161- # for val in self._leading_eig_val.values():
162- # if
163- # leading_eig_val_avg.append(np.mean(val))
164- # # leading_eig_val_err.append(
165- # # jackknife_stats(np.array(val), np.std)[2]
166- # # t
167- # return leading_eig_val_avg#, leading_eig_val_err
168148
169149 def _save (self ):
150+ """Save PCA results from calculation to .txt file to avoid repeating
151+ calculation."""
170152 if not os .path .exists (self ._save_dir ):
171153 os .makedirs (self ._save_dir )
172154 save_file = self ._save_dir + 'leading_eigenvalue_{}.txt' .format (self ._L )
@@ -183,6 +165,24 @@ def _save(self):
183165 for key , val in self ._eig_vals .items ():
184166 f .write ("{} {} {}\n " .format (key , val [0 ][0 ], self ._err [key ]))
185167
168+ def _load (self , data_dir = None ):
169+ """Load PCA results from .txt file instead of recalculating results."""
170+ if data_dir is None :
171+ data_file = (
172+ self ._save_dir + 'leading_eigenvalue_{}.txt' .format (self ._L )
173+ )
174+ try :
175+ raw_data = pd .read_csv (data_file , engine = 'c' , header = None ,
176+ delim_whitespace = True ).values
177+ except :
178+ print ("Unable to read from {}" .format (data_file ))
179+ raise
180+ for row in raw_data :
181+ key = str (row [0 ])
182+ self ._eig_vals [key ] = [row [1 ], row [2 ]]
183+ self ._err [key ] = row [2 ]
184+
185+
186186def main (argv ):
187187 parser = argparse .ArgumentParser ()
188188
0 commit comments