Вопрос

Запрограммированы ли части NumPy и / или SciPy на C / C ++?

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

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

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

Это было полезно?

Решение

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

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

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

    Другие советы

    Многое написано на С или фортране. Вы можете переписать горячие циклы в C (или использовать один из нескольких способов ускорить Python, мне больше всего нравится увеличить / увеличить), но действительно ли это имеет значение?

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

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

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top