Шаг 179.
Язык Python. Визуализация данных.
Библиотека Mayavi. Работа с pipeline (общие сведения)

    На этом шаге мы рассмотрим организацию работы в конвейерном режиме.

    Вариант работы с библиотекой Mayavi, которого мы придерживались на предыдущих шагах, на самом деле является довольно ограниченным и не позволяет использовать все возможности, которые предоставляет этот инструмент. По сути, функции, с которыми мы познакомились, являются заранее заданными сценариями (шаблонами) работы, дающими определённый результат. Например, если мы работаем с функцией surf(), то передаём ей в качестве входных данных numpy-массивы, а получаем поверхность, которая строится определенным образом по переданным данным и т.п. На более глубоком уровне работа Mayavi представляет собой выполнение ряда операций в конвейерном (pipeline) режиме. Pipeline предполагает последовательность из трёх этапов:

    Для построения pipeline'а библиотека Mayavi представляет инструмент pipeline, который находится в пакете mlab.

    Когда вы вызываете любую функцию из рассмотренных на предыдущих шагах, Mayavi строит соответствующий pipeline, который включает в себя объекты, обеспечивающие работу с нужным источником данных и модуль, который строит модель соответствующего вида.

    Для того чтобы посмотреть на структуру конвейера, нажмите на кнопку "Mayavi pipeline" на панели инструментов сцены (см. рисунок 1). Для примера посмотрим на pipeline, который формируется для функции imshow(). Запустите код программы, приведённый ниже:

import numpy as np
from mayavi import mlab

x, y = np.mgrid[-2:2:0.1, -2:2:0.1]
z = np.cos(x * y) * np.sin(x * y)

mlab.imshow(z)

mlab.show()
Архив с файлом можно взять здесь.

    В результате откроется сцена, представленная на рисунке ниже.


Рис.1. Модель, построенная с помощью функции imshow()

    Нажмите на указанную кнопку на панели инструментов. В окне "Mayavi pipeline" конвейер представляется в виде дерева в левой части окна.


Рис.2. Окно Mayavi pipeline

    В нашем случае конвейер состоит из двух элементов:

    Построим соответствующие pipeline'ы вручную:

import numpy as np
from mayavi import mlab

x, y = np.mgrid[-2:2:0.1, -2:2:0.1]
z = np.cos(x * y) * np.sin(x * y)

src = mlab.pipeline.array2d_source(z)
img = mlab.pipeline.image_actor(src)

mlab.show()
Архив с файлом можно взять здесь.

    Результат выполнения этого кода, будет аналогичный варианту с mlab.imshow().


Рис.3. Результат построения с использованием pipeline

    Фактически строки:

  mlab.imshow(z)
и
  src = mlab.pipeline.array2d_source(z)
  img = mlab.pipeline.image_actor(src)
эквиваленты.

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг