ojii / pymaging

Pure Python imaging library with Python 2.6, 2.7, 3.1+ support

Home Page:http://pymaging.rtfd.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

optimize array creation

ojii opened this issue · comments

According to @alex array.array('B', [0]) * bignum is faster than array.array('B', [0] * bigname). Need to fix that.

(see https://twitter.com/alex_gaynor/status/265890088251174913)

Relevant benchmarks are relevant:

Alexs-MacBook-Pro-2:rdio alex_gaynor$ python -mtimeit -s "import array" "array.array('d', [0] * 1000)"
10000 loops, best of 3: 75.8 usec per loop
Alexs-MacBook-Pro-2:rdio alex_gaynor$ python -mtimeit -s "import array" "array.array('d', [0]) * 1000"
100000 loops, best of 3: 5.17 usec per loop
Alexs-MacBook-Pro-2:rdio alex_gaynor$ pypy -mtimeit -s "import array" "array.array('d', [0] * 1000)"
10000 loops, best of 3: 27.2 usec per loop
Alexs-MacBook-Pro-2:rdio alex_gaynor$ pypy -mtimeit -s "import array" "array.array('d', [0]) * 1000"
100000 loops, best of 3: 5.03 usec per loop

The use case in my case (Image.new) is even much more of a speedup:

jonas:~ python -mtimeit -s "import array" "array.array('d', [1,2,3] * 1000)"
10000 loops, best of 3: 120 usec per loop
jonas:~ python -mtimeit -s "import array" "array.array('d', [1,2,3]) * 1000"
100000 loops, best of 3: 5.48 usec per loop
jonas:~ pypy -mtimeit -s "import array" "array.array('d', [1,2,3] * 1000)"
10000 loops, best of 3: 65.5 usec per loop
jonas:~ pypy -mtimeit -s "import array" "array.array('d', [1,2,3]) * 1000"
100000 loops, best of 3: 4.89 usec per loop