deleting rows in numpy array

后端 未结 6 1682
自闭症患者
自闭症患者 2020-12-01 00:01

I have an array that might look like this:

ANOVAInputMatrixValuesArray = [[ 0.96488889, 0.73641667, 0.67521429, 0.592875, 
0.53172222], [ 0.78008333, 0.59381         


        
相关标签:
6条回答
  • 2020-12-01 00:11

    This is similar to your original approach, and will use less space than unutbu's answer, but I suspect it will be slower.

    >>> import numpy as np
    >>> p = np.array([[1.5, 0], [1.4,1.5], [1.6, 0], [1.7, 1.8]])
    >>> p
    array([[ 1.5,  0. ],
           [ 1.4,  1.5],
           [ 1.6,  0. ],
           [ 1.7,  1.8]])
    >>> nz = (p == 0).sum(1)
    >>> q = p[nz == 0, :]
    >>> q
    array([[ 1.4,  1.5],
           [ 1.7,  1.8]])
    

    By the way, your line p.delete() doesn't work for me - ndarrays don't have a .delete attribute.

    0 讨论(0)
  • 2020-12-01 00:26

    Here's a one liner (yes, it is similar to user333700's, but a little more straightforward):

    >>> import numpy as np
    >>> arr = np.array([[ 0.96488889, 0.73641667, 0.67521429, 0.592875, 0.53172222], 
                    [ 0.78008333, 0.5938125, 0.481, 0.39883333, 0.]])
    >>> print arr[arr.all(1)]
    array([[ 0.96488889,  0.73641667,  0.67521429,  0.592875  ,  0.53172222]])
    

    By the way, this method is much, much faster than the masked array method for large matrices. For a 2048 x 5 matrix, this method is about 1000x faster.

    By the way, user333700's method (from his comment) was slightly faster in my tests, though it boggles my mind why.

    0 讨论(0)
  • 2020-12-01 00:28

    The simplest way to delete rows and columns from arrays is the numpy.delete method.

    Suppose I have the following array x:

    x = array([[1,2,3],
            [4,5,6],
            [7,8,9]])
    

    To delete the first row, do this:

    x = numpy.delete(x, (0), axis=0)
    

    To delete the third column, do this:

    x = numpy.delete(x,(2), axis=1)
    

    So you could find the indices of the rows which have a 0 in them, put them in a list or a tuple and pass this as the second argument of the function.

    0 讨论(0)
  • 2020-12-01 00:29

    numpy provides a simple function to do the exact same thing: supposing you have a masked array 'a', calling numpy.ma.compress_rows(a) will delete the rows containing a masked value. I guess this is much faster this way...

    0 讨论(0)
  • 2020-12-01 00:29

    I might be too late to answer this question, but wanted to share my input for the benefit of the community. For this example, let me call your matrix 'ANOVA', and I am assuming you're just trying to remove rows from this matrix with 0's only in the 5th column.

    indx = []
    for i in range(len(ANOVA)):
        if int(ANOVA[i,4]) == int(0):
            indx.append(i)
    
    ANOVA = [x for x in ANOVA if not x in indx]
    
    0 讨论(0)
  • 2020-12-01 00:31
    import numpy as np 
    arr = np.array([[ 0.96488889, 0.73641667, 0.67521429, 0.592875, 0.53172222],[ 0.78008333, 0.5938125, 0.481, 0.39883333, 0.]])
    print(arr[np.where(arr != 0.)])
    
    0 讨论(0)
提交回复
热议问题