2017-10-18 132 views
1

我正在使用numpy矩阵,我将其称为A,它由n行和5列组成。在numpy数组(矩阵)中删除行:如果j列中的值等于k,则删除前面的k行

假设列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

对不起,现在包含的示例 –

+0

J是用户给出的权利? –

回答

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]] 
+0

如果您发现答案有帮助,请接受它。谢谢 –