Question

Des parties de NumPy et / ou SciPy sont-elles programmées en C / C ++?

Et en quoi le temps d’appel lié à l’appel de C depuis Python se compare-t-il à celui du fait d’appeler C depuis Java et / ou C #?

Je me demande simplement si Python est une meilleure option que Java ou C # pour les applications scientifiques.

Si je regarde le fusillades , Python perd énormément. Mais je suppose que c’est parce qu’ils n’utilisent pas de bibliothèques tierces dans ces tests.

Était-ce utile?

La solution

  1. Je m'interrogerais sur tout point de repère qui ne montrerait pas le source de chaque implémentation (ou ai-je oublié quelque chose)? Il est tout à fait possible que l’une ou les deux solutions soient mal codées, ce qui entraînerait une évaluation injuste des performances de l’une ou des deux langues. [Modifier] Oups, je vois maintenant la source. Comme d'autres l'ont fait remarquer, les bibliothèques NumPy / SciPy n'utilisant pas cette bibliothèque, ces références ne vous aideront pas à prendre de décision.
  2. Je pense que la grande majorité de NumPy et SciPy est écrite en C et enveloppée en Python pour en faciliter l'utilisation.
  3. Cela dépend probablement de ce que vous faites dans l'une de ces langues pour déterminer le temps système nécessaire à une application particulière.

Cela fait quelques années que j'utilise Python pour le traitement et l'analyse des données, je dirais donc que c'est parfaitement adapté.

Qu'est-ce que vous essayez d'accomplir à la fin de la journée? Si vous voulez un moyen rapide de développer un code lisible, Python est une excellente option et certainement assez rapide pour une première tentative de résolution du problème que vous essayez de résoudre.

Pourquoi ne pas faire une analyse de chacun pour un petit sous-ensemble de votre problème et analyser les résultats en termes de temps de développement et d’exécution? Ensuite, vous pouvez prendre une décision objective en vous basant sur des données pertinentes ... ou du moins c'est ce que je ferais: -)

Autres conseils

Beaucoup d’entre elles sont écrites en C ou en Fortran. Vous pouvez ré-écrire les boucles chaudes en C (ou utiliser l’un des meilleurs moyens pour accélérer le python, le boost / tissage est mon préféré), mais est-ce vraiment important?

Votre application scientifique sera exécutée une fois. Le reste ne concerne que le débogage et le développement, et ceux-ci peuvent être beaucoup plus rapides en Python.

La majeure partie de NumPy est en C, mais une grande partie du code C est "passe-partout". pour gérer tous les détails incorrects de l'interface Python / C. Je pense que le rapport C / Python se situe autour de 50/50 ATM pour NumPy.

Je ne connais pas très bien les détails de bas niveau basés sur vm, mais j’estime que le coût de l’interface serait plus élevé en raison des restrictions imposées à jvm et à .clr. L'une des raisons pour lesquelles numpy est souvent plus rapide que des environnements similaires est la représentation en mémoire et la manière dont les tableaux sont partagés / passés entre les fonctions. Alors que la plupart des environnements (Matlab et R aussi, je crois) utilisent Copy-On-Write pour passer des tableaux entre des fonctions, NumPy utilise des références. Mais cela, par exemple la machine virtuelle Java serait difficile (à cause des restrictions sur l'utilisation du pointeur, etc ...). C'est faisable (un premier port de NumPy pour Jython existe), mais je ne sais pas comment ils résolvent ce problème. C ++ / Cli pourrait peut-être faciliter les choses, mais je n’ai aucune expérience de cet environnement.

Il existe une meilleure comparaison ici (pas un point de repère, mais montre comment accélérer Python). NumPy est principalement écrit en C. L’avantage principal de Python est qu’il existe un certain nombre de moyens pour très étendre facilement votre code avec C (ctypes, swig, f2py) / C ++ (boost.python, weave .inline, weave.blitz) / Fortran (f2py) - ou même simplement en ajoutant des annotations de type à Python afin qu’il puisse être traité en C (cython). Je ne pense pas qu'il y ait beaucoup de choses aussi faciles à concurrencer pour C # ou Java - du moins, ils manipulent si facilement des tableaux numériques de types différents (bien que je suppose que les promoteurs diraient qu'ils ne souffrent pas de la pénalité de performance de Python, ils sont moins nécessaires. à).

Cela dépend toujours de votre propre capacité à gérer la langue, de sorte que la langue est capable de générer un code rapide. D'après mon expérience, numpy est plusieurs fois plus lent qu'une bonne implémentation .NET. Et je m'attends à ce que JAVA soit similaire rapidement. Leurs compilateurs optimisés JIT se sont considérablement améliorés au fil des ans et produisent des instructions très efficaces.

numpy, d’autre part, a une syntaxe plus facile à utiliser pour ceux qui sont sensibles aux langages de script. Toutefois, s’il s’agit de développement d’applications, ces avantages se tournent souvent vers des obstacles et vous aurez très envie de passer à la sécurité typographique et aux IDE d’entreprise. En outre, le fossé syntaxique est déjà en train de se fermer avec C #. Un nombre croissant de bibliothèques scientifiques existent pour Java et .NET . Personnellement, je suis plutôt orienté vers le C #, car il fournit une meilleure syntaxe pour les tableaux multidimensionnels et certains sentiments plus moderne'. Mais bien sûr, ce n’est que mon expérience personnelle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top