On 2/13/07, Mark Janikas <[EMAIL PROTECTED]> wrote:

Good call Stefan,

I decoupled the timing from the application (duh!) and got better results:

from numpy import *
import numpy.random as RAND
import time as TIME

x = RAND.random(1000)
xl = x.tolist()

t1 = TIME.clock()
xStringOut = [ str(i) for i in xl ]
xStringOut = " ".join(xStringOut)
f = file('blah.dat','w'); f.write(xStringOut)
t2 = TIME.clock()
total = t2 - t1
t1 = TIME.clock()
f = file('blah.bwt','wb')
xBinaryOut = x.tostring()
f.write(xBinaryOut)
t2 = TIME.clock()
total1 = t2 - t1

>>> total
0.00661
>>> total1
0.00229

Printing x directly to a string took REALLY long: f.write(str(x)) = 0.0258

The problem therefore, must be in the way I am appending values to the
empty arrays.  I am currently using the append method:

myArray = append(myArray, newValue)

Or would it be faster to concat or use a list append then convert?


I am going to guess that a list would be faster for appending. Concat and, I
suspect, append make new arrays for each use, rather like string
concatenation in Python. A list, on the other hand, is no doubt optimized
for adding new values. Another option might be using PyTables with
extensible arrays. In any case, a bit of timing should show the way if the
performance is that crucial to your application.

Chuck
_______________________________________________
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to