Je travaille avec l’apprentissage automatique avec des ensembles de données assez volumineux (ils tiennent toujours en mémoire) et j’ai écrit des calculs dans R que je trouve trop lents. Je voudrais donc remplacer les “parties critiques” du programme par du code compilé que j’appellerais de R. Un exemple de problème que j’ai en main est l’implémentation de l’ algorithme “forward-backward” .
Ma question est de savoir si je dois apprendre Fortran ou C ++ pour le faire? Je n’ai besoin que de travailler avec des vecteurs ou des masortingces numériques. Je m’intéresse principalement à la langue qui est plus facile à apprendre et à l’interface de R et je ne me soucie pas vraiment de savoir lequel a le meilleur aspect sur mon CV.
J’ai lu le manuel des extensions R et joué un peu avec le paquet en ligne avec quelques simples codes Fortran et C ++. J’ai l’impression que Fortran95 serait plus simple à apprendre, bien que le package Rcpp soit également très intéressant. Je connais actuellement R, Python et Matlab.
Si vous écrivez tout le code vous-même, cela dépendra peut-être de la langue que vous préférez, ou peut apprendre mieux / plus rapidement. Bien que Rcpp puisse vous aider à récupérer plus facilement les objects R en C ++. En outre, les ajouts les plus récents dans 0.8.3 vous donnent des expressions vectorielles semblables à R dans le code compilé.
D’un autre côté, si vous envisagez d’utiliser / réutiliser / adapter des bibliothèques existantes, je consulterais par exemple mloss.org pour voir quelle langue vous fournit les bibliothèques d’apprentissage automatique les plus utiles et qui vous guideront également.
Pour moi, le C ++ fournit des abstractions plutôt utiles, ainsi qu’un access à une base de code énorme de bonne qualité générale. Mais d’autres se contentent de Fortran. Cela dépend vraiment de vous et, pour certains, étendre les personnes autour de vous qui peuvent apporter leur soutien.
J’écris pas mal de Fortran, beaucoup de Matlab, et récemment commencé à apprendre sérieusement le C ++. Je pense que vous serez plus productif dans votre nouvelle langue si vous utilisez Fortran plutôt que C ++. Je suggère ceci en gardant à l’esprit:
Je ne peux pas faire de commentaire sur la facilité d’intégration de R et Fortran ou C ++
Fortran a été le premier langage de programmation que j’ai appris, depuis lors, j’ai aussi choisi C et du C ++. Mes deux cents, c’est que si vous avez besoin d’accélérer rapidement le traitement de la masortingce, optez pour Fortran. Les raisons sont les suivantes:
Fortran est vraiment efficace pour traiter efficacement des données numériques, en particulier lorsqu’il est stocké dans des masortingces ou des tableaux. Ce type de travail est la «tache douce» de la langue.
Fortran se concentrant sur les opérations numériques, sa courbe d’apprentissage est inférieure à celle du C et du C ++. Il y a moins de fonctionnalités de langue et de bizarreries à apprendre et vous n’avez pas à gérer les pointeurs. C’est une grande victoire si tout ce que vous voulez faire est d’accélérer certains calculs le plus rapidement possible et de poursuivre votre travail.
Les tableaux multidimensionnels et les opérations sur les tableaux sont des citoyens de premier ordre dans la langue Fortran. Avec C ou C ++, vous devez vous préoccuper de l’utilisation de bibliothèques externes ou de fonctions / macros d’écriture pour fournir les mêmes fonctionnalités.
En revanche, C et C ++ sont nettement mieux adaptés aux tâches de programmation générales en dehors du domaine du calcul numérique. Si vous voyez la possibilité de manipuler des chaînes de caractères dans votre futur, vous voudrez probablement investir votre temps dans une langue autre que Fortran.
Mettre à jour
Une autre considération importante est la manière dont vos données sont stockées et traitées du côté R. Si vous utilisez fortran, vous devrez transmettre vos données aux routines compilées de manière très simple: scalaires, vecteurs, etc. Aucune liste ou object de fantaisie.
Comme R est implémenté dans C, une interface plus riche est disponible pour vous permettre de passer directement des objects R arbitraires aux routines C et C ++, puis de renvoyer des objects R arbitraires. Vous pouvez également exécuter des rappels vous permettant d’exécuter des fonctions R à partir du code C compilé.
J’ai maintenant fait quelques expériences en utilisant Fortran, C ++ et R et je pense que je suis au moins à moitié prêt à répondre à ma propre question maintenant. J’ai fini par écrire la fonction diff (et quelques autres petits tests) à la fois dans Fortran et C ++ et l’appeler de R.
Pour les débutants, je pense que toute personne confrontée à ce problème devrait lire les extensions R , Rcpp et Rcpp .
J’ai maintenant découvert quelques points importants sur l’interfaçage du code de R qui n’ont pas encore été abordés dans les réponses:
Donc, en guise de conclusion: pour ce que j’ai besoin d’écrire, Fortran et C ++ (avec Armadillo) semblent ~ aussi faciles (ou difficiles), mais l’interfaçage du code C ++ avec R est beaucoup plus facile avec Rcpp.
Fortran est le java de HPC. Vous pouvez écrire des programmes très efficaces en C ++, mais il est plus facile d’écrire le même programme dans Fortran, à condition qu’il soit adapté au traitement des nombres. Personne n’écrirait sérieusement une application graphique dans Fortran, mais dans HPC, la vitesse et la concision sont imbattables.
Si vous êtes dans le milieu universitaire, beaucoup de gens utilisent encore Fortran, alors cela pourrait être un avantage. Et Fortran est vraiment doué pour mâcher les chiffres.