Ответ 1
Посмотрите функция Tom Flannaghan streamplot
. Ниже представлен соответствующий поток в списке пользователей, а также еще один аналогичный фрагмент кода Ray Speth, который делает вещи несколько иначе.
Если у вас есть проблемы со скоростью, возможно, более эффективно использовать некоторые функциональные возможности scipy, а не функции интеграции pure- numpy
, используемые в обоих этих примерах. Однако я этого не пробовал, и они сознательно избегают зависимости от scipy
. (scipy
- довольно тяжелая зависимость по сравнению с numpy
)
Из этого примера:
import matplotlib.pyplot as plt
import numpy as np
from streamplot import streamplot
x = np.linspace(-3,3,100)
y = np.linspace(-3,3,100)
u = -1-x**2+y[:,np.newaxis]
v = 1+x-y[:,np.newaxis]**2
speed = np.sqrt(u*u + v*v)
plt.figure()
plt.subplot(121)
streamplot(x, y, u, v, density=1, INTEGRATOR='RK4', color='b')
plt.subplot(122)
streamplot(x, y, u, v, density=(1,1), INTEGRATOR='RK4', color=u,
linewidth=5*speed/speed.max())
plt.show()
Другой вариант - использовать VTK
. Это ускорило трехмерное построение, поэтому для создания 2D-графика потребуется правильная настройка камеры (что не слишком сложно), и вы не сможете получить векторный вывод.
Mayavi, tvtk и mlab обеспечивают pythonic обертки для VTK. Эти функции имеют множество функций.
Самый простой способ использовать VTK для построения линий тока из массивов numpy - это использовать mayavi.mlab.flow
. На данный момент я пропущу пример, но если вы хотите изучить с помощью VTK, я могу добавить его.