我正在使用一个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行(即倒数第二行+前两行必须从矩阵中删除。)
答案 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]]