added Fabians python tutorial scripts
This commit is contained in:
parent
1958569e3c
commit
104717cfe7
46
resources/python/loaddat.py
Normal file
46
resources/python/loaddat.py
Normal file
@ -0,0 +1,46 @@
|
||||
import numpy as np
|
||||
|
||||
def is_float( s ):
|
||||
try:
|
||||
float(s)
|
||||
return True
|
||||
except ValueError:
|
||||
return False
|
||||
|
||||
def loaddat( filename ):
|
||||
""" Load ascii data files into a numpy array
|
||||
"""
|
||||
mdata = {}
|
||||
tdata = []
|
||||
for l in open( filename ) :
|
||||
if l.startswith( "#" ) :
|
||||
if ":" in l :
|
||||
tmp = [e.strip() for e in l[1:].partition(':')]
|
||||
mdata[tmp[0]] = tmp[2]
|
||||
elif l and not l.isspace() :
|
||||
vals = [ float( i ) for i in l.split() if is_float( i ) ]
|
||||
if len( vals ) > 0 :
|
||||
tdata.append( vals[0] )
|
||||
elif len( tdata ) > 0 :
|
||||
break
|
||||
return tdata, mdata
|
||||
|
||||
d,m = loaddat('../Pholidoptera_litoralis/Time_stamps/Chang/sychronization_2013-07-31-102053h_5-msec.dat')
|
||||
|
||||
# the dictionary of meta data:
|
||||
print m
|
||||
print
|
||||
# use the value of a specific metadata item:
|
||||
print 'The animal number was: ', m['Animal']
|
||||
print
|
||||
|
||||
# the data array:
|
||||
print d
|
||||
print
|
||||
|
||||
# the fifth value of the data array:
|
||||
print 'The sixth data value: ', d[0]
|
||||
print
|
||||
|
||||
|
||||
|
46
resources/python/synchronization.py
Normal file
46
resources/python/synchronization.py
Normal file
@ -0,0 +1,46 @@
|
||||
import numpy as np
|
||||
|
||||
def is_float( s ):
|
||||
try:
|
||||
float(s)
|
||||
return True
|
||||
except ValueError:
|
||||
return False
|
||||
|
||||
def loaddat( filename ):
|
||||
""" Load ascii data files into a numpy array
|
||||
"""
|
||||
mdata = {}
|
||||
tdata = []
|
||||
for l in open( filename ) :
|
||||
if l.startswith( "#" ) :
|
||||
if ":" in l :
|
||||
tmp = [e.strip() for e in l[1:].partition(':')]
|
||||
mdata[tmp[0]] = tmp[2]
|
||||
elif l and not l.isspace() :
|
||||
vals = [ float( i ) for i in l.split() if is_float( i ) ]
|
||||
if len( vals ) > 0 :
|
||||
tdata.append( vals[0] )
|
||||
elif len( tdata ) > 0 :
|
||||
break
|
||||
return tdata, mdata
|
||||
|
||||
d,m = loaddat('../Pholidoptera_litoralis/Time_stamps/Chang/sychronization_2013-07-31-102053h_5-msec.dat')
|
||||
|
||||
# the dictionary of meta data:
|
||||
print m
|
||||
print
|
||||
# use the value of a specific metadata item:
|
||||
print 'The animal number was: ', m['Animal']
|
||||
print
|
||||
|
||||
# the data array:
|
||||
print d
|
||||
print
|
||||
|
||||
# the fifth value of the data array:
|
||||
print 'The sixth data value: ', d[0]
|
||||
print
|
||||
|
||||
|
||||
|
22
resources/python/test.dat
Normal file
22
resources/python/test.dat
Normal file
@ -0,0 +1,22 @@
|
||||
# Description : Times of song onsets and offsets since midnight
|
||||
# Species : synchronization
|
||||
# Animal : 5
|
||||
# Experimenter: Chang
|
||||
# Temperature :
|
||||
# Comment :
|
||||
# Date : 2013-08-02
|
||||
# Time : 22:12:24
|
||||
|
||||
#Key
|
||||
# onset index
|
||||
# ms 1
|
||||
79991439 1
|
||||
79993821 2
|
||||
79996020 3
|
||||
79998296 4
|
||||
80000457 5
|
||||
80002639 6
|
||||
80004818 7
|
||||
80006942 8
|
||||
80008997 9
|
||||
80011121 10
|
4
resources/python/tutorial/01FirstProgram.py
Normal file
4
resources/python/tutorial/01FirstProgram.py
Normal file
@ -0,0 +1,4 @@
|
||||
print "Hello World"
|
||||
|
||||
# for the advanced
|
||||
print "%i times hello, %s and %s" % (2, "Jan", "Fabian")
|
79
resources/python/tutorial/02DataStructure.py
Normal file
79
resources/python/tutorial/02DataStructure.py
Normal file
@ -0,0 +1,79 @@
|
||||
|
||||
################## Lists ############################
|
||||
# lists are simple data structures that can hold different data types
|
||||
|
||||
a = [1,2,'hallo']
|
||||
print a
|
||||
|
||||
# lists are accessed by indices, starting with 0
|
||||
print a[0]
|
||||
|
||||
a[0] = 5
|
||||
|
||||
print a
|
||||
|
||||
# lists can be indexed with slices, first index is included, the last is not
|
||||
print a[0:2]
|
||||
|
||||
# if the index is ommitted, then the maximal or minimal index is taken
|
||||
print a[1:]
|
||||
print a[:1]
|
||||
|
||||
# negative indices count downwards from the maximal index
|
||||
print a[:-1]
|
||||
|
||||
# one can also specify steps in slices (start:stop:step)
|
||||
print a[0:3:2]
|
||||
print a[1::2]
|
||||
|
||||
# if new variables are assigned to an existing list, the list is NOT copied
|
||||
b = a
|
||||
b[2] = 0
|
||||
print a
|
||||
|
||||
# if you want to copy lists, use
|
||||
b = list(a)
|
||||
b[2] = 'new stuff'
|
||||
print a
|
||||
print b
|
||||
# lists of lists
|
||||
b = [1,2,3, [4,3,5]]
|
||||
print b[3][1:]
|
||||
|
||||
################### Tuples #####################################
|
||||
# tuples are constant lists. They behave basically like lists but don't allow elements to be set
|
||||
b = (1,2,'hello')
|
||||
print b
|
||||
print b[::2]
|
||||
# b[2] = "test" # error!
|
||||
|
||||
################### Dictionaries ###############################
|
||||
# Dictionaries are like lists that can be accessed with arbitraty
|
||||
# keys. They are initialized with curly brackets and key:value pairs
|
||||
c = {'key1':2, 3.4:'something else', 5:6}
|
||||
print c.keys()
|
||||
print c.values()
|
||||
print c.items()
|
||||
print c
|
||||
print c['key1']
|
||||
c[3.4] = 'again something else'
|
||||
print c
|
||||
|
||||
# again, dictionaries are not copied
|
||||
d = c
|
||||
d[5] = 8
|
||||
print c
|
||||
|
||||
|
||||
############## Numerical types ##################################
|
||||
# mostly, python determines the numerical type of a number. However,
|
||||
# sometimes one needs to pay attention when dealing with integers
|
||||
|
||||
a = 1
|
||||
b = 5
|
||||
print a/b
|
||||
|
||||
# initialization as float or the function float(a) help
|
||||
a = 1.
|
||||
b = 5.
|
||||
print a/b
|
72
resources/python/tutorial/03numpy.py
Normal file
72
resources/python/tutorial/03numpy.py
Normal file
@ -0,0 +1,72 @@
|
||||
# first step: import numpy
|
||||
# there are different ways to do so
|
||||
|
||||
# import numpy --> everything has to be access via e.g. numpy.cos(x)
|
||||
# import numpy as np --> name numpy np, which means that everything can be accessed via e.g. np.cos(x)
|
||||
# from numpy import cos, sin --> only import cosine and sine
|
||||
# from numpy import cos as cosine --> only import cos and name it cosine
|
||||
# from numpy import * --> import everything.
|
||||
|
||||
# for the moment, we use option 5
|
||||
from numpy import *
|
||||
|
||||
# numpy uses arrays which can be though of as lists with a single datatype
|
||||
# they can be initialized form a list
|
||||
a = array([1.,2.,3.])
|
||||
b = array([[1,2],[4,5.]])
|
||||
print a
|
||||
|
||||
# in numpy many commands have the same name as in matlab. For example
|
||||
# for creating base points for plotting, you can use
|
||||
|
||||
x = linspace(-2.,2.,9) # creates an array with 1000 points between -2 and 2
|
||||
|
||||
# arithmetic operation are elementwise, double asterics is power
|
||||
y = 2*x + 2
|
||||
y = x+x
|
||||
y = x**2. - 1.
|
||||
|
||||
|
||||
# matplotlib implements many functions, such as matlab
|
||||
y = cos(x)
|
||||
y = exp(x)
|
||||
print y
|
||||
|
||||
# just like matlab, numpy arrays support logical indexing
|
||||
xp = x[x > 0]
|
||||
yp = log(xp) # example
|
||||
|
||||
xp = x[x > 0]
|
||||
inx=where(x>0)
|
||||
print inx
|
||||
print x[inx]
|
||||
|
||||
# arrays can also be two dimensional
|
||||
x = zeros( (3,2) ) # zeros takes a tuple
|
||||
print x
|
||||
x[2,1] = 1.
|
||||
print x
|
||||
print x > 0
|
||||
print x[x > 0]
|
||||
|
||||
# other useful functions to generate arrays
|
||||
x = random.randn(4,3) # unfortunately, the size specification is implemented inconsistently
|
||||
x = ones( (3,3) )
|
||||
|
||||
|
||||
# another very useful feature is this
|
||||
x = random.randn(3,1) # column vector
|
||||
y = random.randn(1,4) # row vector
|
||||
print x
|
||||
print y
|
||||
print x+y # result is a matrix
|
||||
print x/y
|
||||
|
||||
# works also with 2d arrays and vectors
|
||||
x = random.randn(3,1) # column vector
|
||||
z = random.randn(1,4) # row vector
|
||||
y = random.randn(3,4) # 2d array
|
||||
|
||||
print y-x # columnwise subtraction
|
||||
print y-z # rowwise subtraction
|
||||
|
20
resources/python/tutorial/04plotting.py
Normal file
20
resources/python/tutorial/04plotting.py
Normal file
@ -0,0 +1,20 @@
|
||||
from numpy import *
|
||||
from matplotlib.pyplot import *
|
||||
|
||||
# google matplotlib gallery
|
||||
|
||||
# create basepoints and function values
|
||||
x = linspace(-2., 2., 100)
|
||||
y = (x + 2.)**2 - 5.
|
||||
fig = figure() # create figure
|
||||
ax = fig.add_subplot(1,1,1) # subplot with 1 row, 1 column, and get axes of first plot
|
||||
ax.plot(x,y)
|
||||
|
||||
ax.set_xlabel('x values')
|
||||
ax.set_ylabel('y values')
|
||||
ax.set_title('quadratic function')
|
||||
|
||||
show() # show plot
|
||||
|
||||
fig.savefig( "test.pdf" ) # saves plot into file
|
||||
|
28
resources/python/tutorial/05plotting2.py
Normal file
28
resources/python/tutorial/05plotting2.py
Normal file
@ -0,0 +1,28 @@
|
||||
from numpy import *
|
||||
from matplotlib.pyplot import *
|
||||
|
||||
# create basepoints and function values
|
||||
x = linspace(-2., 2., 100)
|
||||
y = (x + 2.)**2 - 5.
|
||||
y2 = (x + 1.)**2 + 2.3
|
||||
|
||||
fig = figure()
|
||||
ax = fig.add_subplot(1,1,1)
|
||||
|
||||
# 1) additional parameters can either be specified in the correct
|
||||
# order or via named parameters
|
||||
#
|
||||
# 2) If an r preceeds a string, the result is rendered from latex
|
||||
#
|
||||
# 3) Specifying the names argument "label" sets the label for a legend
|
||||
#
|
||||
ax.plot(x, y, color='r', linewidth=2, label=r'$(x+2)^2 - 5$')
|
||||
ax.plot(x, y2, color='b', linewidth=2, label=r'$(x+1)^2 + 2.3$')
|
||||
|
||||
ax.set_xlabel('x values')
|
||||
ax.set_ylabel(r'$f(x)$')
|
||||
ax.set_title('quadratic function')
|
||||
leg = ax.legend()
|
||||
|
||||
show() # show plot
|
||||
|
34
resources/python/tutorial/06functions.py
Normal file
34
resources/python/tutorial/06functions.py
Normal file
@ -0,0 +1,34 @@
|
||||
from numpy import *
|
||||
from matplotlib.pyplot import *
|
||||
|
||||
|
||||
# functions are defined via def (don't forget the :)
|
||||
# return is defined via the return keyword
|
||||
def myfunc(x):
|
||||
tmp = 2*x**3. + 5
|
||||
return tmp
|
||||
|
||||
# when using more parameters one can give them default values
|
||||
def myfunc2(x, a=1., b=5.):
|
||||
return (x - a)**2. + b
|
||||
|
||||
|
||||
############# main program below (old stuff) ##############
|
||||
|
||||
x = linspace(-2., 2., 100)
|
||||
|
||||
fig = figure()
|
||||
ax = fig.add_subplot(1,1,1)
|
||||
|
||||
ax.plot(x, myfunc(x), color='r', linewidth=2, label='myfunc')
|
||||
ax.plot(x, myfunc2(x, 2., 4.), color='b', linewidth=2, label=r'myfunc2 a=2, b=4')
|
||||
ax.plot(x, myfunc2(x, 2.), color='g', linewidth=2, label=r'myfunc2 a=2, b=default')
|
||||
ax.plot(x, myfunc2(x, b=2.), color='y', linewidth=2, label=r'myfunc2 a=default, b=2')
|
||||
|
||||
ax.set_xlabel('x values')
|
||||
ax.set_ylabel(r'$f(x)$')
|
||||
ax.set_title('functions')
|
||||
leg = ax.legend()
|
||||
|
||||
show() # show plot
|
||||
|
55
resources/python/tutorial/07controlStructure.py
Normal file
55
resources/python/tutorial/07controlStructure.py
Normal file
@ -0,0 +1,55 @@
|
||||
from numpy import *
|
||||
|
||||
# if statments are fairly straightforward
|
||||
if True:
|
||||
print "True"
|
||||
|
||||
if False:
|
||||
print "False"
|
||||
|
||||
a = 2
|
||||
if a == 2:
|
||||
print "a equals 2"
|
||||
else:
|
||||
print "a does not equal 2"
|
||||
|
||||
# different conditions are combined via "and" and "or"
|
||||
b = 5
|
||||
|
||||
if a == 2 and b > 4:
|
||||
print "a equals 2 and b is greater than 4"
|
||||
elif b > 3:
|
||||
print "at least b is greater 3"
|
||||
|
||||
# for loops start with general structure "for element in list:"
|
||||
for elem in [1,2,3,4,8]:
|
||||
print elem
|
||||
|
||||
# in many
|
||||
for j in xrange(10):
|
||||
print j
|
||||
|
||||
print 80*'-'
|
||||
# this works e.g. with arrays
|
||||
x = random.randn(10)
|
||||
for rv in x:
|
||||
print rv
|
||||
|
||||
print 80*'-'
|
||||
# for loops also take iterators which can be thought of as lists
|
||||
for i,rx in enumerate(x):
|
||||
print i
|
||||
print x
|
||||
|
||||
print 80*'-'
|
||||
y = random.randn(10)
|
||||
for xy in zip(x,y):
|
||||
print xy
|
||||
|
||||
print 80*'-'
|
||||
|
||||
f = lambda z: z**2 + 3.
|
||||
print [f(elem) for elem in x if elem < 1]
|
||||
|
||||
def quicksort(x):
|
||||
return x if len(x)<=1 else quicksort([e for e in x if e < x[0]]) + [x[0]] + quicksort([e for e in x if e > x[0]])
|
Reference in New Issue
Block a user