Considerare due ndarrays
di lunghezza n
, arr1
e arr2
. Sto calcolando la seguente somma dei prodotti, e di farlo num_runs
volte al benchmark:Doppia somma efficiente di prodotti
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
L'uscita è
total time for comprehension = 3.23097066953
total time for comprehension = 3.9045544426
in modo da utilizzare di lista appare più veloce.
C'è un'implementazione molto più efficiente, utilizzando le routine NumPy forse, per calcolare una tale somma di prodotti?
Questo potrebbe essere utile? https://stackoverflow.com/questions/9068478/how-to-parallelize-a-sum-calculation-in-python-numpy –
sembra molto rilevanti: [ 'moltiplicazione di matrici con iteratore dipendenza - NumPy'] (http: // stackoverflow.com/questions/36045510/matrix-multiplication-with-iterator-dependency-numpy). – Divakar