Leo Kislov wrote: > > Peter Otten wrote: >> Peter Otten wrote: >> >> > HYRY wrote: >> > >> >> I want to join two mono wave file to a stereo wave file by only using >> >> the default python module. >> >> Here is my program, but it is much slower than the C version, so how >> >> can I increase the speed? >> >> I think the problem is at line #1, #2, #3. >> > >> >> oarray = array.array("h", [0]*(len(larray)+len(rarray))) #1 >> > >> > ITEMSIZE = 2 >> > size = ITEMSIZE*(len(larray) + len(rarray)) >> > oarray = array.array("h") >> > oarray.fromstring("\0" * size) >> > >> > may be a bit faster. >> >> Confirmed: >> >> $ python2.5 -m timeit -s'from array import array; N = 10**6' 'a = >> array("h"); a.fromstring("\0"*(2*N))' >> 100 loops, best of 3: 9.68 msec per loop >> $ python2.5 -m timeit -s'from array import array; N = 10**6' 'a = >> array("h", >> [0]*N);' >> 10 loops, best of 3: 199 msec per loop > > Funny thing is that using huge temporary string is faster that > multiplying small array: > > C:\Python25>python -m timeit -s"from array import array; N = 10**6" "a > =array('h'); a.fromstring('\0'*(2*N))" > 100 loops, best of 3: 9.57 msec per loop > > C:\Python25>python -m timeit -s"from array import array; N = 10**6" "a > = array('h','\0\0'); a*N" > 10 loops, best of 3: 28.4 msec per loop > > Perhaps if array multiplication was as smart as string multiplication > then array multiplication version would be the fastest.
That will not suffice: $ python2.5 -m timeit -s'from array import array; from itertools import repeat; N = 10**6; init = [0]*N' 'array("h", init)' 10 loops, best of 3: 130 msec per loop $ python2.5 -m timeit -s'from array import array; from itertools import repeat; N = 10**6; init = "\n"*(2*N)' 'array("h").fromstring(init)' 100 loops, best of 3: 5 msec per loop A big chunk of the time is probably consumed by "casting" the list items. Perhaps an array.fill(value, repeat) method would be useful. Peter -- http://mail.python.org/mailman/listinfo/python-list