Bonjour à tous
Je cherche différent moyen de caster une liste (ou une portion de liste) en un numpy array. J'aurais besoin de plusieurs méthodes différentes selon les besoins/la situation alors je me disais pourquoi pas faire une classe qui dériverait de list et qui ajouterais à ce type les différentes méthodes de cast vers un array que je souhaites proposer.
A ma grande stupeur faire une nouvelle classe est donc bien plus couteux !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 import numpy as np from time import time datasize=10000 rd = np.random.RandomState(seed=0) data = list( rd.rand(datasize) ) #### Option 1 : Une fonction exterieur def to_nparray(datalist): return np.array(datalist) #### Option 2 : On creer une classe qui derive de list class MyList(list): def to_nparray(self): return np.array(self) data2 = MyList(data) Niter4access = int(1e7) Niter4nparr_cast= int(1e4) t0 = time() for i in range(Niter4access) : b=data[i%datasize] t1 = time() for i in range(Niter4access) : b=data2[i%datasize] t2 = time() for i in range(Niter4nparr_cast) : b=to_nparray(data) t3 = time() for i in range(Niter4nparr_cast) : b=data2.to_nparray() t4 = time() print("======== Exec time ========") print("-- Particular acces (%s iter) ---"%Niter4access) print("External fct: %s"%(t1-t0)) print("Class method: %s"%(t2-t1)) print("-- np.array cast (%s iter) ---"%Niter4nparr_cast) print("External fct: %s"%(t3-t2)) print("Class method: %s"%(t4-t3))
Quelqu'un peut-il tester chez lui et me dire s'il a les mêmes différences entre les 2 cas ? Qqn a-t-il une explication de pourquoi y a t il autant de différence sur le temps d'éxécution (+60% en coût sur l'accès particulaire tout de même ce n'est pas rien, et +27% sur la conversion ). Je sais qu'on rajoute une classe, donc c'est plus lourd. Mais à ce point ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ======== Exec time ======== -- Particular acces (10000000 iter) --- External fct: 1.5281527042388916 Class method: 2.4622461795806885 -- np.array cast (10000 iter) --- External fct: 5.599560022354126 Class method: 6.787678480148315
Partager