2016-02-26 1 views
1

Existe-t-il une différence de performance entre l'utilisation d'une virgule et l'éclatement explicite des références d'index pour des lecteurs peut-être plus conventionnels? Étant donné que les deux semblent donner les mêmes résultats, mais ce dernier peut être plus intuitive à certainsNotation de tranche numpy python (COMMA VS STANDARD INDEX)

x = numpy.array([[1,2,3,4], 
       [5,6,7,8]]) 

comma_method = x[0,1:3] 
>>> numpy.array([2,3]) 

conventional method = x[0][1:3] 
>>> numpy.array([2,3]) 

Répondre

2

Quasiment toujours aller pour la virgule, et non pour des raisons de performance, mais parce que l'indexation est deux fois pas tout à fait équivalent:

In [2]: x = numpy.array([[0, 1], [2, 3]]) 

In [3]: x[:1, :1] 
Out[3]: array([[0]]) 

In [4]: x[:1][:1] 
Out[4]: array([[0, 1]]) 

Cela dit, la virgule semble aussi avoir un avantage de vitesse:

In [7]: %timeit x[0][0] 
The slowest run took 25.41 times longer than the fastest. This could mean that a 
n intermediate result is being cached 
1000000 loops, best of 3: 357 ns per loop 

In [8]: %timeit x[0, 0] 
The slowest run took 41.92 times longer than the fastest. This could mean that a 
n intermediate result is being cached 
1000000 loops, best of 3: 148 ns per loop 

Je ne sais pas ce qui est le plus lent avec course et le plus rapide course ayant une telle différence de temps.

+0

Y a-t-il un lien vers la documentation qui détaille deux fois la différence précédente que vous avez mentionnée entre la virgule et l'indexation? googling 'virgule vs indexes' n'est pas exactement la solution la plus descriptive – AlanSTACK

+1

@AlanL: Je ne suis pas au courant d'une page de documentation le décrivant, mais c'est une conséquence directe des règles d'indexation de base. Dans 'x [: 1,: 1]', l'expression d'indexation dit de couper le long des premier et second axes de 'x'. En revanche, 'x [: 1] [: 1]' dit de couper le long du premier axe de 'x', puis coupe le long du premier axe du résultat. – user2357112

0

Le deuxième cas est moins efficace car un nouveau tableau temporaire est créé après le premier index qui est ensuite indexé.