A Diumenge 19 Setembre 2004 19:35, Timo Korvola va escriure:
My code for reading a triangulation from a file went roughly like this:
coord = zeros( (n_vertices, 2), Float) for v in n_vertices: coord[ v, :] = [float( s) for s in file.readline().split()]
This was taking quite a bit of time with ~50000 vertices and ~100000 elements, for which three integers per element are read in a similar manner. I found it was faster to loop explicitly:
coord = zeros( (n_vertices, 2), Float) for v in n_vertices: for j, c in enumerate( [float( s) for s in file.readline().split()]): coord[ v, j] = c
Morally this uglier code with an explicit loop should not be faster but it is with Numarray. With Numeric assignment from a list has reasonable performance. How can it be improved for Numarray?
If you want to achieve fast I/O with both numarray/Numeric, you may want to try PyTables (wwww.pytables.org). It supports numarray objects natively, so you should get pretty fast performance. At the beginning, you will need to export your data to a PyTables file, but then you can read data as many times as you want from it.