Ofek Ron - 6 months ago 87

Python Question

im trying to use fromfunction to create a 5x5 matrix with gaussian values of mu=3 and sig=2, this is my attempt :

`from random import gauss`

import numpy as np

np.fromfunction(lambda i,j: gauss(3,2), (5, 5))

this is the result : 5.365244570434782

as i understand from the docs this should have worked, but i am getting a scalar instead of 5x5 matrix... why? and how to fix this?

Answer

The `numpy.fromfunction`

docs are extremely misleading. Instead of calling your function repeatedly and building an array from the results, `fromfunction`

actually only makes one call to the function you pass it. In that one call, it passes a number of index arrays to your function, instead of individual indices.

Stripping out the docstring, the implementation is as follows:

```
def fromfunction(function, shape, **kwargs):
dtype = kwargs.pop('dtype', float)
args = indices(shape, dtype=dtype)
return function(*args,**kwargs)
```

That means unless your function broadcasts, `numpy.fromfunction`

doesn't do anything like what the docs say it does.