[SciPy-User] problems with numpy array assignment

Eric Hermes ehermes at chem.wisc.edu
Tue Mar 4 15:25:48 EST 2014


On 3/4/2014 2:18 PM, Gabriele Brambilla wrote:
> So if I do:
>
> B2 = PAS1
> Dx2 = ndimage.gaussian_filter(B2, sigma=[nsmopha, nsmoene])
> B2 = Dx2
>
> B1 = PAS1
> Dx1 = ndimage.gaussian_filter(B1, sigma=[nsmopha, nsmoene])
> B1 = Dx1
>
> Am I applying the smooth two times?
>
No. Based on the code snippets you've posted so far, this is what is 
happening, with comments:

PAS = MYMAP[:,hhh,:]                                        # PAS now 
refers to a slice of array MYMAP
PAS1 = PAS # PAS1 now refers to a slice of array MYMAP
<some things happen to PAS1>
B2 = PAS1 # B2 now refers to a slice of array MYMAP
Dx2 = ndimage.gaussian_filter(B2, sigma=[nsmopha, nsmoene]) # Dx2 is a 
NEW array
B2 = Dx2 # B2 now refers to Dx2.  PAS1 *still* refers to a slice of 
array MYMAP
B1 = PAS1 # B1 now refers to a slice of array MYMAP
Dx1 = ndimage.gaussian_filter(B1, sigma=[nsmopha, nsmoene])# Dx1 is a 
NEW array
B1 = Dx1                                                    # B1 now 
refers to Dx1

Eric
> 2014-03-04 15:13 GMT-05:00 Gabriele Brambilla 
> <gb.gabrielebrambilla at gmail.com <mailto:gb.gabrielebrambilla at gmail.com>>:
>
>     But the changes I make on  PAS=MYMAP[:, hhh. :] will be applied to
>     G=MYMAP[:, :, :]?
>
>     Gabriele
>
>
>     2014-03-04 15:07 GMT-05:00 Gabriele Brambilla
>     <gb.gabrielebrambilla at gmail.com
>     <mailto:gb.gabrielebrambilla at gmail.com>>:
>
>         thanks.
>
>         Gabriele
>
>
>         2014-03-04 15:04 GMT-05:00 Eric Hermes <ehermes at chem.wisc.edu
>         <mailto:ehermes at chem.wisc.edu>>:
>
>             On 3/4/2014 2:00 PM, Gabriele Brambilla wrote:
>>             Hi,
>>
>>             Something strange happens in my code: I have added the
>>             lines after #...
>>
>>             MYMAP is a 3d numpy array
>>             PAS = MYMAP[:, hhh, :]
>>
>>             #multiplying per energy bin width
>>             PAS1 = PAS
>>             for l in nIph:
>>                      PAS1[l,:] = PAS1[l,:]*zz
>>
>>             But this affect the result I get when I elaborate the
>>             data from:
>>
>>             EXCT = MYMAP[:, hhh, :]
>>
>>             is python continuing to modify the original matrix??
>>
>>             Thanks
>>
>>             Gabriele
>>
>>
>>             _______________________________________________
>>             SciPy-User mailing list
>>             SciPy-User at scipy.org  <mailto:SciPy-User at scipy.org>
>>             http://mail.scipy.org/mailman/listinfo/scipy-user
>             Gabriele,
>
>             Numpy arrays are passed as references, so in your code
>             when you modify PAS1 (which inherits the reference to
>             MYMAP from PAS), the changes propogates upwards into
>             MYMAP.  If you want to avoid this, you can explicitly
>             create a copy of the array, either by doing:
>
>             PAS = MYMAP[:,hhh,:].copy()
>
>             or:
>
>             PAS1 = PAS.copy()
>
>             Eric
>
>             -- 
>             Eric Hermes
>             J.R. Schmidt Group
>             Chemistry Department
>             University of Wisconsin - Madison
>
>
>             _______________________________________________
>             SciPy-User mailing list
>             SciPy-User at scipy.org <mailto:SciPy-User at scipy.org>
>             http://mail.scipy.org/mailman/listinfo/scipy-user
>
>
>
>
>
>
> _______________________________________________
> SciPy-User mailing list
> SciPy-User at scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user

-- 
Eric Hermes
J.R. Schmidt Group
Chemistry Department
University of Wisconsin - Madison

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20140304/0320a56a/attachment.html>


More information about the SciPy-User mailing list