Yürütme hızını değerlendirmek için timeit kitaplığını kullanacağız.
import timeit
import numpy as np
setup = """
import numpy as np
tmp = np.empty(shape=(1, 100))
values = [i for i in xrange(100)]
"""
stmt1 = """tmp[0, :] = values"""
stmt2 = """
for i, val in enumerate(values):
tmp[0, i] = val
"""
time1 = timeit.Timer(setup=setup, stmt=stmt1)
time2 = timeit.Timer(setup=setup, stmt=stmt2)
print "numpy way :", time1.timeit(number=100000)
print "Python way:", time2.timeit(number=100000)
Bunu test edebilirsiniz ve bu numpy döngüler iki kez daha hızlı olduğunu fark edecektir:
- numpy way : 0.97758197784423828
- Python way: 2.1633858680725098
(sınırsız tam sayılardır) values
içinde tamsayılar dönüştürülür bir faz orada olmasıdır 64 biti yüzer.
numpy way : 0.131125926971
Python way: 2.64055013657
Biz numpy döngüler 20 kez olduğunu fark:
İşte
values = np.array([i for i in xrange(100)], dtype=np.float64)
Edindiğim budur: döngü sadece hızını karşılaştırmak için, tip dönüşüm kurulumunda ön yapılabilir Python döngülerinden daha hızlı. Eğer vectorized computations in Python ...
için bakarsak
Sen daha fazla bilgi bulabilirsiniz bir şey * * Sadece kaynaklardan bakmak nasıl uygulandığını ilgileniyorsanız 'numpy' açık kaynak vardır. – Bakuriu
Cevap "buna bağlıdır". Numpy dağıtımında 'core/src/multiarray/sequence.c' dosyasına bakın ('array_assign_slice': https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/sequence.c#L91). Örneğinizde, kodun listeyi bir diziye dönüştürmeyeceğini düşünüyorum, ancak diğer durumlara bağlı olarak olabilir. –
@goncalopp evet hafıza kullanımı konusunda endişeliyim. – methane