annotate logplot.py @ 15:dc751c2d415e

Hysteresis back to 1 degree, ping pongs otherwise.. Reduce heat on & off times since there are no moving parts to damage. Reduce minimum cool on time to 5 minutes. Undershoot cooling as it appears to have some inertia (whereas heating doesn't)
author darius
date Tue, 23 Oct 2007 01:03:58 +0000
parents de698afbe6fc
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
1 #!/usr/bin/env python
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
2
14
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
3 import re, datetime, time, sys, cPickle, numpy
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
4 import matplotlib
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
5 import matplotlib.figure
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
6 import matplotlib.backends.backend_agg
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
7 import matplotlib.dates
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
8
10
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
9 daterestr = '([0-9]{4}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}): '
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
10 targtre = re.compile(daterestr + 'target temperature - (-?[0-9]+\.[0-9]+)')
14
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
11 templre = re.compile(daterestr + '(-?[0-9]+\.[0-9]+)\s+(-?[0-9]+\.[0-9]+)\s+(-?[0-9]+\.[0-9]+)\s+([a-z-]+)\s+([a-z-]+)')
10
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
12 datefmt = '%Y/%m/%d %H:%M:%S'
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
13 tz = matplotlib.pytz.timezone('Australia/Adelaide')
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
14
14
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
15 #start = time.mktime(time.strptime("2007/09/22 14:00:00", datefmt))
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
16 start = None
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
17 #end = time.mktime(time.strptime("2007/09/30 14:00:00", datefmt))
10
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
18 end = None
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
19
14
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
20 def parselog(f, start, end, times, fermTemps, fridgeTemps, ambTemps, targetTemps, states):
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
21 targetTemp = 18.0 # Have to guess this..
10
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
22
14
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
23 for line in f:
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
24 # Log line?
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
25 m = templre.match(line)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
26 if (m == None):
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
27 # No, might be a target temp line
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
28 m = targtre.match(line)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
29 if (m != None):
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
30 # Parse date portion
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
31 t = datetime.datetime(*time.strptime(m.group(1), datefmt)[0:6])
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
32 if ((start != None and t < start) or (end != None and t > end)):
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
33 continue
10
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
34
14
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
35 targetTemp = float(m.group(2))
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
36 continue
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
37 else:
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
38 # Isn't anything, next!
10
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
39 continue
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
40
14
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
41 # Parse date portion
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
42 t = datetime.datetime(*time.strptime(m.group(1), datefmt)[0:6])
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
43 if ((start != None and t < start) or (end != None and t > end)):
10
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
44 continue
14
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
45
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
46 fermTemp = float(m.group(2))
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
47 fridgeTemp = float(m.group(3))
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
48 ambTemp = float(m.group(4))
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
49 state = m.group(5)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
50
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
51 # Convert to Gregorian days (float) because that is what matplotlib uses
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
52 times.append(matplotlib.dates._to_ordinalf(t))
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
53 fermTemps.append(fermTemp)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
54 fridgeTemps.append(fridgeTemp)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
55 ambTemps.append(ambTemp)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
56 targetTemps.append(targetTemp)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
57 if (state == 'heat'):
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
58 states.append(10)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
59 elif (state == 'idle'):
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
60 states.append(8)
10
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
61 else:
14
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
62 states.append(6)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
63
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
64 return(times, fermTemps, fridgeTemps, ambTemps, targetTemps, states)
10
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
65
14
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
66 def doplot(times, fermTemps, fridgeTemps, ambTemps, targetTemps, states, outfile):
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
67 assert(len(times) == len(fermTemps))
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
68 assert(len(times) == len(fridgeTemps))
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
69 assert(len(times) == len(ambTemps))
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
70 assert(len(times) == len(targetTemps))
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
71 assert(len(times) == len(states))
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
72 nrec = len(times)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
73 print "nrec = %d" % (nrec)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
74 newsz = [1000]
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
75 then = time.time()
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
76 times = rebin(numpy.array(times), newsz)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
77 fermTemps = rebin(numpy.array(fermTemps), newsz)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
78 fridgeTemps = rebin(numpy.array(fridgeTemps), newsz)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
79 ambTemps = rebin(numpy.array(ambTemps), newsz)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
80 targetTemps = rebin(numpy.array(targetTemps), newsz)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
81 states = rebin(numpy.array(states, 'f'), newsz)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
82 now = time.time()
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
83 print "Rebinning took %.2f msec" % ((now - then) * 1000)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
84
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
85 title = "%s to %s (%d -> %d pts)" % (matplotlib.dates._from_ordinalf(times[0]).strftime(datefmt),
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
86 matplotlib.dates._from_ordinalf(times[-1]).strftime(datefmt),
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
87 nrec, len(times))
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
88 print title
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
89
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
90 then = time.time()
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
91 # A figure
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
92 fig = matplotlib.figure.Figure(figsize = (9.0, 5.0))
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
93
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
94 # Create a plot, get some axes
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
95 ax = fig.add_subplot(111)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
96
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
97 # Plot the data onto the axes
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
98 p = ax.plot(times, fermTemps, times, fridgeTemps, times, ambTemps, times, targetTemps, times, states, '.')
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
99 ax.set_title(title, weight = 'bold')
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
100 ax.set_autoscale_on(True)
10
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
101
14
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
102 # Add a formatter
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
103 hoursFmt = matplotlib.dates.DateFormatter('%d %b\n%H:%M')
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
104 ax.xaxis.set_major_formatter(hoursFmt)
10
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
105
14
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
106 # Prettify it
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
107 ax.grid(True)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
108 ax.set_xlabel('Date')
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
109 ax.set_ylabel('Temperature(C)')
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
110
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
111 # Set the legend
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
112 legend = ax.legend((p[0], p[1], p[2], p[3], p[4]), ('Fermenter', 'Fridge', 'Ambient', 'Target', 'State'), 'best')
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
113
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
114 # Render the figure
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
115 canvas = matplotlib.backends.backend_agg.FigureCanvasAgg(fig)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
116 canvas.print_figure(outfile, dpi = 96)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
117 now = time.time()
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
118 print "Plotting took %.2f msec" % ((now - then) * 1000)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
119
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
120 def main():
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
121 logf = open(sys.argv[1], 'r')
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
122 outfile = sys.argv[1][:-3] + 'png'
10
a1e7bb27f6d5 Logfile plotter
darius
parents:
diff changeset
123
14
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
124 try:
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
125 # Try reading the pickled data
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
126 p = cPickle.Unpickler(open("data.pck", "r"))
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
127 then = time.time()
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
128 times, fermTemps, fridgeTemps, ambTemps, targetTemps, states, offs = p.load()
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
129 now = time.time()
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
130 print "Unpickle took %.2f msec" % ((now - then) * 1000)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
131 # Seek up to the last place we parsed
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
132 logf.seek(offs)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
133 del p
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
134 print "Parsed pickle OK"
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
135
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
136 except (IOError, cPickle.UnpicklingError, ValueError):
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
137 # Either the pickle doesn't exist, or it's invalid, start anew
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
138 print "Can't read pickle, starting from scratch"
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
139 times = []
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
140 fermTemps = []
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
141 fridgeTemps = []
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
142 ambTemps = []
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
143 states = []
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
144 targetTemps = []
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
145
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
146 then = time.time()
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
147 parselog(logf, start, end, times, fermTemps, fridgeTemps, ambTemps, targetTemps, states)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
148 now = time.time()
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
149 print "Parselog took %.2f msec" % ((now - then) * 1000)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
150
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
151 # Write the pickle back out
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
152 p = cPickle.Pickler(open("data.pck", "w"), protocol = -1)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
153 then = time.time()
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
154 p.dump((times, fermTemps, fridgeTemps, ambTemps, targetTemps, states, logf.tell()))
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
155 now = time.time()
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
156 print "Pickle took %.2f msec" % ((now - then) * 1000)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
157 del p
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
158
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
159 # Do the plot
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
160 doplot(times, fermTemps, fridgeTemps, ambTemps, targetTemps, states, outfile)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
161
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
162 def rebin(a, newshape):
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
163 '''Rebin an array to a new shape.
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
164 '''
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
165 assert len(a.shape) == len(newshape)
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
166
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
167 slices = [slice(0, old, float(old)/new) for old,new in zip(a.shape,newshape) ]
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
168 coordinates = numpy.mgrid[slices]
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
169 indices = coordinates.astype('i') #choose the biggest smaller integer index
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
170 return a[tuple(indices)]
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
171
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
172 if __name__ == "__main__":
de698afbe6fc Avoid using pylab helper functions to reduce the magic level.
darius
parents: 10
diff changeset
173 main()