[Numpy-discussion] Question about numpy.max(<complex matrix>)
Stuart Brorson
sdb at cloud9.net
Fri Sep 21 20:27:51 EDT 2007
>> Is it NumPy's goal to be as compatible with Matlab as possible?
>
> No.
OK, so that's fair enough. But how about self-consistency?
I was thinking about this issue as I was biking home this evening.
To review my question:
>>> a
array([[ 1. +1.j , 1. +2.j ],
[ 2. +1.j , 1.9+1.9j]])
>>> numpy.max(a)
(2+1j)
Why does NumPy return 2+1j, which is the element with the largest real
part? Why not return the element with the largest *magnitude*?
Here's an answer from the list:
> There isn't a single, well-defined (partial) ordering of complex numbers. Both
> the lexicographical ordering (numpy) and the magnitude (Matlab) are useful, but
> the lexicographical ordering has the feature that
>
> (not (a < b)) and (not (b < a)) implies (a == b)
[snip]
Sounds good, but actually NumPy is a little schizophrenic when it
comes to defining an order for complex numbers. Here's another NumPy
session log:
>>> a = 2+1j
>>> b = 2+2j
>>> a>b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: no ordering relation is defined for complex numbers
>>> a<b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: no ordering relation is defined for complex numbers
Hmmmmmm, so no ordering is defined for complex numbers using the > and
< operators, but ordering *is* defined for finding the max of a
complex matrix.
I am not trying to be a pain, but now I wonder if there is a
philosophy behind the way complex numbers are ordered, or if different
developers did their own thing while adding features to NumPy? If so,
that's cool. But it begs the question: will somebody decide to unify
the behaviors at some point in the future? Or are NumPy behaviors --
once defined -- never changed?
I ask because I am writing NumPy code, and I want to know if I will
find the behaviors changing at some point in the future.
Stuart
More information about the NumPy-Discussion
mailing list