numpy diziler toplanmasıyla. hızla ı numpy diziler listesinin öğeye göre toplamını yapmak istediğimizi varsayalım öğeye göre
timeit.timeit('sum(array(tosum), axis=0)',
setup='from numpy import sum; from __main__ import tosum, array',
number=10000)
75.02289700508118
timeit.timeit('sum(tosum, axis=0)',
setup='from numpy import sum; from __main__ import tosum',
number=10000)
78.99106407165527
azaltın
(büyüklük yaklaşık iki siparişlerin ayarlamak için) daha hızlıdır:timeit.timeit('reduce(add,tosum)',
setup='from numpy import add; from __main__ import tosum',
number=10000)
1.131795883178711
Hatta azaltmak gibi görünüyor üzerinde anlamlı bir kurşun sahiptir numpy.sum korkunç gibi görünüyor olmayan numpy toplamı (1E6 içindir bu yukarıdaki kez çalışır ziyade 1E4 unutmayın):
timeit.timeit('reduce(add,tosum)',
setup='from numpy import add; from __main__ import tosum',
number=1000000)
109.98814797401428
timeit.timeit('sum(tosum)',
setup='from __main__ import tosum',
number=1000000)
125.52461504936218
orada denemelisiniz diğer yöntemler musunuz? Sıralamayı açıklayan var mı? Liste ilk önce bir numpy diziye açıksa
Düzenleme
numpy.sum kesinlikle daha hızlıdır: Ancak
tosum2 = array(tosum)
timeit.timeit('sum(tosum2, axis=0)',
setup='from numpy import sum; from __main__ import tosum2',
number=10000)
1.1545608043670654
, bir defasında bir miktar yapıyor ilgileniyorum sadece Bu yüzden diziyi numpy dizisine dönüştürmek hala gerçek bir performans cezasına çarptırılır.
Bu np.sum'un ilk önce oluşturduğunu ve dizileceğini ve daha sonra performansının düşük olduğunu açıklayacak şekilde özetlediğini tahmin ediyorum ... Bir np'yi geçmiş olsaydınız en hızlı olacağını tahmin ediyorum. ndarray ile başlayacak. – mgilson
Ve 'sum' içinde gizli olan' 0 + tosum [0] 'atladığından beri, toplamın 1/11'e düşmesini beklerim. – mgilson
Bu mantıklı. Bir dizi ayrı diziyle başlıyorum, bu yüzden onları bir numpy dizisine dönüştürmek, ilk olarak benim için yaptıklarının aynı performans cezasına çarpacaktır (çünkü sadece bir kere toplam yapıyorum). – lnmaurer