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

时间:2017-10-18 09:55:12

标签: python numpy

我正在使用一个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 个答案:

答案 0 :(得分: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

输出:

[[9 9 0 9 9]

 [1 2 1 9 9]

 [8 8 0 2 3]

 [1 2 0 1 2]]