[SciPy-user] Inverting Complex64 array fails on OS X

Andre Radke lists at spicynoodles.net
Sat Jan 14 17:33:55 CST 2006


I'm new to SciPy and as my first project, I chose to port some linear 
algebra code over from MatLab. I ran into some unexpected results 
while inverting an array of type Complex64. Here's a simple test case:

jannu:~ andre$ /usr/local/bin/python
ActivePython 2.4.2 Build 248 (ActiveState Corp.) based on
Python 2.4.2 (#1, Oct  3 2005, 09:39:46)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1666)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>  from scipy import *
>>>  a = array([[1, 1], [-1, -1j]], dtype=Complex64)
>>>  a_inv = linalg.inv(a)
>>>  a
array([[ 1.+0.j,  1.+0.j],
        [-1.+0.j,  0.-1.j]], dtype=complex128)
>>>  a_inv
array([[ 0., -1.],
        [ 1.,  1.]])
>>>  dot (a, a_inv)
array([[ 1.+0.j,  0.+0.j],
        [ 0.-1.j,  1.-1.j]], dtype=complex128)

Inverting this Complex64 matrix surprisingly returns a real matrix. 
The dot product of the matrix and its supposed inverse does not yield 
the unit matrix, but rather a complex matrix whose real part happens 
to be the unit matrix.

It seems like linalg.inv() completely ignored the imaginary part of 
the input matrix.

Switching the data type of the array to Complex32 and repeating the 
calculations yields the correct results:

>>>  b = array([[1, 1], [-1, -1j]], dtype=Complex32)
>>>  b_inv = linalg.inv(b)
>>>  b
array([[ 1.+0.j,  1.+0.j],
        [-1.+0.j,  0.-1.j]], dtype=complex64)
>>>  b_inv
array([[ 0.5-0.5j, -0.5-0.5j],
        [ 0.5+0.5j,  0.5+0.5j]], dtype=complex64)
>>>  dot(b, b_inv)
array([[ 1.+0.j,  0.+0.j],
        [ 0.+0.j,  1.+0.j]], dtype=complex64)

Am I right in assuming that linalg.inv() is supposed to be able to 
deal with Complex64 arrays?

If so, can anybody reproduce the results I got?

This is on an Apple PowerBook G3 (pre-Altivec) running Mac OS X 
10.3.9 with NumPy and SciPy compiled from current svn source 
(0.9.3.1903 and 0.4.4.1550) per Chris' latest instructions on 
new.scipy.org.

I also tried to obtain the ATLAS version and path info as per step 5 
of the troubleshooting hints in the INSTALL.txt file, but ran into 
the following warning and error while running setup_atlas_version.py:

/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/numpy/distutils/misc_util.py:886: 
UserWarning: Use Configuration('linalg','',top_path=None) instead of 
deprecated default_config_dict('linalg','',None)
   warnings.warn('Use Configuration(%s,%s,top_path=%s) instead of '\
Traceback (most recent call last):
   File "setup_atlas_version.py", line 29, in ?
     setup(**configuration())
   File "setup_atlas_version.py", line 13, in configuration
     del config['fortran_libraries']
KeyError: 'fortran_libraries'

When I comment out the offending line in setup_atlas_version.py and 
run it again, the script raises the AtlasNotFoundError exception. I 
haven't figured out yet whether this means that the build process 
indeed failed to locate the Atlas libraries on my system and if so, 
what replacement (if any) it used instead. Any hints on how to do 
this would be appreciated.

Thanks in advance,

-Andre


-- 
Andre Radke + mailto:lists at spicynoodles.net + http://spicynoodles.net/



More information about the SciPy-user mailing list