[Numpy-discussion] Deleting a row from a matrix

Travis Oliphant oliphant.travis at ieee.org
Fri Aug 25 09:01:36 CDT 2006


Keith Goodman wrote:
> How do I delete a row (or list of rows) from a matrix object?
>
> To remove the n'th row in octave I use x(n,:) = []. Or n could be a
> vector of rows to remove.
>
> In numpy 0.9.9.2813 x[[1,2],:] = [] changes the values of all the
> elements of x without changing the size of x.
>
> In numpy do I have to turn it around and construct a list of the rows
> I want to keep?
>   
Basically, that is true for now.  

I think it would be worth implementing some kind of function for making 
this easier.

One might think of using:

del a[obj]

But, the problem with both of those approaches is that once you start 
removing arbitrary rows (or n-1 dimensional sub-spaces) from an array 
you very likely will no longer have a chunk of memory that can be 
described using the n-dimensional array memory model.

So, you would have to make memory copies.  This could be done, of 
course, and the data area of "a" altered appropriately.  But, such 
alteration of the memory would break any other objects that have a 
"view" of the memory area of "a."  Right now, there is no way to track 
which objects have such "views", and therefore no good way to tell 
(other than the very conservative reference count) if it is safe to 
re-organize the memory of "a" in this way.

So, "in-place" deletion of array objects would not be particularly 
useful, because it would only work for arrays with no additional 
reference counts (i.e. simple b=a assignment would increase the 
reference count and make it impossible to say del a[obj]).

However, a function call that returned a new array object with the 
appropriate rows deleted (implemented by constructing a new array with 
the remaining rows) would seem to be a good idea. 

I'll place a prototype (named delete) to that effect into SVN soon.

-Travis






More information about the Numpy-discussion mailing list