Лучшие языки для научных вычислений [закрыто]


10

Похоже, что большинство языков имеют некоторое количество доступных библиотек научных вычислений.

  • Python имеет Scipy
  • Rust имеет SciRust
  • C++имеет несколько в том числе ViennaCLиArmadillo
  • Javaимеет Java Numericsи Colt, а также несколько других

Не говоря уже о языках , как Rи Juliaразработан специально для научных вычислений.

С таким количеством опций, как выбрать лучший язык для задачи? Кроме того, какие языки будут наиболее эффективными? Pythonи, Rкажется, имеет наибольшую тягу в пространстве, но логически скомпилированный язык кажется, что это был бы лучший выбор. И что-нибудь превзойдет Fortran? Кроме того, скомпилированные языки имеют тенденцию к ускорению на GPU, а интерпретируемые языки любят Rи Pythonне используют. Что я должен учитывать при выборе языка, и какие языки обеспечивают наилучший баланс полезности и производительности? Также есть какие-то языки со значительными научными вычислительными ресурсами, которые я пропустил?

efficiency  statistics  tools  knowledge-base  machine-learning  neural-network  deep-learning  optimization  hyperparameter  machine-learning  time-series  categorical-data  logistic-regression  python  visualization  bigdata  efficiency  classification  binary  svm  random-forest  logistic-regression  data-mining  sql  experiments  bigdata  efficiency  performance  scalability  distributed  bigdata  nlp  statistics  education  knowledge-base  definitions  machine-learning  recommender-system  evaluation  efficiency  algorithms  parameter  efficiency  scalability  sql  statistics  visualization  knowledge-base  education  machine-learning  r  python  r  text-mining  sentiment-analysis  machine-learning  machine-learning  python  neural-network  statistics  reference-request  machine-learning  data-mining  python  classification  data-mining  bigdata  usecase  apache-hadoop  map-reduce  aws  education  feature-selection  machine-learning  machine-learning  sports  data-formats  hierarchical-data-format  bigdata  apache-hadoop  bigdata  apache-hadoop  python  visualization  knowledge-base  classification  confusion-matrix  accuracy  bigdata  apache-hadoop  bigdata  efficiency  apache-hadoop  distributed  machine-translation  nlp  metadata  data-cleaning  text-mining  python  pandas  machine-learning  python  pandas  scikit-learn  bigdata  machine-learning  databases  clustering  data-mining  recommender-system 

12
Здесь нет вопросов. Если вам нужно провести фундаментальное исследование языка программирования, вам лучше прочитать Википедию, чем ждать, пока кто-нибудь появится здесь, чтобы подтолкнуть своего любителя.
Дирк Эддельбюттель

@DirkEddelbuettel Очень хорошая мысль. Я подумал, что было бы лучше попробовать создать контент, чем дорабатывать его на данный момент в бета-версии, но я не знаю много о бета-версиях SE. Это был хороший шаг с моей стороны или нет?
индик

1
Посмотрите на эти числа.
Эмре

@DirkEddelbuettel ты не ошибся, но моя надежда была способствовать обсуждению полезных характеристик и инструментов , связанных с различными языками. Используемый вами язык является важным инструментом в науке о данных, поэтому я подумал, что люди могут обсудить инструменты, которые они предпочитают, и получить здесь объективные преимущества, как ресурс для тех, кто хочет попробовать подобную работу.
ragingSloth

1
@indico Попробуйте файл cran.r-project.org/web/packages/overlap/index.html, который я случайно выбрал первым. Но на самом деле я лично знал многих статистиков, которые написали R пакетов. Ни один из них еще не написал Python. Чтобы немного расширить разговор, kdnuggets.com/2013/08/… интересен.
Лембик

Ответы:


12

Это довольно серьезный вопрос, поэтому он не предназначен для того, чтобы дать полный ответ, но, надеюсь, это может помочь в определении общей практики определения лучшего инструмента для работы, когда дело доходит до науки о данных. Вообще, у меня есть относительно короткий список квалификаций, которые я ищу, когда дело доходит до любого инструмента в этой области. В произвольном порядке они:

  • Производительность : в основном сводится к тому, как быстро язык выполняет матричное умножение, поскольку это более или менее самая важная задача в науке о данных.
  • Масштабируемость : по крайней мере для меня лично это сводится к простоте построения распределенной системы. Это где-то, где языки, как на Juliaсамом деле сияют.
  • Сообщество : с любым языком вы действительно ищете активное сообщество, которое может помочь вам, когда вы застряли, используя какой-либо инструмент, который вы используете. Именно здесь pythonтянется очень далеко впереди большинства других языков.
  • Гибкость : нет ничего хуже, чем быть ограниченным языком, который вы используете. Это случается не очень часто, но попытка изобразить графовые структуры haskell- это печально известная проблема, и Juliaв результате такого молодого языка возникает много проблем с архитектурой кода.
  • Простота использования : если вы хотите использовать что-то в более крупной среде, вы хотите убедиться, что установка проста и может быть автоматизирована. Нет ничего хуже, чем настраивать сборку на полдюжины машин.

Существует множество статей о производительности и масштабируемости, но в целом вы будете смотреть на разницу в производительности, возможно, в 5-10 раз между языками, что может иметь или не иметь значение в зависимости от вашего конкретного приложения. Что касается ускорения на GPU, то cudamatэто действительно простой способ заставить его работать python, и cudaбиблиотека в целом сделала ускорение на GPU гораздо более доступным, чем раньше.

Две основные метрики, которые я использую как для сообщества, так и для гибкости, - это просмотр менеджера пакетов языка и языковые вопросы на сайте, таком как SO. Если есть большое количество качественных вопросов и ответов, это хороший признак активности сообщества. Количество пакетов и общая активность этих пакетов также могут быть хорошим показателем для этого показателя.

Что касается простоты использования, я твердо убежден, что единственный способ узнать это на самом деле настроить его самостоятельно. Существует множество суеверий в отношении множества инструментов Data Science, в частности таких, как базы данных и распределенная вычислительная архитектура, но нет никакого способа узнать, легко или сложно что-то настраивать и развертывать, не создавая его самостоятельно.


Чтобы добавить к этому ответу: с точки зрения масштабируемости, Scalaи Goстоит упомянуть.
Марк Класен

Я бы добавил ясности и краткости (связанных с синтаксисом и языковой архитектурой, но не только). Возможность писать быстро и читать без боли имеет огромное значение (поскольку время программистов дороже, чем машинное время).
Петр Мигдаль

5

Лучший язык зависит от того, что вы хотите сделать. Первое замечание: не ограничивайте себя одним языком. Изучение нового языка - это всегда хорошо, но в какой-то момент вам придется выбирать. Удобства, предлагаемые самим языком, являются очевидной вещью, которую нужно учитывать, но, на мой взгляд, важнее следующее:

  • доступные библиотеки : вам нужно реализовать все с нуля, или вы можете повторно использовать существующие вещи? Обратите внимание, что эти библиотеки не обязательно должны быть на том языке, который вы рассматриваете, если вы можете легко взаимодействовать. Работа на языке без доступа к библиотеке не поможет вам добиться цели.
  • количество экспертов : если вы хотите привлечь внешних разработчиков или начать работать в команде, вы должны учитывать, сколько людей на самом деле знают язык. В качестве крайнего примера: если вы решили работать в Brainfuck, потому что вам это нравится, знайте, что вы, вероятно, будете работать в одиночку. Существует множество опросов, которые могут помочь оценить популярность языков, в том числе количество вопросов на язык в SO.
  • toolchain : есть ли у вас доступ к хорошим отладчикам, профилировщикам, инструментам документации и (если вам это нравится) интегрированным средам разработки?

Я знаю, что большинство моих баллов в пользу устоявшихся языков. Это с точки зрения «добейся цели».

Тем не менее, я лично считаю, что гораздо лучше овладеть языком низкого уровня и языком высокого уровня:

  • низкий уровень: C ++, C, Fortran, ... с помощью которого вы можете реализовать определенные горячие точки профилирования, только если вам это нужно, потому что разработка на этих языках обычно медленнее (хотя это и подлежит обсуждению). Эти языки остаются главными в плане критической производительности и, вероятно, будут оставаться на вершине в течение длительного времени.
  • высокий уровень: Python, R, Clojure, ... чтобы "склеить" что-то вместе и делать не критичные к производительности вещи (предварительная обработка, обработка данных, ...). Я считаю, что это важно просто потому, что на этих языках быстрая разработка и создание прототипов намного проще

4

Сначала вам нужно решить, что вы хотите сделать, а затем найти правильный инструмент для этой задачи.

Очень общий подход заключается в использовании R для первых версий и для проверки правильности вашего подхода. Ему немного не хватает скорости, но есть очень мощные команды и дополнительные библиотеки, которые вы можете попробовать почти с ним: http://www.r-project.org/

Вторая идея заключается в том, что если вы хотите понять алгоритмы, стоящие за библиотеками, вы можете взглянуть на Числовые рецепты. Они доступны для разных языков и бесплатны для изучения. Если вы хотите использовать их в коммерческих продуктах, вам нужно приобрести лицензию: http://en.wikipedia.org/wiki/Numeric_Recipes

Большую часть времени производительность не будет проблемой, но найти правильные алгоритмы и параметры для них, поэтому важно иметь быстрый язык сценариев вместо программы монстра, которая сначала должна скомпилировать 10 минут, прежде чем вычислить два числа и выпустить результат.

И большим плюсом в использовании R является то, что он имеет встроенные функции или библиотеки практически для любого типа диаграмм, которые вам могут понадобиться для визуализации ваших данных.

Если у вас есть рабочая версия, почти легко перенести ее на любой другой язык, который вы считаете более производительным.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.