Revision: 5713
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5713&view=rev
Author: fer_perez
Date: 2008-07-06 17:17:57 -0700 (Sun, 06 Jul 2008)
Log Message:
-----------
Add agenda for 2008 SciPy tutorial, plus misc. updates to scripts.
Modified Paths:
--------------
trunk/py4science/examples/fft_imdenoise.py
trunk/py4science/examples/glass_dots1.py
trunk/py4science/examples/lotka_volterra.py
trunk/py4science/examples/numpy_wrap/f2py/example3/Makefile
trunk/py4science/examples/skel/fft_imdenoise_skel.py
trunk/py4science/examples/skel/fortran_wrap/Makefile
trunk/py4science/examples/skel/fortran_wrap/fib3.f
trunk/py4science/examples/skel/glass_dots1_skel.py
trunk/py4science/examples/stock_demo.py
trunk/py4science/examples/stock_records.py
trunk/py4science/examples/weave_blitz.py
trunk/py4science/examples/weave_examples_simple.py
Added Paths:
-----------
trunk/py4science/classes/0808_scipy_agenda.txt
Added: trunk/py4science/classes/0808_scipy_agenda.txt
===================================================================
--- trunk/py4science/classes/0808_scipy_agenda.txt
(rev 0)
+++ trunk/py4science/classes/0808_scipy_agenda.txt 2008-07-07 00:17:57 UTC
(rev 5713)
@@ -0,0 +1,94 @@
+=========================================================
+ Introduction to Scientific Computing in Python - Agenda
+=========================================================
+
+.. contents::
+..
+ 1 Introduction and resources
+ 2 Day 1
+..
+
+Introduction and resources
+==========================
+
+While the tutorial will begin with very basic concepts, we will assume that
+attendees have given the free online `Python tutorial`_ a very decent read, and
+will have installed on their systems all the prerequisite tools.
+
+.. _`Python tutorial`: http://docs.python.org/tut
+
+In addition, the following are good sources of information for the tools we'll
+be using (all are linked from the main `SciPy documentation`_ page):
+
+ * The `STSci tutorial`_ on interactive data analysis.
+ * The tentative `NumPy tutorial`_.
+ * The list of NumPy `functions with examples`_.
+ * The SciPy community cookbook_.
+
+.. _`SciPy documentation`: http://www.scipy.org/Documentation
+.. _`STSci tutorial`: http://www.scipy.org/wikis/topical_software/Tutorial
+.. _`NumPy tutorial`: http://www.scipy.org/Tentative_NumPy_Tutorial
+.. _`functions with examples`: http://www.scipy.org/Numpy_Example_List_With_Doc
+.. _`cookbook`: http://www.scipy.org/Cookbook
+
+
+Initials indicate who presents what:
+
+ * MD: Michael Droetboom
+ * PG: Perry Greenfield
+ * FP: Fernando Perez
+
+
+Day 1
+=====
+
+* Python for scientific computing: A high-level overview of the topic of Python
+ in a scientific context ( simple 30 minute talk).
+
+* Workflow, guided by a simple examples and students typing along. Will show
+ basics of everyday workflow as we cover the core concepts.
+
+ * Basic scalar types: strings and numbers (int, float, complex). Exercise:
+ Walli's infinte product formula for Pi.
+
+ * Basic collections: lists and dicts (mention tuples and sets). Exercise:
+ word frequency counting.
+
+ * Quick review of control flow: if, for, range, while, break, continue.
+
+ * Defining functions. Arguments and docstrings.
+
+ * Reusing your code: every script is a module, '__main__' (notes on module
+ loading and reloading)
+
+ * Exceptions: a core concept in Python, you really can't use the language
+ without them.
+
+ * Debugging your programs:
+ * Ye olde print statement.
+ * %debug in ipython.
+ * %run -d in ipython.
+ * winpdb - a free, cross-platform GUI debugger.
+
+ * Testing your code: reproducible research from the start. Making a habit
+ out of having auto-validated code.
+
+* Introduction to NumPy arrays.
+ * Memory model.
+ * The dtype concept.
+ * Creating arrays.
+ * Basic operations: arithmetic and slicing.
+ * Indexing modes. Views vs. copies.
+ * Functions that operate on arrays: the builtins and making your own.
+ * Saving and reloading arrays on disk.
+
+ Exercises: Trapezoid rule integration. Image denoising using FFTs.
+
+* Working with data
+ * Reading files.
+ * Simple text parsing.
+ * CSV files.
+ * Matplotlib's data loader.
+
+
+* Python packages and modules, the very basics: __init__.py and $PYTHONPATH.
Modified: trunk/py4science/examples/fft_imdenoise.py
===================================================================
--- trunk/py4science/examples/fft_imdenoise.py 2008-07-04 19:20:43 UTC (rev
5712)
+++ trunk/py4science/examples/fft_imdenoise.py 2008-07-07 00:17:57 UTC (rev
5713)
@@ -3,14 +3,13 @@
import sys
-import numpy as N
-import pylab as P
-import scipy as S
+import numpy as np
+from matplotlib import pyplot as plt
def mag_phase(F):
"""Return magnitude and phase components of spectrum F."""
- return (N.absolute(F), N.angle(F))
+ return (np.absolute(F), np.angle(F))
def plot_spectrum(F, amplify=1000):
"""Normalise, amplify and plot an amplitude spectrum."""
@@ -19,19 +18,19 @@
M[M > 1] = 1
print M.shape, M.dtype
- P.imshow(M, P.cm.Blues)
+ plt.imshow(M, plt.cm.Blues)
try:
# Read in original image, convert to floating point for further
# manipulation; imread returns a MxNx4 RGBA image. Since the
# image is grayscale, just extrac the 1st channel
- im = P.imread('data/moonlanding.png').astype(float)[:,:,0]
+ im = plt.imread('data/moonlanding.png').astype(float)[:,:,0]
except:
print "Could not open image."
sys.exit(-1)
# Compute the 2d FFT of the input image
-F = N.fft.fft2(im)
+F = np.fft.fft2(im)
# Now, make a copy of the original spectrum and truncate coefficients.
keep_fraction = 0.1
@@ -52,27 +51,27 @@
# Reconstruct the denoised image from the filtered spectrum, keep only the real
# part for display
-im_new = N.fft.ifft2(ff).real
+im_new = np.fft.ifft2(ff).real
# Show the results
-P.figure()
+plt.figure()
-P.subplot(221)
-P.title('Original image')
-P.imshow(im, P.cm.gray)
+plt.subplot(221)
+plt.title('Original image')
+plt.imshow(im, plt.cm.gray)
-P.subplot(222)
-P.title('Fourier transform')
+plt.subplot(222)
+plt.title('Fourier transform')
plot_spectrum(F)
-P.subplot(224)
-P.title('Filtered Spectrum')
+plt.subplot(224)
+plt.title('Filtered Spectrum')
plot_spectrum(ff)
-P.subplot(223)
-P.title('Reconstructed Image')
-P.imshow(im_new, P.cm.gray)
+plt.subplot(223)
+plt.title('Reconstructed Image')
+plt.imshow(im_new, plt.cm.gray)
-P.savefig('fft_imdenoise.png', dpi=150)
-P.savefig('fft_imdenoise.eps')
-P.show()
+plt.savefig('fft_imdenoise.png', dpi=150)
+plt.savefig('fft_imdenoise.eps')
+plt.show()
Modified: trunk/py4science/examples/glass_dots1.py
===================================================================
--- trunk/py4science/examples/glass_dots1.py 2008-07-04 19:20:43 UTC (rev
5712)
+++ trunk/py4science/examples/glass_dots1.py 2008-07-07 00:17:57 UTC (rev
5713)
@@ -5,17 +5,12 @@
See L. Glass. 'Moire effect from random dots' Nature 223, 578580 (1969).
"""
+import cmath
from numpy import cos, sin, pi, matrix
import numpy as npy
import numpy.linalg as linalg
from pylab import figure, show
-def csqrt(x):
- """
- sqrt func that handles returns sqrt(x)j for x<0
- """
- if x<0: return complex(0, npy.sqrt(abs(x)))
- else: return npy.sqrt(x)
def myeig(M):
"""
@@ -34,12 +29,13 @@
tau = a+d # the trace
delta = a*d-b*c # the determinant
- lambda1 = (tau + csqrt(tau**2 - 4*delta))/2.
- lambda2 = (tau - csqrt(tau**2 - 4*delta))/2.
+ lambda1 = (tau + cmath.sqrt(tau**2 - 4*delta))/2.
+ lambda2 = (tau - cmath.sqrt(tau**2 - 4*delta))/2.
return lambda1, lambda2
# 2000 random x,y points in the interval[-0.5 ... 0.5]
-X1 = matrix(npy.random.rand(2,2000))-0.5
+X1 = matrix(npy.random.rand(2,2000)
+ )-0.5
name = 'saddle'
sx, sy, angle = 1.05, 0.95, 0.
Modified: trunk/py4science/examples/lotka_volterra.py
===================================================================
--- trunk/py4science/examples/lotka_volterra.py 2008-07-04 19:20:43 UTC (rev
5712)
+++ trunk/py4science/examples/lotka_volterra.py 2008-07-07 00:17:57 UTC (rev
5713)
@@ -46,7 +46,7 @@
p.figure()
-p.plot(r, f)
+p.plot(r, f, color='red')
p.xlabel('rabbits')
p.ylabel('foxes')
p.title('phase plane')
@@ -65,8 +65,8 @@
dR = dr(R, F)
dF = df(R, F)
-p.contour(R, F, dR, levels=[0], linewidths=3, colors='black')
-p.contour(R, F, dF, levels=[0], linewidths=3, colors='black')
+p.contour(R, F, dR, levels=[0], linewidths=3, colors='blue')
+p.contour(R, F, dF, levels=[0], linewidths=3, colors='green')
p.ylabel('foxes')
p.title('trajectory, direction field and null clines')
Modified: trunk/py4science/examples/numpy_wrap/f2py/example3/Makefile
===================================================================
--- trunk/py4science/examples/numpy_wrap/f2py/example3/Makefile 2008-07-04
19:20:43 UTC (rev 5712)
+++ trunk/py4science/examples/numpy_wrap/f2py/example3/Makefile 2008-07-07
00:17:57 UTC (rev 5713)
@@ -1,10 +1,7 @@
-#F2PY=f2py
+F2PY=f2py
-F2PY=f2py2.4
-#F2PY=/usr/local/txpython/local/Frameworks/Python.framework/Versions/2.5/bin/f2py
-
clean:
rm -f fib3.pyf example.so
Modified: trunk/py4science/examples/skel/fft_imdenoise_skel.py
===================================================================
--- trunk/py4science/examples/skel/fft_imdenoise_skel.py 2008-07-04
19:20:43 UTC (rev 5712)
+++ trunk/py4science/examples/skel/fft_imdenoise_skel.py 2008-07-07
00:17:57 UTC (rev 5713)
@@ -36,7 +36,7 @@
# channel from the MxNx4 RGBA matrix to represent the grayscale
# intensities
-F = # Compute the 2d FFT of the input image. Look for a 2-d FFT in N.dft
+F = # Compute the 2d FFT of the input image. Look for a 2-d FFT in N.fft.
# Define the fraction of coefficients (in each direction) we keep
keep_fraction = 0.1
Modified: trunk/py4science/examples/skel/fortran_wrap/Makefile
===================================================================
--- trunk/py4science/examples/skel/fortran_wrap/Makefile 2008-07-04
19:20:43 UTC (rev 5712)
+++ trunk/py4science/examples/skel/fortran_wrap/Makefile 2008-07-07
00:17:57 UTC (rev 5713)
@@ -1,10 +1,7 @@
-#F2PY=f2py
+F2PY=f2py
-F2PY=f2py2.4
-#F2PY=/usr/local/txpython/local/Frameworks/Python.framework/Versions/2.5/bin/f2py
-
clean:
rm -f fib3.pyf example.so
Modified: trunk/py4science/examples/skel/fortran_wrap/fib3.f
===================================================================
--- trunk/py4science/examples/skel/fortran_wrap/fib3.f 2008-07-04 19:20:43 UTC
(rev 5712)
+++ trunk/py4science/examples/skel/fortran_wrap/fib3.f 2008-07-07 00:17:57 UTC
(rev 5713)
@@ -19,7 +19,7 @@
ENDDO
END
- SUBROUTINE CUMSUM(X, Y, N)
+C SUBROUTINE CUMSUM(X, Y, N)
C
C COMPUTE THE CUMULATIVE SUM OF X
C
Modified: trunk/py4science/examples/skel/glass_dots1_skel.py
===================================================================
--- trunk/py4science/examples/skel/glass_dots1_skel.py 2008-07-04 19:20:43 UTC
(rev 5712)
+++ trunk/py4science/examples/skel/glass_dots1_skel.py 2008-07-07 00:17:57 UTC
(rev 5713)
@@ -5,15 +5,12 @@
See L. Glass. 'Moire effect from random dots' Nature 223, 578580 (1969).
"""
+import cmath # provides complex math functions
from numpy import cos, sin, pi, matrix
import numpy as npy
import numpy.linalg as linalg
from pylab import figure, show
-def csqrt(x):
- 'sqrt func that handles returns sqrt(x)j for x<0'
- XXX
-
def myeig(M):
"""
compute eigen values and eigenvectors analytically
Modified: trunk/py4science/examples/stock_demo.py
===================================================================
--- trunk/py4science/examples/stock_demo.py 2008-07-04 19:20:43 UTC (rev
5712)
+++ trunk/py4science/examples/stock_demo.py 2008-07-07 00:17:57 UTC (rev
5713)
@@ -38,5 +38,4 @@
# <demo> stop
# Now, make a slightly modified version of the file with cleaner formatting.
# We'll use this later...
-mlab.rec2csv(r,'dap/myserver/data/sample.csv',
- formatd={'date':mlab.FormatString()})
+#
Modified: trunk/py4science/examples/stock_records.py
===================================================================
--- trunk/py4science/examples/stock_records.py 2008-07-04 19:20:43 UTC (rev
5712)
+++ trunk/py4science/examples/stock_records.py 2008-07-07 00:17:57 UTC (rev
5713)
@@ -40,7 +40,7 @@
tickers = 'SPY', 'QQQQ', 'INTC', 'MSFT', 'YHOO', 'GOOG', 'GE', 'WMT', 'AAPL'
# we want to compute returns since 2003, so define the start date
-startdate = datetime.datetime(2003,1,1)
+startdate = datetime.date(2003,1,1)
# we'll store a list of each return and ticker for analysis later
data = [] # a list of (return, ticker) for each stock
Modified: trunk/py4science/examples/weave_blitz.py
===================================================================
--- trunk/py4science/examples/weave_blitz.py 2008-07-04 19:20:43 UTC (rev
5712)
+++ trunk/py4science/examples/weave_blitz.py 2008-07-07 00:17:57 UTC (rev
5713)
@@ -5,12 +5,11 @@
import sys, time
-import numpy
-from numpy import zeros
+import numpy as np
from scipy import weave
-from pylab import subplot, plot, show, legend, xlabel, ylabel, title
+from pylab import figure,subplot, plot, show, legend, xlabel, ylabel, title
-rand = numpy.random.rand
+rand = np.random.rand
Nadds = 12
Nevals = 10
@@ -45,7 +44,7 @@
# can disrupt timings
if useWeave:
# only weave needs to predefine result array
- result= zeros(shape,dtype=float)
+ result= np.empty(shape,dtype=float)
times[0] = now()
for j in evalRng:
blitz(s)
@@ -67,9 +66,10 @@
nn, tn = repeat_nadds(Nadds, Nevals, useWeave=False)
# plot weave versus Numeric
+figure()
ax = subplot(111)
plot(nw, tw, 'go', nn, tn, 'bs')
-legend( ('Weave', 'Numeric') )
+legend( ('Blitz', 'Numpy') )
xlabel('num adds')
ylabel('time (s)')
title('numpy vs weave; repeated adds, shape: %s' % (shape,))
Modified: trunk/py4science/examples/weave_examples_simple.py
===================================================================
--- trunk/py4science/examples/weave_examples_simple.py 2008-07-04 19:20:43 UTC
(rev 5712)
+++ trunk/py4science/examples/weave_examples_simple.py 2008-07-07 00:17:57 UTC
(rev 5713)
@@ -1,9 +1,8 @@
#!/usr/bin/env python
"""Some simple examples of weave.inline use"""
+import numpy as np
from scipy.weave import inline,converters
-import numpy as N
-from pylab import rand
#-----------------------------------------------------------------------------
# Returning a scalar quantity computed from an array.
@@ -37,16 +36,49 @@
inline(code,['num','mat','nrow','ncol'],
type_converters = converters.blitz)
-def main():
- zz = N.zeros([10,10])
+def prod(m, v):
+ #C++ version
+ nrows, ncolumns = m.shape
+ assert v.ndim==1 and ncolumns==v.shape[0],"Shape mismatch in prod"
+
+ res = np.zeros(nrows, float)
+ code = r"""
+ for (int i=0; i<nrows; i++)
+ {
+ for (int j=0; j<ncolumns; j++)
+ {
+ res(i) += m(i,j)*v(j);
+ }
+ }
+ """
+ err = inline(code,['nrows', 'ncolumns', 'res', 'm', 'v'], verbose=2,
+ type_converters=converters.blitz)
+ return res
+
+
+if __name__=='__main__':
+ print 'zz is all zeros'
+ zz = np.zeros([10,10])
print 'tr(zz)=',trace(zz)
- oo = N.ones([4,4],N.float)
+ print 'oo is all ones'
+ oo = np.ones([4,4],float)
print 'tr(oo)=',trace(oo)
- aa = rand(128,128)
+ print 'aa is random'
+ aa = np.random.rand(128,128)
print 'tr(aa)=',trace(aa)
+ print 'tr(aa)=',np.trace(aa),' (via numpy)'
+
+ print
+ print 'Modify oo in place:'
print 'oo:',oo
in_place_mult(3,oo)
print '3*oo:',oo
-if __name__=='__main__':
- main()
+ print
+ print 'Simple matrix-vector multiply'
+ nr,nc = 20,10
+ m = np.random.rand(nr,nc)
+ v = np.random.rand(nc)
+ mv = prod(m,v)
+ mvd = np.dot(m,v)
+ print 'Mat*vec error:',np.linalg.norm(mv-mvd)
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins