[Numpy-discussion] inplace operations

Travis Oliphant oliphant at ee.byu.edu
Fri Jan 26 17:34:07 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]]
>  
>
Probably can be done (but it's a bit tricky because you have to be 
careful not to write over the result before you need it to calculate the 
difference).

Let 'a' be the array you've given

Try:

b = a[:,1]
b[:0:-1] -= b[5::-1]
b[0] = 0

>Also, can I covert to natural logs in place?
>
>[[1, 2.4849],
> [2, 2.5649],
> [3, 2.6391],
> [4, 2.7081],
> [5, 2.7726],
> [6, 2.7081],
> [7, 2.5649]]
>  
>
Definitely *can't* be done because you are changing from integers to 
double-precision.

If the original array is double precision than,

numpy.log(a[:,1],a[:,1])

should do it (Makes use of the output argument that all ufuncs accept).


-Travis



More information about the Numpy-discussion mailing list