n
लंबाई n
, arr1
और arr2
पर दो ndarrays
पर विचार करें। मैं उत्पादों के निम्नलिखित राशि की गणना कर रहा हूँ, और यह बेंचमार्क num_runs
बार कर रही है:उत्पाद का कुशल डबल योग
import numpy as np
import time
num_runs = 1000
n = 100
arr1 = np.random.rand(n)
arr2 = np.random.rand(n)
start_comp = time.clock()
for r in xrange(num_runs):
sum_prods = np.sum([arr1[i]*arr2[j] for i in xrange(n)
for j in xrange(i+1, n)])
print "total time for comprehension = ", time.clock() - start_comp
start_loop = time.clock()
for r in xrange(num_runs):
sum_prod = 0.0
for i in xrange(n):
for j in xrange(i+1, n):
sum_prod += arr1[i]*arr2[j]
print "total time for loop = ", time.clock() - start_loop
उत्पादन
total time for comprehension = 3.23097066953
total time for comprehension = 3.9045544426
तो सूची समझ का उपयोग करते हुए तेजी से प्रकट होता है।
क्या इस तरह के उत्पादों की गणना करने के लिए शायद नम्पी रूटीन का उपयोग करके, अधिक कुशल कार्यान्वयन है?
a = np.sum(np.triu(arr1[:,None]*arr2[None,:],1))
b = np.sum([arr1[i]*arr2[j] for i in xrange(n) for j in xrange(i+1, n)])
print a == b # True
असल में, मैं arr1
और arr2
में जोड़ो में सभी तत्वों के उत्पाद की गणना numpy प्रसारण/vectorization की गति का लाभ लेने के के मूल्य का भुगतान कर रहा हूँ:
क्या यह उपयोगी हो सकता है? https://stackoverflow.com/questions/9068478/how-to-parallelize-a-sum-calculation-in-python-numpy –
बहुत प्रासंगिक लगता है: ['इट्रेटर निर्भरता के साथ मैट्रिक्स गुणा - NumPy'] (http: // stackoverflow.com/questions/36045510/matrix-multiplication-with-iterator-dependency-numpy)। – Divakar