Pull to refresh

Comments 28

PinnedPinned comments

попробую разъяснить, кажется предыдущий обсуждающий не понял, что в статье нет единой одной длинной простыни кода. Для каждого тестируемого пакета только код генерации sin()+шум ПРИМЕРНО совпадает, а вся ОБВЯЗКА специфична для каждого пакета и таким образом вместо простыни имеет несколько отдельных самостоятельных программок по ПРИМЕРНО 100 строк. Вероятно возможно написать универсальных код работающий сразу на всех пакетах, но такой задачи не ставилось.

К сожалению не удалось качественно протестировать неплохо выглядящую на первый взгляд PyVista. Ее последние версии перешли на безусловный бэкэнд Trame который при тестировании заработал только на 1 из 4-х колмпьютеров. Надо будет видимо откатиться в прошлое на несколько лет и разбираться с зависимостями для старых версий PyVista когда бэкендом у нее был Panel. И на 2-х разных Mac Intel и M1 также версия с Trame не заработала. Но одно из интересных свойств PyVista что она может экспортировать ИНТЕРАКТИВНЫЙ график с элементами управления GUI в автономный работающий off-line html/javascript Vue.js с поддержкой GUI компонентов (кнопки, слайдеры и т.д.).

PyVista это обертка для библиотеки VTK, которую можно использовать многими способами. И с работоспособностью PyVista проблем нет - у меня много примеров спутниковой интерферометрии доступны на гугл колаб и в докер образе с интерактивной 3д визуализацией в jupyter notebook. После последнего большого обновления гугл колаб я обсуждал с разработчиками PyVista, почему на колабе перестало работать и как починить, можете найти обсуждение, там много интересного предлагалось, в итоге, я нашел работающий вариант и с тех пор не менял его. Смотрите примеры на Google Colab на https://insar.dev, здесь же ссылки на гитхаб и докерхаб.

Спасибо! Не могли бы дать точные ссылки? Чтобы не шерстить весь ваш сайт? Да на коллабе у них пример работает, но там линукс, а я тестирую на Windows и Mac. Проблема на этих системах случилась при пререходе на версию 38.2 Начиная с этой версии в PyVista пропала возможность выбора в качестве БЭКЕНД пакета Panel, а именно на нем все работало. Начиная с этой версии насильно устанавливается JavaScript БЭКЕНД под названием TRAME от тех же разработчиков. Выбрать Panel или VTK уже нельзя! При тестировании у меня TRAME заработал только 1 одном Win 11 Py 3.12 при этом на маках НЕ заработал и на 3-х других Win 7 10 11 НЕ заработал. Причем воспроизвести рабочий конфиг питона на других ПК также не удалось. Ну то есть все пакеты ставятся в нужных версия но TRAME не работает. Никакого VTK в качестве БЭКЕНД выбрать в версиях >=38.2 НЕЛЬЗЯ! А у 38 и более старых проблемы с py 3.12 и версиями numpy и VTK она требует несовместимых версий питон 3.7 VTK 8 и numpy мень 1.20

Добавлю, что в статье есть MayAvi - это рабочая лошадка много лет работает над VTK и она в статье показала один из самых высоких fps, но там вместо линий используется тонкий цилиндр и тем не менее fps 90 !

все конфиги для импорта в анаконду и сам ноутбук со всеми кодами у меня в телеге

Если не лень попробуйте запустить! Конфиг с трамом для питона 3.12

Я каждый день на маках и линукс пользуюсь и рассказанных вами ужасов не заметил :) Прямо по ссылке выше (https://insar.dev) приведен список ноутбуков, открывайте любой. Все они работают на линукс, макос и гуглк колаб с последними numpy и прочими библиотеками. На виндоус нативно это от лукавого, ставьте докер и тоже будет работать.

все конфиги для импорта в анаконду и сам ноутбук со всеми кодами у меня в телеге

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

из 10 пакетов на виндах и маках все заработало сразу из коробки 9 штук. Да с PyVista пришлось 5 мин повозиться, откатил на 0.35 версию и все. Сейчас работает на 30 маках, линукса у нас в лаборатории пока ставить не планируют так что я пока сосредоточусь на маках и винде.

Вот выше указан мой гитхаб репозиторий, в нем рабочий докер конфиг, скрипты github actions для linux и macos, примеры ноутбуков на гугл колаб и так далее. Все это доступно много лет и работает у тысяч пользователей, но вы рассказываете про какие-то жуткие проблемы c PyVista. Кстати, актуальная версия pyvista 0.44.2 и она прекрасно работает с panel, а без VTK не работает вовсе, и то, что вы выше накомментировали, это бред какой-то. У меня в примерах явно используется panel, а VTK как раз и выполняет всю отрисовку, pyvista это просто обертка к VTK.

Вы статьи и все комментарии пишете только ради рекламы очередной помойки (телеграм канала)? Ни мне, ни многим другим это не интересно, тем более, для решения вашей же проблемы.

физическую отрисовку выполняет бэкенд, а не VTK, в указанной вами версии по умолчанию по умолчанию устанавливается JS backend Trame - вы сами почитайте сайт разработчика! там все ясно разъяснено. И мне не нужны никакие нотбуки с их коллаба, и их линуксовые конфиги мне тоже не нужны. На виндах я использую анаконда-конда потому, что там в конфиге указываются точные не только версии, но и точные места откуда скачаны - это вам не пип, это 100% повторяемость конфига, если через конду не работает значит все., остается только ручной подбор версий - мне это не подходит. Пусть это парит разрабов, мне проще перейти на конкурентов которых много, тот же MayAvi или просто на голый VTK у которых на моих нескольких десятках разных компов проблем не было.

Ну-ну, удалите с сервера VTK и посмотрите, что вам Trame отрисует...

Достаточно использовать последнюю доступную версию pyvista и прочих библиотек, а не заниматься ерундой с подбором версий (зачем?). Кстати, на гугл колаб, если вы пытаетесь переустановить предустановленную версию пакета, вам придется перезапускать ноубук, что создает бессмысленные сложности для пользователей. А если пользователь ставит другие библиотеки с фиксированными версиями зависимостей, то и вовсе возникают конфликты, которые ему придется разрешать руками. Поэтому без явной необходимости принято версии зависимостей не указывать. В общем, вместо воинственного невежества лучше почитайте, как работать с pyvista.

с чего вы взяли что у меня какие-то проблемы и я прошу их вас решить. Нет у меня проблем. Протестировал десять пакетов на fps выбрал лучший и это не PyVista а MayAvi+VTK что я сейчас и буду ипользовать, также неплоха PyGame. И еще раз - физическую отрисовку выполняет бэкенд трэйм о чем сказано у разрабов, ваши фантазии на эту темы мне не интересны. И мне не интересно что там вас непринято указывать, в конде там все по умолчанию уже указано так точ не переживайте за конду и их миллион пользователей.

Если это не ошибка, то вы намеренно лжете о проблемах в pyvista? Все работает и я привел пруфы. Если же вы рендеринг html не отличаете от отрисовки изображений, не нужно здесь постить ваш технический бред для рекламы телеграм канала.

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

При разработке 2D графики на Python лимитировать может производительность, особенно если вы стремитесь к высокому количеству кадров в секунду (FPS).

Не понятно, кто кого может лимитировать.

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

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

Ну и, конечно, ссылка на телеграм канал.

отвечу на замечания:

Данные примерно одни и теже, это sin() + шум

методика проста - вывод sin()+шум в виде графика с максимальным fps и измерение этого fps

объем точек соответствует задаче вывода графика звукового сигнала в реальном времени. При 60 гц fps 44100 частоте дискртеизации это 735 точек при меньшей частоте дискретизации будет меньшее кол-во точек, так что с кол-вом точек все Ок.

Что может лимитировть действительно никому не понятно, например 12 fps в matplotlib самой совершенной и мошной ситеме, ведь ее писали одни из лучших программистов в мире и вот 12 fps Ну как так? Может вы нам объясните?

Весь код примерно по 100 строк и меньше для каждого пакета. Думаю это для даже среднего программиста не является огромной простыней. Кроме того спойлер нельзя вставить внутрь тега код. Потому пришлось полностью. но это вопрос не ко мне.

x = np.linspace(0, 10, 1000)
x = np.linspace(0, 2 * np.pi, 100)

Согласитесь, это немного разные количества.

методика проста - вывод sin()+шум в виде графика с максимальным fps и измерение этого fps

объем точек соответствует задаче вывода графика звукового сигнала в реальном времени. При 60 гц fps 44100 частоте дискртеизации это 735 точек при меньшей частоте дискретизации будет меньшее кол-во точек, так что с кол-вом точек все Ок.

Ну так напишите в самом начале о своей методике. В моей практике ограничивающим фактором для выбора библиотек для построения графиков были сотни тысяч точек. И там уже важными становятся другие возможности.

Что может лимитировть действительно никому не понятно, например 12 fps в matplotlib самой совершенной и мошной ситеме, ведь ее писали одни из лучших программистов в мире и вот 12 fps Ну как так? Может вы нам объясните?

Наверное, все таки стоит поправить свое изначальное предложение. Было:

При разработке 2D графики на Python лимитировать может производительность, особенно если вы стремитесь к высокому количеству кадров в секунду (FPS).

Стало (например)

При разработке приложений с отображением 2D графиков на Python лимитировать может производительность библиотек, используемых для отображения, особенно если вы стремитесь к высокому количеству кадров в секунду (FPS).

Вроде как можно
import numpy as np
from mayavi import mlab
import time

# Создаем фигуру и оси
fig = mlab.figure(size=(800, 600), bgcolor=(1, 1, 1))

данном контексте 100 и 1000 мало отличаются так как размер поля вывода примерно 800..1000 по оси Х и все равно будет произведена интерполяция или децимация до данного размера т.е. и 100 и 1000 все равно превратятся в 800 так как будет выведено все равно 800 по оси Х без разрывов, конечно при не const сигнале точек будет больше. Но принципиально это не повлияет на быстродействие по крайней мере при использовании указанных пакетов и кодов в статье. По крайней мере на сигналах похожих на реальные типа sin()+небольшой шум измерения fps показали незначительное отличие. Вероятно если использовать белый шум с постоянным спектром большой амплитуды это приведет к закрашиванию вертикальными линиями всего поля вывода и вероятно приведет к падению fps но на сигналах сильно похожих на обычные для звуковых смеси синус и небольшого уровня шумов падение fps незначительное и изучать данное явление возможно если это интересно будет читателям я буду в другой статье...

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

В matplotlib есть возможности обновления с перерисовкой только изменившихся данных, и производительность перерисовки на порядки выше, чем вы это заявляете. Интерактивные графики с хорошей скоростью обновления можно было на слабом нетбуке 10-15 лет назад делать. Вы наврали про PyVista, matplotlib - что за дешевый пиар? Кому нужны ваши примеры (говно)кода в телеграме, если вы ни черта не знаете и не умеете, кроме как хаять отличные опен сорс продукты?

весь код доступен прямо в статье, можно просто копи-пастить и в телегу вообще не заходить, в телеге просто в одном файле-ноутбуке. Так что ваши наезды на телегу тем более не уместны, что вы в своих комментария к моей статье дважды прорекламировали ваш личный сайт. Кажется спам кликабельными ссылками личными сайтами по комментариям к чужим статья запрещен на Хабре. Про матплотлиб - ну я думаю читатели заметили, что моем коде обновляются только данные по Y. Так что товарищ ваш спам кликабельными ссылками в комментах к чужой статье и есть самый дешевый самопиар.

Кажется спам кликабельными ссылками личными сайтами по комментариям к чужим статья запрещен на Хабре.

Послушайте, вы совсем совесть потеряли, заявляя о запрете ссылок на гитхаб на хабре?! Всякое тут инфоцыгане с телеграм каналами писали, но такого идиотизма еще не было. Легко проверить, что сайт insar.dev это страница github pages репозитория https://github.com/AlexeyPechnikov/pygmtsar

Про матплотлиб - ну я думаю читатели заметили, что моем коде обновляются только данные по Y.

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

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

попробую разъяснить, кажется предыдущий обсуждающий не понял, что в статье нет единой одной длинной простыни кода. Для каждого тестируемого пакета только код генерации sin()+шум ПРИМЕРНО совпадает, а вся ОБВЯЗКА специфична для каждого пакета и таким образом вместо простыни имеет несколько отдельных самостоятельных программок по ПРИМЕРНО 100 строк. Вероятно возможно написать универсальных код работающий сразу на всех пакетах, но такой задачи не ставилось.

Вступлюсь за автора. Имхо упреки несправедливы, код для matplolib с оф. гитхаба

FuncAnimation
...
...
#для каждого кадра:
...
 fig.canvas.draw_idle()
 fig.canvas.start_event_loop(интервал) # Обновляем FPS каждую секунду

https://github.com/matplotlib/matplotlib/blob/main/doc/api/animation_api.rst

на счет вывода текста. Автор на видео показал, что для других 8 пакетов вывод текста не мешает получить fps 90, если для matplolib есть проблемы с быстрым выводом текста, то это проблемы программистов matplolib, а не автора. Кроме того,если смотреть внимательно код автора статьи то видим даже комментарий # Обновляем FPS каждую секугнду. И действительно в коде текст выводится всего один раз в 1 секунду. Напомню, в других пакетах и вывод 90 раз в секунду текста не является проблемой. Если вывод текста 1 раз в секунду сильно тормозит matplotlib то это проблемы программистов matplotlib, а не автора статьи.

Также посмотрев код для VisPy видим что

    while True:
        # Обновляем позиции точек по спирали
        angle += speed
        t = np.linspace(0, 4 * np.pi, num_points)
        x = radius * np.cos(t + angle) * np.cos(0.5 * angle)
        y = radius * np.sin(t + angle) * np.sin(0.5 * angle)
        
        # Обновляем данные линии
        line_data[:, 0] = x
        line_data[:, 1] = y
        line.set_data(line_data)
        
        # Ожидаем следующий кадр
        await asyncio.sleep(1/60)
        canvas.update()

CANVAS.UPDATE() - перерисовка всего канваса каждый кадр не является проблемой и 60 fps легко достигается. То есть для пакета VisPy это не проблема, и если в matplotlib программисты самые гениальные в мире и намного умней программистов из VisPy то почему это должно быть проблемой для Matplotlib?

Спасибо за наводку! Да, значит перепишу Matplotlib используя FuncAnimation и появилась отличная идея как избавиться от вывода текста, ну и пора подключать ИИ как рекомендовали выше. Уже почти сделал, завтра выложу. Предварительно без вывода текста и с использованием встроенной в пакет системы анимации получается порядка 30 fps, а это уже на уровне Plotly и Panel и даже PyVista в режиме Trame при этом это не JS, а PyQT как бэкенд и значит меньше проблем с вкачиванием потока данных.

Код для Matplotlib исправлен, вывод текста убран, анимация сделана на основе встроенных в пакет анимационных функций, а не простым циклом, насильно применяется выбор backend PyQT вместо выбора по умолчанию. Теперь FPS 35!

А зачем все видео примеры в статье в виде ссылок на YouTube, который в России не работает? Или это статья ориентирована на русскоговорящих, но не проживающих в России людей? Вероисповедание не позволяет загрузить видео на тот же Vimeo, или на Peertube(что было бы для айтишника с хабра примером хорошего тона), раз уж всевозможные руютбы считаются зашкваром?

Sign up to leave a comment.

Articles