[Numpy-discussion] Indexing empty dimensions with empty arrays

Ralf Gommers ralf.gommers at googlemail.com
Wed Dec 28 03:33:50 EST 2011

2011/12/27 Jordi Gutiérrez Hermoso <jordigh at octave.org>

> On 26 December 2011 14:56, Ralf Gommers <ralf.gommers at googlemail.com>
> wrote:
> >
> >
> > On Mon, Dec 26, 2011 at 8:50 PM, <josef.pktd at gmail.com> wrote:
> >> I have a hard time thinking through empty 2-dim arrays, and don't know
> >> what rules should apply.
> >> However, in my code I might want to catch these cases rather early
> >> than late and then having to work my way backwards to find out where
> >> the content disappeared.
> >
> >
> > Same here. Almost always, my empty arrays are either due to bugs or they
> > signal that I do need to special-case something. Silent passing through
> of
> > empty arrays to all numpy functions is not what I would want.
> I find it quite annoying to treat the empty set with special
> deference. "All of my great-grandkids live in Antarctica" should be
> true for me (I'm only 30 years old). If you decide that is not true
> for me, it leads to a bunch of other logical annoyances up there

Guess you don't mean true/false, because it's neither. But I understand you
want an empty array back instead of an error.

Currently the problem is that when you do get that empty array back, you'll
then use that for something else and it will probably still crash. Many
numpy functions do not check for empty input and will still give
exceptions. My impression is that you're better off handling these where
you create the empty array, rather than in some random place later on. The
alternative is to have consistent rules for empty arrays, and handle them
explicitly in all functions. Can be done, but is of course a lot of work
and has some overhead.

Finally, I note that your exception only occurs for empty arrays with shape
(N, 0). It's not obvious to me if the same rules should apply to shape (0,)
and other shapes, or why those shapes are even useful.


> The rule that shouldn't be special cased is what I described: x[idx1,
> idx2] should be a valid construction if it's true that all elements of
> idx1 and idx2 are integers in the correct range. The sizes of the
> empty matrices are also somewhat obvious.
> Special-casing vacuous truth makes me write annoying special cases.
> Octave doesn't error out for those special cases, and I think it's a
> good thing it doesn't. It's logically consistent.
> - Jordi G. H.
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20111228/c11fd3db/attachment.html>

More information about the NumPy-Discussion mailing list