Rozważmy dwie ndarrays
o długości n
, arr1
i arr2
. Mam następujące obliczenia sumy produktów, a robi to num_runs
razy do odniesienia:Efektywna podwójna suma produktów
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
Wyjście jest
total time for comprehension = 3.23097066953
total time for comprehension = 3.9045544426
więc korzystanie listowych pojawia się szybciej.
Czy istnieje o wiele bardziej wydajna implementacja, używając procedur Numpy, aby obliczyć taką sumę produktów?
Czy to może być przydatne? https://stackoverflow.com/questions/9068478/how-to-parallelize-a-sum-calculation-in-python-numpy –
Wydaje się bardzo istotne: ['Mnożenie macierzy z zależnością iteracyjną - NumPy'] (http: // stackoverflow.com/questions/36045510/matrix-multiplication-with-iterator-dependency-numpy). – Divakar