मेरे पास यह कोड है जो मैंने पायथन / न्यूपे में लिखा है
from __future__ import division
import numpy as np
import itertools
n = 6
iters = 1000
firstzero = 0
bothzero = 0
""" The next line iterates over arrays of length n+1 which contain only -1s and 1s """
for S in itertools.product([-1, 1], repeat=n+1):
"""For i from 0 to iters -1 """
for i in xrange(iters):
""" Choose a random array of length n.
Prob 1/4 of being -1, prob 1/4 of being 1 and prob 1/2 of being 0. """
F = np.random.choice(np.array([-1, 0, 0, 1], dtype=np.int8), size=n)
"""The next loop just makes sure that F is not all zeros."""
while np.all(F == 0):
F = np.random.choice(np.array([-1, 0, 0, 1], dtype=np.int8), size=n)
"""np.convolve(F, S, 'valid') computes two inner products between
F and the two successive windows of S of length n."""
FS = np.convolve(F, S, 'valid')
if FS[0] == 0:
firstzero += 1
if np.all(FS == 0):
bothzero += 1
print("firstzero: %i" % firstzero)
print("bothzero: %i" % bothzero)
यह दो यादृच्छिक सरणियों के समापन की संख्या की गिनती कर रहा है, एक जो एक से अधिक लंबी है, एक विशेष संभावना वितरण के साथ, पहली स्थिति में 0 या दोनों पदों में 0 है।
मेरे पास एक दोस्त के साथ एक शर्त थी जो कहता है कि पायथन कोड लिखने के लिए एक भयानक भाषा है जिसमें तेजी से रहने की जरूरत है। यह मेरे कंप्यूटर पर 9s लेता है। उनका कहना है कि अगर इसे "उचित भाषा" में लिखा जाए तो इसे 100 गुना तेज बनाया जा सकता है।
चुनौती यह देखना है कि क्या यह कोड वास्तव में आपकी पसंद की किसी भी भाषा में 100 गुना तेजी से बनाया जा सकता है। मैं आपके कोड का परीक्षण करूंगा और अब से सबसे तेज एक सप्ताह जीतूंगा। अगर किसी को 0.09 से नीचे मिलता है तो वे स्वतः जीत जाते हैं और मैं हार जाता हूं।
स्थिति
- अजगर । एलिस्टेयर बक्सन द्वारा 30 गुना गति! हालांकि सबसे तेज़ समाधान नहीं है, यह वास्तव में मेरा पसंदीदा है।
- सप्तक । @Thethos द्वारा 100 गुना गति।
- जंग । @Dbaupp द्वारा 500 गुना गति।
- सी ++ । गाय साइरन द्वारा 570 गुना गति।
- सी । @27 द्वारा 727 बार गति।
- सी ++ । अविश्वसनीय रूप से @Stefan द्वारा तेजी से।
सबसे तेजी से समाधान अब समझदारी से करने के लिए बहुत तेजी से कर रहे हैं। इसलिए मैंने n को 10 तक बढ़ा दिया है और सबसे अच्छे लोगों की तुलना करने के लिए iters = 100000 सेट किया है। इस उपाय के तहत सबसे तेज हैं।
- सी । @ के द्वारा 7.5 से।
- सी ++ । 1s @ @tefan द्वारा।
माई मशीन द टाइमिंग मेरी मशीन पर चलाई जाएगी। यह एक मानक ubuntu एक AMD FX-8350 आठ-कोर प्रोसेसर पर स्थापित है। इसका मतलब यह भी है कि मुझे आपका कोड चलाने में सक्षम होना चाहिए।
पोस्ट का अनुसरण करें चूंकि यह प्रतियोगिता x100 स्पीडअप प्राप्त करने के लिए बहुत आसान थी, मैंने उन लोगों के लिए एक फॉलोअप पोस्ट किया है जो अपनी गति गुरु विशेषज्ञता का उपयोग करना चाहते हैं। देखें कि पायथन वास्तव में कितना धीमा है (भाग II)?