# [Numpy-discussion] evaluating a function in a matrix element???

Friedrich Romstedt friedrichromstedt at gmail.com
Thu Mar 18 17:31:24 EDT 2010

```2010/3/18 Frank Horowitz <frank at horow.net>:
> I'm working on a piece of optimisation code where it turns out to be mathematically convenient to have a matrix where a few pre-chosen elements must be computed at evaluation time for the dot product (i.e. matrix multiplication) of a matrix with a vector.

>>> class X:
...     def __mul__(self, other):
...             return numpy.random.random() * other
...     def __rmul__(self, other):
...             return other * numpy.random.random()

Instances of this class calculate the product in-time:

>>> x = X()
>>> x * 1
0.222103712078775
>>> 1 * x
0.044647569053175573

How to use it:

>>> a = numpy.asarray([[X(), X()], [0, 1]])
>>> a
array([[<__main__.X instance at 0x00AABAA8>,
<__main__.X instance at 0x00E76530>],
[0, 1]], dtype=object)

The first row is purely random, the second purely deterministic:

>>> numpy.dot(a, [1, 2])
array([1.60154958363, 2], dtype=object)
>>> numpy.dot(a, [1, 2])
array([2.06294335235, 2], dtype=object)

You can convert back to dtype = numpy.float by result.astype(numpy.float):

>>> numpy.dot(a, [1, 2]).astype(numpy.float)
array([ 1.33217562,  2.        ])

Friedrich

```