# L-3 MCS 275 Fri 15 Jan 2010 : saddle.py

# finding the saddle in a numpy array

from numpy import *

def saddle(A):
   """
   returns coordinates of saddles in A
   maximum in rows, minimum in columns
   """
   S = []
   for i in range(0,A.shape[0]):
      max = A[i,0]; maxcol = 0; 
      for j in range(1,A.shape[1]):
         if(A[i,j] > max):
            max = A[i,j]; maxcol = j
      p = 'max %.1f in row %d, column %d' \
           % (max,i,maxcol)
      is_saddle = True
      for k in range(0,A.shape[0]):
         if(k != i):
            if(A[k,maxcol] < max):
               p = p + ' smaller value in row %d' % k
               is_saddle = False; break
      if is_saddle:
         p = p + ' saddle at (%d,%d)' % (i,maxcol)
         S.append((i,maxcol))
      print p
   return S

f = lambda x,y: (x-5)**2-(y-5)**2
A = fromfunction(f,(10,10))
print 'looking for a saddle in '
print A
s = saddle(A)
print 'saddles : ', s
