Qual è il modo più veloce per estendere la parte anteriore di un array in python? Diciamo che ho 2 matrici: a e b. Voglio fare il modo più veloce di a = b + a (b non dovrebbe cambiare).Elenco rapido python anteriore che si estende
mio piccolo benchamarks:
di test 1:
a,b = [],[]
for i in range(0,100000):
a.append(i)
b.append(i)
def f(a,b):
for i in range(0,100):
a=a+b
import cProfile
cProfile.run('f(a,b)')
tempo: ~ 12 s
test 2:
a,b = [],[]
for i in range(0,100000):
a.append(i)
b.append(i)
def f(a,b):
for i in range(0,100):
a[0:0] = b
import cProfile
cProfile.run('f(a,b)')
tempo: ~ 1.5s
test3:
a,b = [],[]
for i in range(0,100000):
a.append(i)
b.append(i)
lenb = len(b)
def f(a,b):
for i in range(0,100):
b.extend(a)
# do something with b
b = b[:lenb]
import cProfile
cProfile.run('f(a,b)')
tempo: ~ 0.4s
ma penso che dovrebbe essere più veloce, perché le liste concatenazione deve essere fatto come il cambiamento di alcune indicazioni sottostanti. E il seguente codice è il più veloce, ma cambia B, non un (SO non è bene per il nostro scopo): test "WRONG":
a,b = [],[]
for i in range(0,100000):
a.append(i)
b.append(i)
def f(a,b):
for i in range(0,100):
b.extend(a)
import cProfile
cProfile.run('f(a,b)')
tempo: ~ 0.13s
Così teoricamente dovrebbe esserci un modo per estendere la parte anteriore del tempo di test "ERRATO".
'da collezioni im port deque' – eumiro
Nota, quello che hai sono liste, non matrici. –