web-dev-qa-db-fra.com

Devrais-je utiliser np.absolute ou np.abs?

Numpy fournit à la fois np.absolute et l'alias np.abs défini via

_from .numeric import absolute as abs
_

qui semble être en violation évidente de le zen de python :

Il devrait y avoir une - et de préférence une seule - manière évidente de le faire.

Donc, je suppose qu'il y a une bonne raison à cela.

J'ai personnellement utilisé _np.abs_ dans la quasi-totalité de mon code et j'ai consulté, par exemple, le nombre de résultats de recherche pour np.abs vs np.absolute sur Stack Overflow, il semble qu'une majorité écrasante fasse de même (2130 vs 244 hits).

Existe-t-il une raison quelconque pour laquelle je devrais utiliser préférentiellement _np.absolute_ par rapport à _np.abs_ dans mon code, ou devrais-je simplement opter pour le plus "standard" _np.abs_?

47
Jonas Adler

C'est probablement parce qu'il y a des fonctions intégrées portant le même nom, abs . Il en va de même pour np.amax, np.amin et np.round_.

Les alias des fonctions NumPy abs, min, max ET round ne sont définis que dans le package de niveau supérieur.

Donc, np.abs et np.absolute sont complètement identiques. Peu importe lequel vous utilisez.

Les noms abrégés présentent plusieurs avantages: Ils sont plus courts et sont connus des programmeurs Python car ils sont identiques aux fonctions intégrées Python. Ainsi, les utilisateurs finaux ont plus de facilité (moins de dactylographie, moins de mémorisation).

Mais il y a aussi des raisons d'avoir des noms différents: NumPy (ou plus généralement, les paquetages tiers) ont parfois besoin du Python fonctions abs, min, etc. Ils définissent donc des fonctions avec un nom différent pour continuez d’accéder aux fonctions Python - et vous exposez les "raccourcis" au plus haut niveau du paquet. Remarque: Différents noms ne sont pas la seule option disponible dans ce cas: on pourrait contourner ce problème avec le module Python builtins pour accéder à les fonctions intégrées si on ombré un nom intégré.

Cela pourrait également être le cas (mais ce n’est que pure spéculation de ma part) qu’ils n’incluaient à l’origine les fonctions nommées depuis longtemps absolute (et ainsi de suite) et n’ajoutaient que les alias abrégés plus tard. Étant une bibliothèque volumineuse et bien utilisée, les développeurs de NumPy ne suppriment ni ne déconseillent les choses à la légère. Ainsi, ils peuvent simplement garder les noms longs car cela pourrait casser l'ancien code/les scripts s'ils les supprimaient.

41
MSeifert