Son zamanlarda 2 listelerinin çarpma istedik THIS soruya cevap bazı kullanıcı düzgün bir yol olduğunu düşünüyorum hangi madende yanında, numpy kullanarak aşağıdaki yolu önerdi Bunun gibi performans. herhangi bir şekilde başka bir yanıt listesi anlama kullanımını içeren bir çözüm:Niçin liste kavraması, çarpım dizileri için numpy'den çok daha hızlıdır? Ayrıca ben <code>aray.resize()</code> aynı vardır bulundu</p> <pre><code>(a.T*b).T </code></pre> <p>:
from timeit import timeit
s1="""
a=[[2,3,5],[3,6,2],[1,3,2]]
b=[4,2,1]
[[m*n for n in second] for m, second in zip(b,a)]
"""
s2="""
a=np.array([[2,3,5],[3,6,2],[1,3,2]])
b=np.array([4,2,1])
(a.T*b).T
"""
print ' first: ' ,timeit(stmt=s1, number=1000000)
print 'second : ',timeit(stmt=s2, number=1000000,setup="import numpy as np")
sonuç:
first: 1.49778485298
second : 7.43547797203
[[m*n for n in second] for m, second in zip(b,a)]
Ama kriter sonra liste anlama çok daha hızlı Numpy daha gerçekleştirir gördük
Görebildiğiniz gibi yaklaşık 5 kat daha hızlıdır. Liste anlama hala yanında comprehensions C gerçekleştirir listelemek bu noktanın 5 sefer faster.So oldua=np.array([[2,3,5],[3,6,2],[1,3,2]])
b=np.array([[4],[2],[1]])
a*b
burada 2 iç içe döngü kullandı: ama en çok şaşırtan şey onun daha hızlı, devrik kullanmadan şu kodu olmasıydı ve bir
zip
işlevi Yani neden ne olabilir? Numpy içinde
*
operasyon nedeniyle mi?
Ayrıca timeit
ile ilgili bir sorun olmadığını da unutmayınbölümünü setup
ürününe ekledim.
Ben de fark yapmaz hala azaldıkça ama daha büyük Arras ile çalıştı duygusu:
s1="""
a=[[2,3,5],[3,6,2],[1,3,2]]*10000
b=[4,2,1]*10000
[[m*n for n in second] for m, second in zip(b,a)]
"""
s2="""
a=np.array([[2,3,5],[3,6,2],[1,3,2]]*10000)
b=np.array([4,2,1]*10000)
(a.T*b).T
"""
print ' first: ' ,timeit(stmt=s1, number=1000)
print 'second : ',timeit(stmt=s2, number=1000,setup="import numpy as np")
sonucu: numpy Dizilerin
first: 10.7480301857
second : 13.1278889179
.... Daha büyük diziler deneyin? – NightShadeQueen
@NightShadeQueen Yine aynı sonucu denedim – Kasramvd
@Kasramvd daha ne kadar denediniz? – Falmarri