On Thu, Jul 19, 2012 at 5:52 AM, Cheng Li wrote:

Hi All,

I have spot a strange behavior of numpy.fromfunction(). The sample codes are as follows:

>>>  import numpy as np

>>>  def myOnes(i,j):

return 1.0

>>>  a = np.fromfunction(myOnes,(2000,2000))

>>>  a

1.0

Actually what I expected is that the function will return a 2000*2000 2d array with unit value. The returned single float value really confused me. Is this a known bug? The numpy version I used is 1.6.1.

Your function will be called *once*, with arguments that are *arrays* of coordinate values.  It must handle these arrays when it computes the values of the array to be created.

To see what is happening, print the values of i and j from within your function, e.g.:

In [57]: def ijsum(i, j):
....:     print "i =", i
....:     print "j =", j
....:     return i + j
....:

In [58]: fromfunction(ijsum, (3, 4))
i = [[ 0.  0.  0.  0.]
[ 1.  1.  1.  1.]
[ 2.  2.  2.  2.]]
j = [[ 0.  1.  2.  3.]
[ 0.  1.  2.  3.]
[ 0.  1.  2.  3.]]
Out[58]:
array([[ 0.,  1.,  2.,  3.],
[ 1.,  2.,  3.,  4.],
[ 2.,  3.,  4.,  5.]])

Your `myOnes` function will work if you modify it something like this:

In [59]: def myOnes(i, j):
....:     return np.ones(i.shape)
....:

In [60]: fromfunction(myOnes, (3, 4))
Out[60]:
array([[ 1.,  1.,  1.,  1.],
[ 1.,  1.,  1.,  1.],
[ 1.,  1.,  1.,  1.]])

The bug is in the docstring for fromfunction.  In the description of the `function` argument, it says "`function` must be capable of operating on arrays, and should return a scalar value."  But the function should *not* return a scalar value.  It should return an array of values appropriate for the given arguments.

Warren

Regards,

Cheng

_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion