ufuncs, iterators

S V N Vishwanathan vishy at mail.rsise.anu.edu.au
Thu Aug 18 22:36:04 CDT 2005

Hi!

>> I am not sure I understand the fine difference. As far as we are
>> concerned, all the operations which we are doing (point wise addition,
>> addition, multiplication etc.) are on the linear operator.

Barry> together (PETSc has this with MatAXPY), but what about, for
Barry> example, pointwise multiply? You could well be correct, but I'd
Barry> like to see the list and what they correspond to in terms of
Barry> linear operators, for example row and column sums what do they
Barry> represent (true they are the multiplication of the matrix (or its
Barry> transpose) by the vector of all ones, but is that a useful
Barry> meaning.

Well I guess the problem is that we are interested in computing matrices
of the form K_{ij} where the i, j th entry is

exp( -1/2\sigma^{2} ||x_{i} - x_{j}||_{2}^{2})

Here X is a huge matrix (possibly sparse) and x_{i} are the rows of
X. Of course, in a purist sense this is not linear algebra being applied
to a linear operator but it makes sense to use pointwise operations to
compute it. No?

Sample code:

n_sq1 = numarray.add.reduce( x1*x1, 1 ) # vector of norm squareds (slightly faster than x1**2)
n_sq2 = numarray.add.reduce( x2*x2, 1 )
n_sq = (-0.5/self.sigma2) * numarray.add.outer( n_sq1, n_sq2 ) # matrix of norm squared sums
res = ip # result (alias)