[Numpy-discussion] rand argument question

Robert Kern robert.kern at gmail.com
Fri Jun 2 14:50:56 EDT 2006

Alan G Isaac wrote:
> On Fri, 02 Jun 2006, Sven Schreiber apparently wrote: 
>>why doesn't rand accept a shape tuple as argument?  I find 
>>the difference between the argument types of rand and (for 
>>example) zeros somewhat confusing.  ... Can anybody offer 
>>an intuition/explanation? 
> Backward compatability, I believe.  You are not alone in 
> finding this odd and inconsistent.  I am hoping for a change 
> by 1.0, but I am not very hopeful.
> Robert always points out that if you want the consistent 
> interface, you can always import functions from the 'random' 
> module.  I have never been able to understand this as 
> a response to the point you are making.
> I take it the core argument goes something like this:
> - rand and randn are convenience functions
>         * if you do not find them convenient, don't use them
> - they are in wide use, so it is too late to change them
> - testing the first argument to see whether it is a tuple or 
>   an int so aesthetically objectionable that its ugliness 
>   outweighs the benefits users might get from access to 
>   a more consistent interface

My argument does not include the last two points.

- They are in wide use because they are convenient and useful.

- Changing rand() and randn() to accept a tuple like random.random() and
random.standard_normal() does not improve anything. Instead, it adds confusion
for users who are reading code and seeing the same function being called in two
different ways.

- Users who want to see numpy *only* expose a single calling scheme for
top-level functions should instead ask for rand() and randn() to be removed from
the top numpy namespace.

  * Backwards compatibility might prevent this.

> This is one place where I believe a forward looking (i.e., 
> think about new users) vision would force a small change in 
> these *convenience* functions that will have payoffs both in 
> ease of use and in eliminating this recurrent question from 
> discussion lists.

*Changing* the API of rand() and randn() doesn't solve any problem. *Removing*
them might.

Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
 that is made terrible by our own mad attempt to interpret it as though it had
 an underlying truth."
  -- Umberto Eco

More information about the NumPy-Discussion mailing list