The following script (using your function) raised no exception so it worked! Elegant Alex, thanx.
res = equalize_arrays(msgtmp,ppstmp,255) # class (ppstmp,msgtmp) = res.equalize() # class method for i in range(int(main.xsize)): for j in range(int(main.ysize)): if msgtmp[i,j] == 255 and ppstmp[i,j] != 255: raise "equalize error!" if ppstmp[i,j] == 255 and msgtmp[i,j] != 255: raise "equalize error!" I read up on the putmask function and I don't understand this part: >>> print x [10 1 30 3 50] >>> putmask(x, [1,0,1,0,1], [-1,-2]) >>> print x [-1 1 -1 3 -1] Can you explain why the -2 didn't factor in? /Sheldon Sheldon wrote: > Hi Alex, > > I will code this in a little while and get back to you. Terrific! I saw > this function but I skipped over it without realizing what it could do. > > The Numeric doc is not very good and I am just getting into Python so > your book sounds great especially since it covers Numeric. I will look > into it when I get back to work tomorrow. > > Bye for now, > Sheldon > > Alex Martelli wrote: > > > Sheldon <[EMAIL PROTECTED]> wrote: > > > > > Alex, > > > > > > I am using Numeric and have created 3 arrays: zero((1215,1215),Float) > > > Two arrays are compared and one is used to hold the mean difference > > > between the two compared arrays. Then I compare 290 or 340 pairs of > > > arrays. I know that memory is a problem and that is why I don't open > > > all of these arrays at the same time. I cannot install Numpy due to my > > > working conditions. Sorry I should have made it clear that is was > > > Numeric I was working with. > > > > It's OK, even if the hard-core numeric-python people are all > > evangelizing for migration to numpy (for reasons that are of course > > quite defensible!), I think it's quite OK to stick with good old Numeric > > for the moment (and that's exactly what I do for my own personal use!). > > > > So, anyway, I'll assume you mean your 1215 x 1215 arrays were created by > > calling Numeric.zeros, not "zero" (with no trailing s) which is a name > > that does not exists in Numeric. > > > > Looking back to your original post, let's say that you have two such > > arrays, a and b, both 1215x1215 and of Numeric.Float type, and the > > entries of each array are all worth 1, 2, or 255 (that's how I read your > > original post; if that's not the case, please specify). We want to > > write a function that alters both a and b, specifically setting to 255 > > all entries in each array whose corresponding entries are 255 in the > > other array. > > > > Now that's pretty easy -- for example: > > > > import Numeric > > > > def equalize(a, b, v=255): > > Numeric.putmask(a, b==v, v) > > Numeric.putmask(b, a==v, v) > > > > if __name__ == '__main__': > > a = Numeric.zeros((5,5), Numeric.Float) > > b = Numeric.zeros((5,5), Numeric.Float) > > a[1,2]=a[2,1]=b[3,4]=b[0,2]=255 > > a[3,0]=a[0,0]=1 > > b[0,3]=b[4,4]=2 > > print "Before:" > > print a > > print b > > equalize(a, b) > > print "After:" > > print a > > print b > > > > > > brain:~/pynut alex$ python ab.py > > Before: > > [[ 1. 0. 0. 0. 0.] > > [ 0. 0. 255. 0. 0.] > > [ 0. 255. 0. 0. 0.] > > [ 1. 0. 0. 0. 0.] > > [ 0. 0. 0. 0. 0.]] > > [[ 0. 0. 255. 2. 0.] > > [ 0. 0. 0. 0. 0.] > > [ 0. 0. 0. 0. 0.] > > [ 0. 0. 0. 0. 255.] > > [ 0. 0. 0. 0. 2.]] > > After: > > [[ 1. 0. 255. 0. 0.] > > [ 0. 0. 255. 0. 0.] > > [ 0. 255. 0. 0. 0.] > > [ 1. 0. 0. 0. 255.] > > [ 0. 0. 0. 0. 0.]] > > [[ 0. 0. 255. 2. 0.] > > [ 0. 0. 255. 0. 0.] > > [ 0. 255. 0. 0. 0.] > > [ 0. 0. 0. 0. 255.] > > [ 0. 0. 0. 0. 2.]] > > brain:~/pynut alex$ > > > > Of course I'm using tiny arrays here, for speed of running and ease of > > display and eyeball-checking, but everything should work just as well in > > your case. Care to check and let us know? > > > > Numeric has pretty good documentation (numpy's is probably even better, > > but it is not available for free, so I don't know!), and if you don't > > find that documentation sufficient you might want to have a look to my > > book "Python in a Nutshell" which devotes a chapter to Numeric (it also > > is not available for free, but you can get a subscription to O'Reilly's > > Safari online-books repository, which is free for the first two weeks, > > and lets you look at many books including Python in a Nutshell -- if you > > don't want to pay monthly subscription fees, make sure you cancel your > > trial subscription before two weeks have passed!!!). > > > > I strongly recommend that, in some way or other, you DO get a taste of > > the huge amount of functionality that Numeric provides for you -- with > > the size of computational tasks you're talking about, an investment of > > 2-3 hours spent becoming deeply familiar with everything Numeric offers > > may well repay itself in savings of ten times as much execution time, > > and what other investments offer such ROI as 1000%?-) > > > > > > Alex -- http://mail.python.org/mailman/listinfo/python-list