aboutsummaryrefslogtreecommitdiff
path: root/qolab
diff options
context:
space:
mode:
authorEugeniy E. Mikhailov <evgmik@gmail.com>2022-07-06 23:47:06 -0400
committerEugeniy E. Mikhailov <evgmik@gmail.com>2022-07-06 23:47:06 -0400
commit70cc272cfc9a08ea45a0bf8f6efdf69e4f606b7f (patch)
tree87c4b3d534b6ec1b8d6281eb3207a6c67352455c /qolab
parentb7c4c06d86b07e24f1fbdca01234cd37ce6a0ec0 (diff)
downloadqolab-70cc272cfc9a08ea45a0bf8f6efdf69e4f606b7f.tar.gz
qolab-70cc272cfc9a08ea45a0bf8f6efdf69e4f606b7f.zip
drastic speedup of loadTrace
old way of appending line by line to numpy array was super inefficient, now we read it with numpy 'genfromtxt' which is drastically faster
Diffstat (limited to 'qolab')
-rw-r--r--qolab/data/trace.py24
1 files changed, 13 insertions, 11 deletions
diff --git a/qolab/data/trace.py b/qolab/data/trace.py
index 67d9301..700105a 100644
--- a/qolab/data/trace.py
+++ b/qolab/data/trace.py
@@ -1,6 +1,5 @@
from qolab.file_utils import save_table_with_header
import datetime
-import csv
import numpy as np
import yaml
@@ -19,18 +18,21 @@ def from_timestamps_to_dates(timestamps):
def loadTraceRawHeaderAndData(fname):
headerstr=[]
data = None
- with open(fname) as csvfile:
- rowreader = csv.reader(csvfile, delimiter='\t')
- for row in rowreader:
- if row[0][0:2]=='% ':
- headerstr.append(row[0][2:])
+ with open(fname) as tracefile:
+ # Reading yaml header prefixed by '% '
+ # It sits at the top and below is just data in TSV format
+ while True:
+ ln = tracefile.readline()
+ if ln[0:2]=='% ':
+ headerstr.append(ln[2:])
else:
- rdata = np.array(row, dtype=float)
- if data is None:
- data=rdata
- else:
- data=np.vstack((data,rdata))
+ break
header=yaml.load(str.join('\n', headerstr), Loader=yaml.BaseLoader)
+ # now we load the data itself
+ data=np.genfromtxt(fname, comments='%', delimiter='\t')
+ # Note: panda reads csv faster by factor of 8, but it needs column names provided
+ # otherwise it eats the first data line and makes meaningless column names from it
+ # data=panda.read_csv('/home/evmik/hopping_trace_20220706_02141.dat', comment='%', delimiter='\t')
return(header, data)
def loadTrace(fname):