Есть миллионы причин любить Python (особенно для специалистов по данным). Но чем Python отличается от более профессиональных языков программирования низкого уровня, таких как C или C++? Я предполагаю, что это вопрос, который многие специалисты по данным или пользователи Python задавали или зададут себе в один прекрасный день. Есть много различий между Python и такими языками, как C++. В этой статье я покажу вам, насколько быстро C++ сравнивается с Python, на очень простом примере.
Изображение для поста
Фото автора.
Чтобы показать разницу, я решил идите с простой и практичной задачей вместо воображаемой задачи. Задача, которую я собираюсь выполнить, состоит в том, чтобы сгенерировать все возможные k-меры ДНК для фиксированного значения «k». Если вы не знаете о k-мерах ДНК, я объясню это простым языком в следующем разделе. Я выбрал этот пример, потому что многие задачи обработки и анализа данных, связанные с геномом (например, создание k-меров), считаются вычислительно интенсивными. По этой причине многие специалисты по данным в области биоинформатики интересуются C++ (в дополнение к Python).
Изображение для поста
Фото автора.
Краткое введение в К-меры ДНК
ДНК представляет собой длинную цепь единиц, называемых нуклеотидами. В ДНК есть 4 типа нуклеотидов, обозначенных буквами A, C, G и T. У людей (точнее, у Homo Sapiens) 3 миллиарда пар нуклеотидов. Например, небольшая часть ДНК человека может выглядеть примерно так: ACTAGGGATCATGAAGATAATGTTGGTGTTTGTATGGTTTTCAGACAATT
В этом примере, если вы выберете любые 4 последовательных нуклеотида (т.е. буквы) из этой строки, это будет k-мер длиной 4 (мы называем это 4-мером). Вот несколько примеров 4-меров, полученных из примера.
ACTA, CTAG, TAGG, AGGG, GGGA и т. д.
Задача
В этой статье давайте сгенерируем все возможные 13-меры. . Математически это перестановка с проблемой замены. Следовательно, у нас есть ⁴¹³ (= 67 108 864) возможных 13-меров. Я использую простой алгоритм для получения результатов на C++ и Python. Давайте посмотрим на решения и сравним их.
Сравнение решений
Чтобы легко сравнить C++ и Python для этой конкретной задачи, я использовал один и тот же алгоритм для обоих языков. Оба кода намеренно разработаны, чтобы быть простыми и похожими. Я избегал использования сложных структур данных или сторонних пакетов или библиотек. Первый код написан на Python.

Если вы запустите код Python, потребуется 61,23 секунды, чтобы сгенерировать все 67 миллионов 13-меров. Для объективности сравнения я закомментировал строки, отображающие k-меры (строки 25 и 37). Если вы хотите отображать k-меры во время их создания, вы можете раскомментировать эти две строки. Примечание: чтобы отобразить их все, требуется много времени. Пожалуйста, используйте CTRL+C, чтобы прервать код, если вам это нужно.
Теперь давайте посмотрим на тот же алгоритм на C++.

После компиляции, если вы запустите код, потребуется около 2,42 секунды, чтобы сгенерировать все 67 миллионов 13-меров. Это означает, что Python требует в 25 раз больше времени для запуска того же алгоритма по сравнению с C++. Я повторил эксперимент для 14-меров и 15-меров (нужно изменить 12-ю строку в коде на Python и 22-ю в коде на C++). Результаты приведены в таблице 1.
Изображение для поста
Таблица 1) Сравнение сред выполнения Python и C++ для генерации 13-, 14- и 15-меров.
Очевидно, что C++ намного быстрее, чем Python . Это не является неожиданностью для большинства программистов и специалистов по данным, но пример показывает, что разница значительна. Помните, что в этом примере мы не использовали распараллеливание ЦП или ГП, которое необходимо делать для таких типов задач (неприятно параллельных задач). Также в этом примере мы не сильно задействовали память. Если бы мы сохраняли результаты (например, по каким-то особым причинам), то управление памятью могло бы даже иметь более существенное значение для различий между средами выполнения C++ и Python.
Этот пример и тысячи других проблем предполагают, что даже специалисты по данным должны знать об этом. таких языков, как C++, если они работают с большими объемами данных или экспоненциально растущими процессами. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .