[Numpy-discussion] Question about numpy.max(<complex matrix>)
Robert Kern
robert.kern at gmail.com
Fri Sep 21 20:36:09 EDT 2007
Stuart Brorson wrote:
>>> 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
No, that's a Python session log and the objects you are comparing are Python
complex objects. No numpy in sight. Here is what numpy does for its complex
scalar objects:
>>> from numpy import *
>>> a = complex64(2+1j)
>>> b = complex64(2+2j)
>>> a < b
True
> 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?
We do try to keep backwards compatibility.
--
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