Thursday, February 26, 2009

Behold! the power of python

I was writing code to do bootstrapping on a set of data. I wanted a test case where if I asked for one bootstrap I would be returned the original data. lambdas and function references saved me from inefficient code.

if bootstraps == 1:
srri = lambda low, high, size: range(size)
else:
srri = scipy.random.random_integers

for boot in range(bootstraps):
for r in range(n1):
for c in range(n0):
sample_size = trial_result[r][c].size
choices = srri(0, sample_size-1, sample_size)
meas_grid[r,c] = pylab.array(trial_result[r][c][choices],dtype=float).mean()

model_grid[:,:,:,boot], params[:,boot] = \
process_grid(s0, s1, meas_grid)


Instead of

srri = scipy.random.random_integers
if bootstraps == 1:
for r in range(n1):
for c in range(n0):
meas_grid[r,c] = pylab.array(trial_result[r][c],dtype=float).mean()

model_grid[:,:,:,boot], params[:,boot] = \
process_grid(s0, s1, meas_grid)
else:
for boot in range(bootstraps):
for r in range(n1):
for c in range(n0):
sample_size = trial_result[r][c].size
choices = srri(0, sample_size-1, sample_size)
meas_grid[r,c] = pylab.array(trial_result[r][c][choices],dtype=float).mean()

model_grid[:,:,:,boot], params[:,boot] = \
process_grid(s0, s1, meas_grid)


OR
srri = scipy.random.random_integers
for boot in range(bootstraps):
if bootstraps == 1:
for r in range(n1):
for c in range(n0):
meas_grid[r,c] = pylab.array(trial_result[r][c],dtype=float).mean()

model_grid[:,:,:,boot], params[:,boot] = \
process_grid(s0, s1, meas_grid)
else:
for r in range(n1):
for c in range(n0):
sample_size = trial_result[r][c].size
choices = srri(0, sample_size-1, sample_size)
meas_grid[r,c] = pylab.array(trial_result[r][c][choices],dtype=float).mean()

model_grid[:,:,:,boot], params[:,boot] = \
process_grid(s0, s1, meas_grid)

Wednesday, February 25, 2009

Sunday, February 22, 2009

Finally - video chat between a mac and a PC - skype

So we tried google's video chat. The self test worked out on my parent's computer (a PC) and the self test worked out on my mac. Then when we tried the chat neither audio nor video worked.

It was a bit of a disappointment, because it seemed to me it should, going through flash, be platform independent, especially since the self-tests worked out.

What did work was Skype. I'm naturally suspicious of closed source free things - I'm waiting for the day when skype will start charging, but until then : the future is here see the person when you talk to them on the phone. That's what we were promised in the 21st century. Our flying cars and ships to mars arn't here yet, but I'll settle for the video phone on my computer...

Friday, February 20, 2009

Have you tried a different optimizer

Curve fitting looking kinky? Some fits good some fits look like they have been done by a drunk beaver? Try a different optimization routine. scipy.optimize has four to five.

Wednesday, February 18, 2009

Good experience with Apple customer service

MacBook has been acquiring splotches of gray pixels over time. It started within a few months of getting the computer. I ignored it at first but then the problem grew worse. I made an appointment to have it looked at in the Boylston store. The appointment was at 6:00pm but I did have to wait till 6:20pm. They looked at it, told me they have the model in stock and the repair would take 2-3 days. I went home, they called me two hours later and told me the repair was done! I picked it up on the way to work the next day. That's how service should be. The computer had a month left on the orgininal 1 year warranty.

The MIT musuem is so-so

For $7.50 the MIT museum is overpriced for what it is, unless you have kids dying to play with robots. I went mooching round the museum and enjoyed a handful of exhibits.

I most enjoyed the holography exhibition. One of the more impressive ones is a life size one of a singer. I also enjoyed the movie holograms - holograms that change as you move around them.

The mechanical sculptures are a bust. The only one I liked was a miniature chair that assembled and disassembled periodically.

I enjoyed looking at some of the old computer stuff - especially magnetic core memories. A lot of the 'robot artifacts' are indulgent self homages to things that MIT professors built and are not very impressive.

I liked the Harold Edgerton (high speed photography) exhibit.

Starting at 2:00pm there was an interactive robot thing that I didn't go to. Little kids were standing in line patiently and they were taken in in batches and had to wait 15min per batch. I didn't think it wold be appropriate to crash.

Saturday, February 14, 2009

warning: character constant too long for its type

Problem: C++ warning: character constant too long for its type
Solution:
don't drink and drive - multi-byte strings require double quotes in C

I've never got this error before. What is it? Have I uncoverd a bug in gcc? How much money do I get. It turns out that I was drinking and coding. i.e. mixing python and c++. I haven't touched C in a few months. Maybe one. I have been analyzing my data using code written in python. (Aaah python). Any how. I remembered to put semicolons, I remembered whitespaces don't matter nomore, but I forgot that multi-byte strings require double quotes. Aah the joys of bilingualism.

Friday, February 13, 2009

pdb.pm() : debugging python programs after a crash

I haven't got the hang of the visual debugger in pydev, but what I have found most useful is the pdb module and the pdb.pm() command.

Basically, right after your program crashes type pdb.pm() (having done import pdb previously) and you enter the debugger from where you can print variables, manipulate them, run other python statements. Invaluable.

Also, typing 'up' gets you up the stack.

Thursday, February 12, 2009

Physics based flash puzzle game

http://fantasticcontraption.com/

Frequency domain filtering in python

Original signal (buried in 3 kHz noise):

Discrete Fourier Transform:

Get rid of offending noise spikes in frequency domain:


Cleaned signal (black) compared to original noisy signal.


And all this takes a few lines in python+scipy+matplotlib using scipy's signal processing module:


import scipy.signal as ss
import pylab

censor0 = pylab.array([[860,875], [2590,2615],[4330,4350],[5885,5893],[6885,6893]])
censor1 = len(x_orig) - censor0[:,[1,0]]
censor = pylab.concatenate((censor0,censor1))

x_orig = data['currents'][1][1][1][0] #The data
X_orig = ss.fft(x_orig)
X_filt = pylab.array(X_orig)
for n in range(censor.shape[0]):
X_filt[censor[n,0]:censor[n,1]] = 0
x_filt = pylab.ifft(X_filt)

Sunday, February 8, 2009

Install scipy via commandline on mac

ftp http://downloads.sourceforge.net/scipy/scipy-0.7.0rc2-py2.5-macosx10.5.dmg?modtime=1232732858&big_mirror=0

(just copy the link sourceforge gives you on the downloads page)

hdiutil attach scipy-0.7.0rc2-py2.5-macosx10.5.dmg
sudo installer -pkg /Volumes/scipy-0.7.0rc2-py2.5-macosx10.5/scipy-0.7.0rc2-py2.5-macosx10.5.mpkg -target "/"

Friday, February 6, 2009

Initializing a multidimensional list

From here:
r,c = 10,5
A = [ [None]*c for i in range(r) ]
Remember that lists can be jagged (different number of elements in each cell)

Monday, February 2, 2009

Harvard has a new, high technology ID card with your name on it

But, mommy, how do I carry it around?

Harvard decided the old card wasn't good enough and has a new one with two stripes. The new card comes with all sorts of warnings, reminding us that Harvard really made its name from its Law school.I do what a lot of other people do which is to attach it to a lanyard. Our lab has a stock of those rubber grip lanyard so that shouldn't damage this card right? Well, be that as it may, this two stripe thing isn't going to work out.Attaching the lanyard to the middle of the card does not allow proper clearance for both strips and of course attaching the lanyard on one side means you have to detach for the other side.