SORU
29 Kasım 2008, CUMARTESİ


Python ile daha hızlı olan: x**.5 veya matematik.Karekök(x)?

Bir süredir bunu merak ediyordum. Başlığı daha hızlı, gerçek işlevi ya da sadece yarım güç topluyor ki? demek gibi

GÜNCELLEME

Bu erken optimizasyon meselesi değil. Bu sadece temel kod aslında nasıl çalıştığı hakkında bir soru. Python nasıl çalışır teorisi nedir?

Gerçekten bu yöntem farkları öğrenmek istedim Guido van Rossum neden bir e-posta gönderdim.

Benim e-posta:

Python Kare Kök yapmak için en az 3 yolu vardır: matematik.Karekök, '**' operatörü ve pow(x,.5). Farkı olarak sadece merak ediyorum bunların her biri uygulanması. Hangi verimlilik söz konusu olduğunda, daha mı iyi?

Onun cevabı:

pow ve ** eşdeğer; matematik.Karekök karmaşık sayılar için işe yaramaz ve C Karekök bağlantılar() işlevi. Hangisi olarak daha hızlı, hiçbir fikrim yok...

CEVAP
29 Kasım 2008, CUMARTESİ


Yorumlar başı olarak, kodu güncelledik:

import time
import math

def timeit1():
    s = time.time()
    for i in xrange(750000):
        z=i**.5
    print "Took %f seconds" % (time.time() - s)

def timeit2(arg=math.sqrt):
    s = time.time()
    for i in xrange(750000):
        z=arg(i)
    print "Took %f seconds" % (time.time() - s)

timeit1()
timeit2()

Şimdi math.sqrt işlevi doğrudan yerel bir değişken, hızlı arama mümkün yani.

GÜNCELLEME:Python sürüm burada sorun gibi görünüyor. Düşündüm o timeit1 daha hızlı olurdu, ne zamandan beri python ayrıştırır "ı**.5" o bilir, sözdizimsel, hangi yöntemi çağrısı (__pow__ ya da bazı varyasyon), bu yüzden gitmesi gerekmez yoluyla yük arama math.sqrt varyant yok. Ama yanılıyor da olabilirim:

Python 2.5:0.224000 vs 0.191000

Python 2.6:0.139000 vs 0.195000

Ayrıca psyco görünüyor math.sqrt daha iyi başa çıkmak için:

2.5 Psyco 2.0 Python:0.043000 vs 0.109000

2.6 Psyco 2.0 Python:0.067000 vs 0.128000


| Interpreter    |  x**.5, |   sqrt, | sqrt faster, % |
|                | seconds | seconds |                |
|---------------- --------- --------- ----------------|
| Python 3.2rc1  |    0.32 |    0.27 |             19 |
| Python 3.1.2   |   0.136 |   0.088 |             55 |
| Python 3.0.1   |   0.155 |   0.102 |             52 |
| Python 2.7     |   0.132 |   0.079 |             67 |
| Python 2.6.6   |   0.121 |   0.075 |             61 |
| PyPy 1.4.1     |   0.083 |  0.0159 |            422 |
| Jython 2.5.1   |   0.132 |    0.22 |            -40 |
| Python 2.5.5   |   0.129 |   0.125 |              3 |
| Python 2.4.6   |   0.131 |   0.123 |              7 |
# TBLFM: $4=100*($2-$3)/$3;%.0f

Tablo sonuçları makinede üretilen:

$ uname -vms
Linux #42-Ubuntu SMP Thu Dec 2 02:41:37 UTC 2010 x86_64
$ cat /proc/cpuinfo | grep 'model name' | head -1
model name      : Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz

Sonuçlar üretmek için:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Justin Davis

    Justin Davis

    14 Ocak 2008
  • Mark Halberstadt

    Mark Halbers

    19 ŞUBAT 2010
  • Matthew Smith

    Matthew Smit

    24 Mayıs 2010