[Numpy-discussion] numpy.append & numpy.where vs list.append and brute iterative for loop
Sturla Molden
sturla at molden.no
Thu Jan 27 18:54:03 EST 2011
Den 28.01.2011 00:33, skrev Christopher Barker:
>
> hmmm - that doesn't seem quite right -- lists still have to
> re-allocate and copy, they just do it every n times (where n grows
> with the list), so I wouldn't expect exactly O(N).
Lists allocate empty slots at their back, proportional to their size. So
as lists grows, re-allocations become rarer and rarer. Then on average
the complexity per append becomes O(1), which is the "amortised"
complexity. Appending N items to a list thus has the amortized
complexity O(N). The advantage of this implementation over linked lists
is that indexing will be O(1) as well.
NumPy arrays are designed to be fixed size, and not designed to amortize
the complexity of appends. So if you want to use arrays as efficient
re-sizeable containers, you must code this logic yourself.
Sturla
More information about the NumPy-Discussion
mailing list