Я просто пытаюсь воспроизвести этот простой пример анимации в Matplotlib, но используя PyPlot в Julia. У меня возникают трудности с определением итератора simData()
, который передается функции funcAnimation
, потому что кажется, что PyPlot не распознает итератор, который я определил в Julia (через Task).
Вот мой подход к определению той же функции simData()
:
function simData()
t_max = 10.0
dt = 0.05
x = 0.0
t = 0.0
function it()
while t < t_max
x = sin(pi*t)
t = t+dt
produce(x,t)
end
end
Task(it)
end
Как вы можете проверить, этот тип итератора теоретически дает те же значения, что и генератор python simData()
в примере (например, пример collect(simData())
). Однако я получил эту ошибку, когда пытаюсь сделать анимацию
LoadError: PyError (:PyObject_Call) <type 'exceptions.TypeError'>
TypeError('PyCall.jlwrap object is not an iterator',)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/animation.py", line 1067, in __init__
TimedAnimation.__init__(self, fig, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/animation.py", line 913, in __init__
*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/animation.py", line 591, in __init__
self._init_draw()
File "/usr/local/lib/python2.7/dist-packages/matplotlib/animation.py", line 1092, in _init_draw
self._draw_frame(next(self.new_frame_seq()))
while loading In[5], in expression starting on line 42
in pyerr_check at /home/diegotap/.julia/v0.4/PyCall/src/exception.jl:56
[inlined code] from /home/diegotap/.julia/v0.4/PyCall/src/exception.jl:81
in pycall at /home/diegotap/.julia/v0.4/PyCall/src/PyCall.jl:402
in call at /home/diegotap/.julia/v0.4/PyCall/src/PyCall.jl:429
Как я уже говорил, проблема в том, что итератор Julia не распознается Python как таковой. У вас есть какое-то представление о том, как это исправить?
PS: Здесь - ноутбук Jupyter с полным кодом, который я использовал для создания анимации.