6.20. Заключение

В этой главе были рассмотрены те части numpy и scipy, к которым обращается приложение OpenMV, когда у операции нет встроенного метода в библиотеке изображений:

  • Концепции – что такое ndarray, почему упакованный типизированный буфер превосходит Python-list для численной работы и какой набор типов данных поддерживает камера.

  • Форма и индексация – представления против копий, присваивание срезам для обновлений без выделения памяти, transpose() как правка дескриптора.

  • Математика – поэлементные операторы, универсальные функции вроде sin(), правила вещания, редукции вроде mean() и вспомогательные функции выбора вроде where().

  • Линейная алгебраdot() для умножения матриц, inv() / det() для обращения, а также разложения и решатели в numpy.linalg и scipy.linalg для задач с большей структурой.

  • Обработка сигналовfft(), sosfilt() для цифровой фильтрации и spectrogram() для амплитудных спектров без выделения памяти в потоковом цикле.

  • Кривые и интегрированиеinterp(), polyfit() / polyval(), convolve() для коротких FIR-фильтров, trapz() для интегрирования методом трапеций по дискретизированным данным.

  • Решатели и случайные числаscipy.integrate для квадратуры вызываемого объекта Python, scipy.optimize для поиска корней и минимизации, scipy.special для статистических специальных функций и Generator для псевдослучайной выборки.

  • Изображения – мост to_ndarray() и image.Image для редких случаев, которые библиотека изображений не покрывает.

  • Производительность – малые типы данных, заранее выделенные буферы, операторы на месте, именованные аргументы out= и внимание к перерасходу на булевы маски в потоковых циклах.

Это покрывает универсальную численную работу, на которую опирается остальная часть камеры. numpy – это набор инструментов, к которому обращается приложение, когда у операции нет встроенного метода в Image – произвольное преобразование пикселей, калибровочное решение, FFT буферизованного аудио.