Сколько NumPy и SciPy находится в C?

Являются ли части NumPy и/или SciPy запрограммированными в C/С++?

И как накладные расходы на вызов C из Python сравниваются с накладными расходами при вызове C из Java и/или С#?

Мне просто интересно, является ли Python лучшим вариантом, чем Java или С# для научных приложений.

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

Ответ 1

  • Я бы поставил под вопрос любой критерий, который не показывает источник для каждой реализации (или я что-то пропустил)? Вполне возможно, что одно или оба из этих решений кодируются плохо, что может привести к несправедливой оценке производительности одного или обоих языков. [Изменить]. К сожалению, теперь я вижу источник. Как отмечали другие, он не использует библиотеки NumPy/SciPy, поэтому эти тесты не помогут вам принять решение.
  • Я считаю, что подавляющее большинство NumPy и SciPy написано на C и завершено в Python для удобства использования.
  • Вероятно, это зависит от того, что вы делаете на любом из этих языков относительно того, сколько накладных расходов для конкретного приложения.

Я использовал Python для обработки и анализа данных в течение нескольких лет, поэтому я бы сказал, что это, безусловно, подходит для цели.

Чего вы пытаетесь достичь в конце дня? Если вам нужен быстрый способ разработки читаемого кода, Python - отличный вариант и, конечно, достаточно быстрый для первого удара в том, что вы пытаетесь решить.

Почему бы не иметь bash для каждого для небольшого подмножества вашей проблемы и сравнить результаты с точки зрения времени разработки и времени выполнения? Затем вы можете сделать объективное решение на основе некоторых релевантных данных... или, по крайней мере, того, что я сделал бы: -)

Ответ 2

Многие из них написаны на C или fortran. Вы можете переписать горячие циклы в C (или использовать один из способов gazillion для ускорения работы python, boost/weave - мой любимый), но действительно ли это имеет значение?

Ваше научное приложение будет запускаться один раз. Остальное - это просто отладка и разработка, и на Python это может быть намного быстрее.

Ответ 3

Существует более качественное сравнение здесь (не эталон, но показывает способы ускорения работы Python). NumPy в основном написано на C. Основным преимуществом Python является то, что существует несколько способов очень легко расширить ваш код с помощью C (ctypes, swig, f2py)/С++ (boost.python, weave.inline, weave.blitz)/Fortran (f2py) - или даже просто добавив аннотации типов к Python, чтобы их можно было обработать на C (cython). Я не думаю, что для С# или Java существует много вещей, которые, по крайней мере, позволяют обрабатывать числовые массивы разных типов (хотя, я думаю, сторонники будут спорить, поскольку у них нет штрафа за производительность Python. к).

Ответ 4

Большая часть NumPy находится в C, но большая часть кода C является "шаблоном" для обработки всех грязных деталей интерфейса Python/C. Я думаю, что отношение C против Python составляет около 50/50 ATM для NumPy.

Я не очень хорошо знаком с низкоуровневыми деталями, основанными на vm, но я считаю, что стоимость интерфейса будет выше из-за ограничений, наложенных на jvm и .clr. Одна из причин, почему numpy часто быстрее, чем аналогичные среды, представляет собой представление памяти и как массивы совместно используются/передаются между функциями. В то время как большинство сред (Matlab и R, как я полагаю) используют Copy-On-Write для передачи массивов между функциями, используйте ссылки NumPy. Но это делается, например, JVM будет трудным (из-за ограничений на использование указателя и т.д.). Это выполнимо (существует ранний порт NumPy для Jython), но я не знаю, как они решают эту проблему. Возможно, С++/Cli сделает это проще, но у меня нет опыта в этой среде.

Ответ 5

Это всегда зависит от вашей собственной способности обрабатывать langue, поэтому язык способен генерировать быстрый код. По моему опыту, numpy в несколько раз медленнее, чем хорошие .NET-реализации. И я ожидаю, что JAVA будет таким же быстрым. Их оптимизирующие компиляторы JIT значительно улучшились за эти годы и дают очень эффективные инструкции.

numpy, с другой стороны, имеет синтаксис, который проще использовать для тех, которые настроены на языки сценариев. Но если дело доходит до разработки приложений, эти преимущества часто превращаются в препятствия, и вы будете стремиться к типам безопасности и корпоративным IDE. Кроме того, синтаксический разрыв уже закрывается с помощью С#. Растет число научных библиотек для Java и .NET. Лично я склонен к С#, поскольку он обеспечивает лучший синтаксис для многомерных массивов и как-то чувствует себя более "современным". Но, конечно, это только мой личный опыт.