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

10

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

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

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

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

ragingSloth
источник
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, в частности таких, как базы данных и распределенная вычислительная архитектура, но нет никакого способа узнать, легко или сложно что-то настраивать и развертывать, не создавая его самостоятельно.

Indico
источник
Чтобы добавить к этому ответу: с точки зрения масштабируемости, 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 является то, что он имеет встроенные функции или библиотеки практически для любого типа диаграмм, которые вам могут понадобиться для визуализации ваших данных.

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

Armin
источник