[SciPy-dev] Arrays and matrices share memory?

Travis Oliphant oliphant at ee.byu.edu
Wed Oct 19 16:57:17 CDT 2005


Stephen Walton wrote:

>I began tracking down the failures in scipy.test (full new install) this 
>morning on the bus and hit two problems right off, both in expm3.  The 
>first is easy to fix:  line 84 needs to change from
>
>    eA = eye(*A.shape,**{'typecode':t})
>
>to
>    eA = eye(*A.shape,**{'dtype':t})
>
>The second one is more subtle and here's a brief demonstration of the 
>problem:
>
>In [1]:import scipy as S
>
>In [2]:A=S.array([[1.,1],[1,1]])
>
>In [3]:trm = S.mat(A)
>
>In [4]:trm
>Out[4]:
>matrix([[ 1.,  1.],
>       [ 1.,  1.]])
>
>In [5]:A
>Out[5]:
>array([[ 1.,  1.],
>       [ 1.,  1.]])
>
>In [6]:trm is A
>Out[6]:False
>
>In [7]:trm *= 0
>
>In [8]:trm
>Out[8]:
>matrix([[ 0.,  0.],
>       [ 0.,  0.]])
>
>In [9]:A
>Out[9]:
>array([[ 0.,  0.],
>       [ 0.,  0.]])
>
>Notice that A has been set to zeros even though "trm is A" returns 
>False.  My guess, without delving deeply into the code, is that in 
>newcore A and trm are sharing the same array object.  expm3 (and 
>probably many other routines in scipy) depend on B=mat(A) creating a 
>completely new copy of A.  Should this be changed?
>
>  
>
Ah, good catch.  Yes, I believe that mat(A) shares the same data with 
A.  If this was not the default previously, then it needs to change.  

-Travis





More information about the Scipy-dev mailing list