LINUX.ORG.RU

Python в научных вычислениях

 ,


29

6

Доктор физико-математических наук Андрей Грозин прочитал цикл лекций об использовании Python в целях ликвидации безграмотности среди студентов, аспирантов и прочих. Презентации были приготовлены для представления в среде Jupyter. Видеоматериалы лекций с разрешения лектора доступны под свободной лицензией CC-BY-SA. Исходные видеофайлы будут выложены в торрентах позже.

Первая и третья лекция записаны не были. Остальные записаны, как записаны. Лекционные материалы выложены на страничке лектора.

Первые четыре лекции представляют из себя введение в язык программирования Python. Следующие пять лекций — это обзор возможностей Python, которые смогут пригодится в процессе занятия наукой.

  • Лекция 1. Jupiter. Числа. Строки. Списки. (html, ipynb)
  • Лекция 2. Кортежи. Множества. Словари. Функции.(html, YouTube, ipynb)
  • Лекция 3. Объектно-ориентированное программирование. Исключения. (html, ipynb)
  • Лекция 4. Модули. Ввод-вывод, файлы, директории. (html, YouTube, ipynb)
  • Лекция 5. numpy. Одномерные массивы. Операции над одномерными массивами. 2-мерные массивы. Линейная алгебра. Преобразование Фурье. Интегрирование. Дифференциальные уравнения.(html, YouTube, ipynb)
  • Лекция 6. matplotlib. Логарифмический масштаб. Полярные координаты. Экпериментальные данные. Гистограмма. Контурные графики. Images (пиксельные картинки). Трёхмерная линия. Поверхности. (html, YouTube, ipynb)
  • Лекция 7. SymPy (html, ipynb). Многочлены и рациональные функции. Элементарные функции. Структура выражений. Решение уравнений. Ряды. Производные. Интегралы. Суммирование рядов. Пределы. Дифференциальные уравнения. Линейная алгебра. Собственные значения и векторы. Нормальная жорданова форма. Графики. (html, YouTube, ipynb)
  • Лекция 8. iminuit (html, ipynb). cython. Функции. Интерфейс к библиотеке на C. Структуры. cdef классы. Интерфейс к библиотеке на C. (html, YouTube, ipynb)
  • Лекция 9. Интерфейс к библиотеке на C (продолжение). pandas (html, ipynb) — пакет для статистической обработки данных. Series. DataFrame. sh — простой вызов shell-комманд. rpyc — remote python call. pyroot — интерфейс к пакету анализа данных в том числе и данных очень большого объёма ROOT. (YouTube)

>>> YouTube

★★★★★

Проверено: splinter ()

Ответ на: комментарий от Im_not_a_robot

Несмотря на то что я очень котирую C/C++ - плюсую

Pinkbyte ★★★★★ ()
Ответ на: комментарий от carbon

Только он кагбе пованивает немножко уже. Точнее даже не немножко. И тонны легаси кода на нём существуют только по причине, что нужно угрохать 100500 человекочасов чтобы переписать то что и так хорошо работает.

Однако из этого не следует, что НОВЫЕ проекты стоит начинать на де-факто мёртвом ЯП.

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от anonymous

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

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

pftBest ★★★★ ()
Ответ на: комментарий от pftBest

Синтаксис? Синтаксис?! СИНТАКСИС?! (далее громкий нервозно-гомерический хохот)

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

nezamudich ★★ ()
Ответ на: комментарий от anonymous

Ну как почему, вот я малознакомый с программированием человек, понадобилось мне что-то посчитать, написал «лобовой» код на Python (я же ведь малознаком с программированиям, откуда мне знать где, что, как оптимизировать чтобы быстрее считалось?) и тут выясняется что он медленно работает

В большинстве случаев выяснится, что работает он достаточно быстро и это лучше, чем 2 месяца потратить на C.

«Преждевременная оптимизация — корень всех зол» (с) самизнаетекто

ptarh ★★★★★ ()
Ответ на: комментарий от iVS

Но в научной среде поголовно пиарится именно питон.

«Научная среда» существует в однородном виде только в головах ораторов на ЛОРе. На самом деле в зависимости от науки используется все: от С c Фортраном, куча закрытой дряни типа Математики и Матлаба, пистон с R и заканчивается все людьми, которым хватает и экселя. Хорошо, если от всего этого парада уродцев останутся C/Fortran для низкоуровнего и Python/R для высокоуровнего анализа - это будет настоящая победа.

ptarh ★★★★★ ()
Ответ на: комментарий от pftBest

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

Смотрю на своих физиков, им как-то пофиг. Они других синтаксисов и не видели.

anonymous ()
Ответ на: комментарий от anonymous

и хорошо! матлаб - очень прост и удобен...
набор всех нужных(основных) функций(математических) присутствует. что еще нужно?
а главное(субъективно), работает с матрицами.
a Fortran для старичков...

rgB ()
Ответ на: комментарий от tailgunner

Ты бы предпочел Matlab?

Матлаб (если есть деньги) или октава/R (если их нет). Julia вот вкусно смотрится в перспективе, но пока... Питон смотрится явно лишним, хотя надо признать, что numpy/scipy ряд упрямых личностей доразвивали до вполне достойного состояния. В них только одно плохо: сам питон.

MathCAD?

Удивляюсь, что кто-то всё ещё пользуется этим уродством. Видимо, чисто российская фича — тут я его ни разу не видел и не слышал о нём. Для комп. алгебры — Mathematica/Maple (при наличии денег) или Maxima (при их отсутствии). Кое-что, конечно, неплохо делает sympy, не спорю, но мне почему-то кажется, что это опять-таки не благодаря питону, а вопреки ему.

unanimous ★★★★★ ()
Ответ на: комментарий от carbon

А Fortran уже отменили?

Фортран как бы не для того. Фортран — это язык конечной реализации, когда алгоритм отлажен. В топике же обсуждаются средства быстрой прототипизации.

unanimous ★★★★★ ()
Ответ на: комментарий от iVS

Это так кажется

Не, это так оно и есть. Переиспользование идёт разве что на уровне алгоритмов.

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

Есть, дают и разрабатывают, но получается, как обычно, нёх. См. ROOT. Поэтому ситуация с R, где разработка идёт кучей народу исключительно под свои личные нужды, гораздо интереснее.

Не навязывают, но и альтернатив не дают, что почти одно и то же.

Не понял? Не дают потому что их нет или что-то скрывают от народа?

Evgueni ★★★★★ ()
Ответ на: комментарий от anatoly

Скажу тебе по секрету: профессиональные инструменты требуют времени для изучения, к дурным негодным инструментам подходить не нужно сразу же, а изучать алгоритмы можно и без компьютеров.

Evgueni ★★★★★ ()
Ответ на: комментарий от anatoly

целях ликвидации безграмотности среди студентов, аспирантов и прочих

Тут речь не только про учёбу, особенно с учётом заголовка. И всё равно, даже в Mathcad надо изучать основы и смотреть справочники. Да и лицензия на всё это чудо (тем более на целый класс), будет стоить не мало.

vitruss ★★★ ()
Ответ на: комментарий от unanimous

В области ФВЭ/HEP питон используется в основном в качестве клея и обёртки. Тут на его место годится де факто любой стабильный (анализ в несколько лет — это норма) скриптовый язык с батарейками.

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 1)

Извините за возможно тупой вопрос: Если тут обсуждается применение Python для научных вычислений, возможно ли для подобного класса задач использовать Lua в связке с Си.

Честно говоря, с данной предметной областью не имел дела со студенческих времён (где мы когда-то использовали маткад и матлаб).

Просто хотел узнать, вдруг у Lua есть какие-то принципиальные минусы по сравнению с Python.

PS: И с Python и с Lua я знаком весьма поверхностно.

Hemulo ()
Ответ на: комментарий от Hemulo

Конкретно для ФВЭ/HEP в качестве клея и обёртки сгодится любой стабильный скриптовый язык с батарейками. Для целей локального эксперимента я длительное время использовал perl, но сейчас де факто его место занимает Python.

Evgueni ★★★★★ ()
Ответ на: комментарий от hotpil

Мы тут с товарищем соревновались, решали одно и тоже уравнение одним и тем же методом, я на С, он - на питоне

помню мы тоже с товарищем соревновались. я на руте, она - на питоне. мало того, что я написал все за полдня, так еше и прога работала в 60 раз быстрее. вот так я потерял товарища.

anonymous ()
Ответ на: комментарий от iVS

Я выступаю не против питона, а против отсутствия альтернатив.

Я что-то не понял, спецагенты ЗОГ устраняют разработчиков этих самых альтернатив? Или вводят цензуру в СМИ, чтобы о них никто не узнал? Возьми да напиши свою альтернативу.

anonymous ()
Ответ на: комментарий от Hemulo

Просто хотел узнать, вдруг у Lua есть какие-то принципиальные минусы по сравнению с Python.

Принципиальных нет, но есть отсутствие numpy/pandas и ipython notebook.

A1 ()
Ответ на: комментарий от unanimous

Так озвучь свои претензии к Python. Пока что ты, хоть и сквозь зубы, признаешь его полезность.

tailgunner ★★★★★ ()
Ответ на: комментарий от Evgueni

А почему так нужна скриптовость? Если понаделать готовых либ на С вроде numpy то почему нельзя их дёргать из компилируемого языка?

anonymous ()
Ответ на: комментарий от Hemulo

Просто хотел узнать, вдруг у Lua есть какие-то принципиальные минусы по сравнению с Python.

Для питона есть готовые библиотеки типа numpy, scipy и matplotlib. то есть из коробки уже есть базовая математика, операции над матрицами, преобразования фурье и т.д. и графики с диаграммами можно строить. Почти все для чего люди матлаб используют уже есть готовое. А для луа я не видел аналогичных библиотек по полноте и функционалу.

pftBest ★★★★ ()
Ответ на: комментарий от anonymous

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

Evgueni ★★★★★ ()

Ах, когда я в 2012 году делал лекции в ipython notebook, это ещё было модно, стильно и необычно. А сейчас уже мейнстрим какой-то. Обидно даже.

anonymous ()
Ответ на: комментарий от Vudod

Вопиющая неграмотность - это не знать, что scilab читается «сайлэб», а не «лыжная лаборатория».

hotpil ★★★ ()
Ответ на: комментарий от omegatype

В Mathcad'е есть и встроенная функция fft, и векторы/матрицы. И ни что не мешает реализовать в системе алгоритм fft самостоятельно.

Если после ЦОС-а будет курс ...

Обычно курс ЦОС разбивают на две больших части/курса: теоретическую и практическую. Где на практической части уже занимаются программированием непосредственно сигнальных процессоров или чего-нибудь другого.

Так вот нет ничего плохого, чтобы теоретическую часть вести с использованием Mathcad'а. И сразу садить студентов за сигнальные процессоры ничуть не лучше того, чем за python, numpy и scipy.

anatoly ()
Ответ на: комментарий от Evgueni

Скажу тебе по секрету: профессиональные инструменты требуют времени для изучения

Мне это и без тебя известно.

дурным негодным инструментам подходить не нужно сразу же

Понятное дело, определять, что дурно и негодно, можешь только ты.

а изучать алгоритмы можно и без компьютеров.

Утверждаешь, что ЦОС лучше преподавать вообще без компьютеров, чем использовать Mathcad?

anatoly ()
Ответ на: комментарий от hotpil

соглашусь, пробовал python для моделирования алгоритмов обработки изображений с использованием библиотеки OpenCV. В итоге пришёл к неожиданному выводу, что проделать эту работу на C++ оказалось удобнее и быстрее. Начиная с того, что питону просто для начала потребовалось доустанавливать несколько дополнительных пакетов помимо самой OpenCV. Так же обнаружил, что некоторые вещи, которые в С++ выполняются легко и достаточно очевидно, в питоне требуют каких-то извращений (например сортировки с лямбдами в многомерных массивах NumPy).

cawa ()
Ответ на: комментарий от curufinwe

Так вот питон в научных кругах - прежде всего свободная замена матлаба.

по-моему SciLab больше подходит на эту роль

cawa ()
Ответ на: комментарий от hotpil

Вопиющая неграмотность - это не знать, что scilab читается «сайлэб», а не «лыжная лаборатория».

Очень радуют наши доморощенные ценители английского языка. Благодаря таким товарищам ГосДеп может сэкономить много денег.

Vudod ★★★★★ ()
Ответ на: комментарий от pftBest

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

Теоретически это всё возможно было бы перенести в библиотеки для Lua. Почему тогда этого никто ещё не сделал. Lua ведь не вчера появился.

Ну и ещё, вроде бы есть математические библиотеки для Си, а если такие библиотеки есть, то их можно использовать из Lua.

Меня интересует вдруг есть какие-то чисто принципиальные причины или критические недостатки Lua из за которых никто даже не стал заморачиваться на эту тему? Или просто так «исторически сложилось».

Я недавно начал присматриваться к Lua и он в целом мне показался симпатичным, но я пока не понял почему он сильно уступает в популярности Python-у, который тоже мне показался достаточно интересным.

Увы свободного времени катастрофически мало и попробовать всё что хочется не получается, поэтому извините за чайниковский вопрос.

Мне это нужно не для практического применения, а скорее для расширения кругозора.

Hemulo ()
Ответ на: комментарий от Hemulo

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

Основа, может, и на Си, но половина исходников - Python, а Си завязан на Python API.

tailgunner ★★★★★ ()
Ответ на: комментарий от cawa

Параллельные вычисления не являются сильной стороной Python. Собственно говоря сегодня с параллельным вычислениями плохо везде. Поэтому сейчас спользовать приходится ассемблер OpenCL/Cuda напрямую для всего, что выходит за рамки стандартных библиотек. Возможно в будущем что-то поменяется, но IMHO не в близком.

Evgueni ★★★★★ ()
Ответ на: комментарий от anonymous

помню мы тоже с товарищем соревновались. я на руте, она - на питоне.

Бред. Множество людей использующих ROOT делают это в python.

anonymous ()
Ответ на: комментарий от Evgueni

Во-первых, есть класс численных задач где никаких тупых простых действий нет, а скорость счёта критична. Просто исходя из высказываний почитателей Python они его используют исключительно чтобы быстро сделать что-то с кандачка.

Во-вторых, имеются ли какие-нибудь официальные исследования на тему скорости разработки под интерпретируемые и компилируемые языки, а то постоянно все говорят о том что под Python быстрее писать чем под C или C++, но это всего лишь голословные утверждения.

anonymous ()
Ответ на: комментарий от Vudod

программист без английского - как врач без латыни,мне за вас стыдно, а ещё преподаёте, жесть.

cawa ()
Ответ на: комментарий от anonymous

А я и нигде не утверждал, Python - это серебряная пуля для всех случаев жизни, но во многих случаях стабильный скриптов язык с батарейками существенно облегчает жизнь. И да, делается не с кандачка, а то, что необходимо для решения предметной задачи. Это основное.

Evgueni ★★★★★ ()
Ответ на: комментарий от Evgueni

Собственно говоря сегодня с параллельным вычислениями плохо везде.

А потоки в C и C++ вам чем не угодили? Если численная задача допускает параллельное выполнение некоторых своих частей то потоки отлично справляются с этим. Или вы хотите писать код и чтобы сам компилятор его анализировал и автоматически распараллеливал где есть возможность?

anonymous ()
Ответ на: комментарий от anonymous

Замечание: PyROOT весьма и весьма коряво - это собственно говоря ROOT один в один, но действительно для некоторых манипуляций Python весьма полезен, число таких задач ограничено.

Evgueni ★★★★★ ()
Ответ на: комментарий от Evgueni

сегодня с параллельным вычислениями плохо везде

А зачем тогда интересно нужны суперкомпьютеры, раз с параллельностью везде плохо?

anonymous ()
Ответ на: комментарий от cawa

Можно свободно читать и писать по-английски, но в силу привычки или незнания произносить некоторые слова неправильно. Из-за отсутствия большой практики именно в разговорном английском. Например, xerox почти все произносят как ксерокс. И таких примеров масса.

Да даже среди native speaker`ов - https://www.youtube.com/watch?v=emgJtr9tIME в первом комменте срач на тему как произносить char.

pawnhearts ★★★★★ ()
Ответ на: комментарий от Evgueni

боюсь спросить,а причём тут параллельные вычисления?

cawa ()
Ответ на: комментарий от anonymous

Или вы хотите писать код и чтобы сам компилятор его анализировал и автоматически распараллеливал где есть возможность?

This! Но я понимаю, что на сегодня это невозможно, поэтому для реального распараллеливания приходится разбираться с CUDA/OpenCL/MPI и т.д.

Evgueni ★★★★★ ()
Ответ на: комментарий от cawa

Сорри, прочитал OpenCL вместо OpenCV. А потом по аналогии понесло, так как параллелизм реально проблема.

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 1)
Ответ на: комментарий от anonymous

Это разные вещи. Даже если с этим плохо, то это не значит, что этим не пользуются, только вот хождение по граблям там является основным видом спорта и отдыхом от работы.

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

Evgueni ★★★★★ ()
Ответ на: комментарий от Evgueni

Параллельные вычисления не являются сильной стороной Python. Собственно говоря сегодня с параллельным вычислениями плохо везде.

В java все просто зашибись.

The Parallel Java 2 Library (PJ2) is an API and middleware for parallel programming in 100% Java on multicore parallel computers, cluster parallel computers, and hybrid multicore cluster parallel computers. In addition, PJ2 supports programming GPU accelerated parallel computers, with main programs written in Java and GPU kernels written using Nvidia’s CUDA.

anonymous ()
Ответ на: комментарий от Evgueni

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

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.