"RonnyM" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> Hi!
>
> Need to vectorize this, but do not have a clue.
>
> a = n*m matrix
> x and y are n and m vectors
>
> Suggestions?
>
>
>
> def fill(a, x, y):
> for i in range(1,a.shape[0]):
> xp = x[i]
> for j in range(a.shape[1]):
> yp = y[j]
> a[i,j] = sin(xp*yp)*exp(-xp*yp) + a[i-1,j]
> return a
>
> Thanks in advance,
>
> Ronny Mandal
>
Something like this, but the first row in a is never modified, is this
correct?
Note: this is a brute force Python attempt at a matrix, using a list of
lists. Look also at the array and numarray modules.
-- Paul
from math import sin,exp
def fill(a,x,y):
aRowCount = len(x)
aColCount = len(y)
#a = [[0]*aColCount for i in range(aRowCount)]
for ii,xp in enumerate(x[1:]):
i = ii+1
for j,yp in enumerate(y):
a[i][j] = sin(xp*yp)*exp(-xp*yp) + a[i-1][j]
return a
or more tersely (note - no side-effect of modifying a in place, makes a new
copy):
def fill2(a,x,y):
fn = lambda t,u,v:sin(t*u)*exp(-t*u) + v
return [a[0]] + [ [ fn(xp,yp,aa) for (yp,aa) in zip(y,arow) ] for
(xp,arow) in zip(x[1:],a[:-1]) ]
--
http://mail.python.org/mailman/listinfo/python-list