Stuart Brorson wrote:
I have to agree with Lorenzo. There is no natural ordering of the complex numbers. Any way you order them is arbitrary.
Accepting this, the question then becomes "what should NumPy do when the user tries to do order comparison operations on complex numbers. The problem is that NumPy is schizophrenic. Watch this:
-------------------------- <session log> ---------------------
In [20]: A = numpy.array([3+1j, 1+3j, -1-3j, -1+3j, -3-1j])
In [21]: B = A[numpy.random.permutation(5)]
In [22]:
In [22]: A Out[22]: array([ 3.+1.j, 1.+3.j, -1.-3.j, -1.+3.j, -3.-1.j])
In [23]: B Out[23]: array([-1.+3.j, 3.+1.j, -1.-3.j, 1.+3.j, -3.-1.j])
In [24]: numpy.greater(A, B) Out[24]: array([ True, False, False, False, False], dtype=bool)
In [25]: numpy.maximum(A, B) Out[25]: array([ 3.+1.j, 3.+1.j, -1.-3.j, 1.+3.j, -3.-1.j])
In [26]:
In [26]: 3+1j > -1+3j --------------------------------------------------------------------------- <type 'exceptions.TypeError'> Traceback (most recent call last)
/tmp/test/web/<ipython console> in <module>()
<type 'exceptions.TypeError'>: no ordering relation is defined for complex numbers
---------------------------- </session log> ----------------------
No, numpy is entirely consistent. In[26] has Python's complex numbers, not numpy's. In [1]: from numpy import complex64 In [2]: complex64(3+1j) > complex64(-1+3j) Out[2]: True -- 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