[Numpy-discussion] inplace operations
Christopher Barker
Chris.Barker at noaa.gov
Fri Jan 26 17:35:08 CST 2007
BBands wrote:
> If I have a NumPy array like so:
>
> [[1, 12],
> [2, 13],
> [3, 14],
> [4, 15],
> [5, 16],
> [6, 15],
> [7, 14]]
>
> How can I do an inplace diff, ending up with this?
>
> [[1, 0],
> [2, 1],
> [3, 1],
> [4, 1],
> [5, 1],
> [6, -1],
> [7, -1]]
>>> import numpy as N
>>> a = N.array([[1, 12],
... [2, 13],
... [3, 14],
... [4, 15],
... [5, 16],
... [6, 15],
... [7, 14]])
>>>
>>> a
array([[ 1, 12],
[ 2, 13],
[ 3, 14],
[ 4, 15],
[ 5, 16],
[ 6, 15],
[ 7, 14]])
>>> a[1:,1] = a[1:,1] - a[:-1,1]
>>> a
array([[ 1, 12],
[ 2, 1],
[ 3, 1],
[ 4, 1],
[ 5, 1],
[ 6, -1],
[ 7, -1]])
>>> a[0,1] = 0
> Also, can I covert to natural logs in place?
>>> a
array([[ 1., 12.],
[ 2., 13.],
[ 3., 14.],
[ 4., 15.],
[ 5., 16.],
[ 6., 15.],
[ 7., 14.]])
>>> N.log(a[:,1], a[:,1])
array([ 2.48490665, 2.56494936, 2.63905733, 2.7080502 , 2.77258872,
2.7080502 , 2.63905733])
>>> a
array([[ 1. , 2.48490665],
[ 2. , 2.56494936],
[ 3. , 2.63905733],
[ 4. , 2.7080502 ],
[ 5. , 2.77258872],
[ 6. , 2.7080502 ],
[ 7. , 2.63905733]])
All ufuncs (like log() ) take an optional parameter that is the array
you want the output to go to. If you pass in the same array, the
operation happens in place.
By the way, it looks like your first column is an index number. As The
array structure keeps track of that for you, you might just as well
store just the data in a single (N,) shaped array.
-Chris
--
Christopher Barker, Ph.D.
Oceanographer
Emergency Response Division
NOAA/NOS/OR&R (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception
Chris.Barker at noaa.gov
More information about the Numpy-discussion
mailing list