Мои 2 цента.
Я думаю, что об этом легче писать, чем о C / C ++. Во-первых, библиотеки в таких языках, как Python, не обязательно используются для получения преимущества в скорости, даже если это является следствием. Я думаю, что
@David довольно хорошо объяснил причины.
Взяв это сверху, языковая реализация в некоторой степени определяет, к каким библиотекам у вас есть доступ. Обычно используемые языки в вычислительной науке включают C, C ++, Python, Perl, Java, Fortran и R. Менее распространенными примерами могут быть Ocaml и Common Lisp. Теперь, поскольку большинство этих языков написаны на C, они имеют естественный интерфейс с иностранными функциями для C. Однако не так просто вызвать, скажем, библиотеку Perl из Python или наоборот. Так что на практике люди склонны либо
Использовать библиотеку, написанную на их языке реализации, обычно что-то, что является частью стандартных библиотек, или иным образом широко доступным, или
Вызов библиотеки C / C ++ через языки FFI. Предполагается, что обертка еще не существует, поскольку, если она существует, ее трудно отличить от (1).
(2) обычно сложнее, потому что вы должны обернуть функцию C / C ++ самостоятельно. Кроме того, вы должны либо связать библиотеку, либо добавить дополнительную зависимость. По этой причине люди более склонны использовать библиотеки встроенного языка, а не использовать, например, GSL, который находится на C.
Для очень общих подпрограмм, скажем, генерации случайных выборок из распределений, или базовых числовых подпрограмм, таких как квадратура интегралов, легко и часто можно повторно использовать некоторую библиотеку. По мере того, как функциональность, которую вы пытаетесь реализовать, становится все более сложной, становится экспоненциально маловероятным, что кто-то найдет нужную функцию в другой библиотеке, и даже если это так, можно потратить много времени на поиск и, наконец, адаптацию функции по мере необходимости. необходимо (например, стиль кода / дизайн может быть проблемой). И, как обсуждалось выше, каждый имеет доступ только к подмножеству библиотек. С другой стороны, реализация алгоритма самостоятельно, если он сложный, а не основной, может быть пугающей, и, конечно, приходится иметь дело с этими неприятными проблемами со скоростью.
Таким образом, это становится проблемой оптимизации в анализе затрат / выгод. Мой опыт показывает, что даже для сравнительно стандартных методов, таких как MCMC, я обычно пишу свой собственный код, потому что он лучше согласуется с тем, как я разрабатываю общее программное обеспечение.
Конечно, даже если вы в конечном итоге не используете код, можно поучиться на чужом коде. Я не знаю, как часто ученые действительно пытаются это сделать. У меня сложилось впечатление, что чтение чужого кода для обучения - это, скорее, инженер-программист.