Use python array instead of numpy array for appending data.

This commit is contained in:
Niels Müller
2016-10-07 10:21:04 +02:00
parent 9cf16bc602
commit 108200cea8

View File

@ -59,39 +59,23 @@ cdef class EDRFile:
types.append((self.etypes[i].name.decode(), self.etypes[i].unit.decode())) types.append((self.etypes[i].name.decode(), self.etypes[i].unit.decode()))
return types return types
def read(self, steps=None): def read(self):
cdef: cdef:
t_enxframe *frame t_enxframe *frame
np.ndarray[float, ndim=2] energies
np.ndarray[float, ndim=1] times
if steps is None:
energies = np.empty((1,self.n_etypes), np.float32)
times = np.empty((1,), np.float32)
else:
energies = np.empty((steps,self.n_etypes), np.float32)
times = np.empty((steps,), np.float32)
snew(frame, 1) snew(frame, 1)
energies = array('f')
times = array('f')
i = 0 i = 0
while True: while do_enx(self.efile, frame):
cont = do_enx(self.efile, frame) times.append(frame.t)
for j in range(frame.nre): for j in range(frame.nre):
energies[i, j] = frame.ener[j].e energies.append(frame.ener[j].e)
times[i] = frame.t
if cont:
i += 1
if len(energies) <= i:
energies = np.resize(energies, (len(energies)+1, self.n_etypes))
times = np.resize(times, (len(times)+1,))
else:
break
free_enxframe(frame) free_enxframe(frame)
sfree(frame) sfree(frame)
return times, energies return np.array(times), np.array(energies).reshape(len(times), self.n_etypes)
def __init__(self, filename): def __init__(self, filename):
@ -101,7 +85,6 @@ cdef class EDRFile:
self.etypes = NULL self.etypes = NULL
do_enxnms(self.efile, &self.n_etypes, &self.etypes) do_enxnms(self.efile, &self.n_etypes, &self.etypes)
print(self.n_etypes)
#do_enx(self.efile, self.frames) #do_enx(self.efile, self.frames)