[SciPy-user] RE: [Numpy-discussion] Removing rows and columns of a matrix

Nils Wagner wagner.nils at vdi.de
Tue Jul 29 15:03:16 EDT 2003


-------------------  
Nils Wagner writes:  
>   
> In any case I am interested in a reliable  
workaround for this feature.  
>   
> A small example would be appreciated.  
> Thanks in advance.  
>   
Numarray (and Numeric to a certain extent) currently  
is  
centered around what rows or columns you want rather  
than  
those you don't. Writing a reasonably efficient  
function  
to do this in a more convenient way is not hard. Here  
is  
an example for numarray (not tested, nor does it have  
any error checking to ensure the input array has  
sufficient  
dimensions or that the index is within the array  
bounds):  
  
def remove(arr, index, dim=0):  
    """Remove subarray at index and dimension  
specified"""  
    # make selected dimension the first one  
    swparr = swapaxes(arr, 0, dim)  
    indices = range(swparr.shape[0])  
    del indices[index]  
    newarray = swparr[indices]  
    # reorder axes as they originally appeared.  
    return swapaxes(newarray, 0, dim)	  
  
Then you can say  
  
x = remove(x, 5)  
  
to remove the 6th row or  
  
x = remove(x, 4, dim=1)  
  
to remove the 5th column.  
(depending on what you call rows or columns; in the  
examples  
I'm taking an image-oriented view rather than a  
matrix-oriented  
view)  
  
Perry  
  
  
Perry, 
 
Thank you for your reply. Unfortunately, I am not 
familiar with numarray. 
 
This is the output of my test program. 
 
from scipy import * 
from RandomArray import * 
from numarray import * 
 
def remove(arr, index, dim=0): 
    """Remove subarray at index and dimension specified""" 
    # make selected dimension the first one 
    swparr = swapaxes(arr, 0, dim) 
    indices = range(swparr.shape[0]) 
    del indices[index] 
    newarray = swparr[indices] 
    # reorder axes as they originally appeared. 
    return swapaxes(newarray, 0, dim) 
 
#Then you can say 
 
a = rand(5,5) 
print a 
a = remove(a, 2) 
print a 
 
#to remove the 3th row or 
#to remove the 3th column 
 
a = remove(a, 2, dim=1) 
print a 
 
[[ 0.87329948  0.81829292  0.72929943  0.13012239  0.49291104] 
 [ 0.58665377  0.78030288  0.85906255  0.11409029  0.77719343] 
 [ 0.01325159  0.03389675  0.25417367  0.51117259  0.61979091] 
 [ 0.32406124  0.24500449  0.06147733  0.04323368  0.64497042] 
 [ 0.10133368  0.25028452  0.33645368  0.34395722  0.34052679]] 
Traceback (most recent call last): 
  File "nils.py", line 19, in ? 
    a = remove(a, 2) 
  File "nils.py", line 8, in remove 
    swparr = swapaxes(arr, 0, dim) 
  File "/usr/lib/python2.2/site-packages/numarray/generic.py", line 
855, in swapaxes 
    v = _nc.inputarray(array).view() 
  File "/usr/lib/python2.2/site-packages/numarray/numarraycore.py", 
line 310, in inputarray 
    return array(seq, type=type, typecode=typecode, copy=0) 
  File "/usr/lib/python2.2/site-packages/numarray/numarraycore.py", 
line 303, in array 
    raise ValueError("Unknown input type") 
ValueError: Unknown input type 
 
Any idea ? 
 
Nils 
 
 
_______________________________________________  
SciPy-user mailing list  
SciPy-user at scipy.net  
http://www.scipy.net/mailman/listinfo/scipy-user  
  




More information about the SciPy-User mailing list