[Numpy-discussion] Inplace remove some array rows

David Warde-Farley wardefar at iro.umontreal.ca
Sat Mar 12 14:43:11 EST 2011


On 2011-03-12, at 12:43 PM, Dmitrey wrote:

> hi all,
> currently I use
> a = array(m,n)
> ...
> a = delete(a, indices, 0) # delete some rows
> 
> Can I somehow perform the operation in-place, without creating auxiliary array?
> If I'll use
> 
> numpy.compress(condition, a, axis=0, out=a),
> or
> numpy.take(a, indices, axis=0, out=a)
> 
> will the operation be inplace?


a will be the wrong shape to hold the output of either of those operations. You could use a[:len(indices)], and that will be "in-place", though it looks like numpy makes a temporary copy internally to avoid conflicts when the input array and output array share memory (at least in the case of take()). I was expecting

In [15]: a = arange(50).reshape(10, 5)

In [16]: numpy.take(a,[2,0,1],axis=0, out=a[:3])

to place 3 copies of original row 2 in rows 0, 1 and 2. The fact that it doesn't seems to suggest NumPy is being more clever (but also more memory-hungry).

David




More information about the NumPy-Discussion mailing list