���� 23/01/2012 07:48 ��, �/� Tony Yu ������:
2012/1/23 Gousios George <ggeo1@…3830…>
���� 23/01/2012 06:52
��, �/� Tony Yu ������:
2012/1/23 Gousios George <ggeo1@…3830…>
����
21/01/2012 07:43 ��, �/� Gousios George ������:
���� 21/01/2012 07:05
��, �/� Tony Yu ������:
���� 21/01/2012 04:54 ��, �/� Tony Yu
������:
Hello ,
i have the following code in
matlab and trying to do it
in
matplotlib.
I have this code in matlab
(in a function showGraphs):
...
m = size(myList, 3);
for k = 1:m
� � g = myList(:, :, k);
� � image(g + 1)
� � axis off
� � axis square
� � M(k) = getframe;
end;
and in another file (another
function):
...
M = showGraphs(grids)
movie(M, 1)
I did so far:
def showGraphs(data):
� � data=sc.array([data])
� � n=sc.shape(data)[2]
� � for k in range(n):
� � � � mydata=data[:,:,k]
� � � �
#plt.imshow(mydata+1) �
�–>> this doesn’t
work
Also ,in order to do the
animation :
grids=...(result from
another function)
result=showGraph(grids)
fig=plt.figure()
ani=animation.FuncAnimation(fig,result,interval=30,blit=True)
plt.show()
Right now the program says
"TypeError: ‘NoneType’
object is not
callable" (it has errors in
the animation call)
What should be my approach
to this in order to have the
animation?
Thank you!
You're getting that error
because the second argument
to FuncAnimation (result
in your example) should be a
function (not always; see
example 2 linked below).
Right now, if your
showGraphs
function is
defined in full, it returns
a value of None, which gets
saved to result
(hence the
error).
You should take a look at
some of the image animation
examples (ex1, ex2).
-Tony
I did now :
def showGraphs(data):
��� data=sc.array([data])
��� n=sc.shape(data)[2]
��� ims=
��� for k in range(n):
������� mydata=data[:,:,k]
������� im=plt.imshow(mydata+1)
������� ims.append([im])
��� return ims
and now it gives me "TypeError:
Invalid dimensions for image data.
Please post short, but executable
examples when possible. I’m not sure
what your data looks like, but your call
to sc.array
is strange (I’m not sure
why you have square brackets, which
effectively adds an unnecessary
dimension to your data).
The code attached below should work.
Cheers,
-Tony
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import
ArtistAnimation
fig = plt.figure()
def showGraphs(data):
��� data = np.asarray(data) #
unnecessary in this example
��� n = np.shape(data)[2]
��� ims = []
��� #for mydata in np.rollaxis(data,
-1):
��� for k in range(n):
������� mydata = data[:, :, k]
������� im = plt.imshow(mydata)
������� ims.append([im])
��� return ims
# 5 frames of a random 20 x 20 image
data = np.random.uniform(size=(20, 20,
5))
ims = showGraphs(data)
ani = ArtistAnimation(fig, ims)
plt.show()
Now,it gives me 2 figures (why 2?) but
empty.(maybe i didn’t convert right the matlab
code below?)
The data in the showGraphs function is the
result from this function (in matlab):
.........
grids = zeros(n, n, t + 1);
grids(:, :, 1) = rest;
for i = 2:(t + 1)
��� Extended = extendLat1(rest);
��� rest = applyExtended(Extended);
��� grids(:, :, i) = rest;
end;
And i did this in python:
�� grids=sc.zeros((area,area,t+1))
��� rest=grids[:,:,0]
��� for i in range(1,t):
������� extended=extend(rest)
������� rest=apply_extend(extended)
������� grids[:,:,i]=rest
��� return grids
Thanks for helping!
Any help?Thanks!
Sorry, but could you be a bit clearer:
* Did the example I provide work for you?
* Assuming it did, are you essentially replacing
data
in my example with grids
in this most
recent example?
* I don't get 2 figures: are you asking about the
code from my last message?
* Please provide a minimal, *executable* example
-Tony
Ok,i 'll try!
1) Yes,your example works fine.
2) Yes,i return grids from another function (work) doing :
��� grids=work(area,...,time)
��� result=showGraphs(grids)
��� ani=ArtistAnimation(fig,result)
��� plt.show()
The contents of the work function are shown above.
I just want to make sure that i have done the conversion
from matlab right.
Maybe the problem is somewhere else?
Thank you.
Did you get 2 figures with my original example, or just in
your modified code? If it’s only in your modified code, then
there’s something you’re not showing which is creating the
extra figure.
Unfortunately, the `work` function you showed in the previous
message is not executable (apply_extend
, extend
, etc.
aren’t defined), which it makes it very difficult to debug. If
my code snippet worked for you, then the only difference is in
how you’ve defined grids
—do you know how it’s different?
-Tony
�
Ok,i am sending you the whole code of the program. (forget the names
of the functions i showed you so far , i use other names).
EMPTY=0������ #empty cell
TREE=1������� #tree cell
BURNING=2���� #burning cell
probTree=0.8� #probability of tree
probBurning=0.001 #a tree ignites with this probability� even if no
neighbor is burning
probLighting=0.0001� #chance that a tree been hit from light
probResistBurn=0.3�� #chance that a tree does not burn even if it's
neighbor burns
t=20
area=50
def spread(cell,N,E,S,W):
�
��� if cell==EMPTY:
������� return EMPTY
��� elif cell==BURNING:
������� return EMPTY
��� else:
������� if (N==BURNING or E==BURNING or S==BURNING or W==BURNING):
����������� if (sc.rand()<probResistBurn):
��������������� return TREE
����������� else:
��������������� return BURNING
������� elif (sc.rand()<probLighting *(1-probResistBurn)):
����������� return BURNING
������� else:
����������� return TREE
�������
def extend(lat):
��� lat = sc.matrix(lat)
��� extendRows= sc.vstack([lat[-1,:], lat, lat[0,:]])
��� extendLat=sc.hstack([extendRows[:,-1], extendRows,
extendRows[:,0]])
��� return extendLat
���
def apply_extend(matr):
��� #matr = sc.matrix(matr)
��� matr=sc.array([matr])
��� area=sc.shape(matr)[0]
��� final=sc.zeros((area,area))
��� for i in range(1,area):
������� for j in range(1,area):
����������� cell=matr[i,j]
����������� N=matr[i-1,j]
����������� E=matr[i,j+1]
����������� S=matr[i+1,j]
����������� W=matr[i,j-1]
����������� final[i-1,j-1]=spread(cell,N,E,S,W)
��� return final
���
def fire(area,probTree,probBurning,probLighting,probResistBurn,t):
���
��� trees_or_burns=sc.rand(area,area)<probTree� # tree or a
burning tree
��� burns=trees_or_burns*(sc.rand(area,area)<probBurning)�� #�
burning tree
��� trees=trees_or_burns-burns����������������������������� # tree
��� empties=sc.ones((area,area))-trees_or_burns������������ # empty
cell
�������
��� forest=empties*EMPTY + trees*TREE + burns*BURNING�� #the whole
forest
���
��� grids=sc.zeros((area,area,t+1))
��� forest=grids[:,:,0]
��� for i in range(1,):
������� extended_forest=extend(forest)
������� forest=apply_extend(extended_forest)
������� grids[:,:,i]=forest
��� return grids
���
def Graph(data):
��� data=sc.array(data)
��� n=sc.shape(data)[2]
��� ims=[]
��� for i in range(n):
������� mydata=data[:,:,i]
������� im=plt.imshow(mydata)
������� ims.append([im])
��� return ims
�����������
if __name__=="__main__":
���
grids=fire(area,probTree,probBurning,probLighting,probResistBurn,t)
��� result=Graph(grids)
��� fig=plt.figure()
���
#ani=animation.FuncAnimation(fig,result,interval=30,blit=True,repeat_delay=1000)
��� ani=ArtistAnimation(fig,result)
��� plt.show()
Also, i am sending you the code in matlab� :
···
On Sat, Jan 21, > > > > > > 2012 at 11:31 AM, Gousios George <ggeo1@...3830...> > > > > > > wrote:
On Sat, > > > > > > > > Jan 21, 2012 at 9:07 AM, > > > > > > > > Gousios George <ggeo1@...3830...> > > > > > > > > wrote: