首页 文章

删除numpy数组中的行(矩阵):如果列j中的值等于k,则删除前面的k行

提问于
浏览
1

我正在使用一个numpy矩阵,我称之为A,由n行和5列组成 .

假设第2列中的所有值都包含正整数或零 . 如果A [j,2]等于k,其中k是大于或等于2的整数,我想从矩阵A中删除前面的k行;即,矩阵A中的行j,j-1,...和j-(k-1) .

注意,如果[j,2] = k,前面的k行肯定会等于0,所以没有'重叠' . 但这些并不是本专栏中唯一等于0的元素 .

有没有人有任何想法?我已经使用过numpy.delete和类似的函数了很多次,但是无法生成这个问题的解决方案 .

例:

A = matrix([[9,9,0,9,9],
    [1,2,1,9,9],
    [8,8,0,2,3],
    [7,7,0,7,8],
    [1,2,0,3,4],
    [6,6,3,6,6],
    [1,2,0,1,2]])

手术后,应该成为:

Anew = matrix([[9,9,0,9,9],
    [1,2,1,9,9],
    [8,8,0,2,3],
    [1,2,0,1,2]])

因为'3'(在A的倒数第二行)意味着3行(即倒数第二行,前两行必须从矩阵中删除 . )

1 回答

  • 1
    import numpy as np
    
    a= np.matrix([[9,9,0,9,9],
        [1,2,1,9,9],
        [8,8,0,2,3],
        [7,7,0,7,8],
        [1,2,0,3,4],
        [6,6,3,6,6],
        [1,2,0,1,2]])
    
    for i in range(0,7):
        if a[i,2]>=2:
            idx=i
            k=a[i,2]
    
    idxL=[]
    
    for j in range(0,k):
        idxL.insert(j,idx)
        idx=idx-1
    a = np.delete(a, (idxL), axis=0)        
    print a
    

    OUTPUT:

    [[9 9 0 9 9]
    
     [1 2 1 9 9]
    
     [8 8 0 2 3]
    
     [1 2 0 1 2]]
    

相关问题