[Numpy-discussion] RE: default axis for numarray

Paul Barrett Barrett at stsci.edu
Wed Jun 12 08:55:05 EDT 2002

eric jones wrote:

> I think the consistency with Python is less of an issue than it seems.
> I wasn't aware that add.reduce(x) would generated the same results as
> the Python version of reduce(add,x) until Perry pointed it out to me.
> There are some inconsistencies between Python the language and Numeric
> because the needs of the Numeric community.  For instance, slices create
> views instead of copies as in Python.  This was a correct break with
> consistency in a very utilized area of Python because of efficiency.  

<Begin Rant>

I think consistency is an issue, particularly for novices.  You cite the issue 
of slices creating views instead of copies as being the correct choice.  But 
this decision is based solely on the perception that views are 'inherently' more 
efficient than copies and not on reasons of consistency or usability.  I (a 
seasoned user) find view behavior to be annoying and have been caught out on 
this several times.  For example, reversing in-place the elements of any array 
using slices, i.e. A = A[::-1], will give the wrong answer, unless you 
explicitly make a copy before doing the assignment.  Whereas, copy behavior will 
do the right thing.  I suggest that many novices will be caught out by this and 
similar examples, as I have been.  Copy behavior for slices can be just as 
efficient as view behavior, if implemented as copy-on-write.

The beauty of Python is that it allows the developer to spend much more time on 
consistency and usability issues than on implementation issues.  Sadly, I think 
much of Numeric development is based solely on implementation issues to the 
detriment of consistency and usability.

I don't have enough experience to definitely say whether axis=0 should be 
preferred over axis=-1 or vice versa. But is does appear that for the most 
general cases axis=0 is probably preferred.  This is the default for the APL and 
J programming of which Numeric is based.  Should we not continue to follow their 
lead?  It might be nice to see a list of examples where axis=0 is the preferred 
default and the same for axis=-1.

<End Rant>

Paul Barrett, PhD      Space Telescope Science Institute
Phone: 410-338-4475    ESS/Science Software Group
FAX:   410-338-4767    Baltimore, MD 21218

More information about the NumPy-Discussion mailing list