2017-10-18 2 views
1

Je travaille avec une matrice chiffrée, que j'appellerai A, composée de n lignes et de 5 colonnes. Supposons que toutes les valeurs de la colonne 2 sont constituées d'entiers positifs ou de zéros. Si A [j, 2] est égal à k, où k est un entier supérieur ou égal à 2, je voudrais faire tomber les k lignes précédentes de la matrice A; c'est-à-dire, les lignes j, j-1, ..., et j- (k-1), de la matrice A.Suppression de lignes dans le tableau numpy (matrice): Suppression des k lignes précédentes si la valeur de la colonne j est égale à k

Notez que si [j, 2] = k, les k lignes précédentes seront certainement égales à 0, il n'y a donc pas de «chevauchement». Mais ce ne sont pas les seuls éléments qui égalent 0 dans cette colonne.

Quelqu'un a-t-il des idées? J'ai utilisé numpy.delete et des fonctions similaires plusieurs fois, mais je ne peux pas générer une solution à ce problème.

Exemple:

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]]) 

après l'opération, il devrait devenir:

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

Parce que le '3' (dans l'avant-dernière rangée de A) signifie que les 3 lignes (à savoir l'avant-dernier + rangée des deux rangées précédentes ont dû être retirés de la matrice)

+1

veuillez partager un exemple de vos données avec la sortie attendue. –

+0

désolé, exemple maintenant inclus –

+0

J est donné par l'utilisateur? –

Répondre

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 

SORTIE:.

[[9 9 0 9 9] 

[1 2 1 9 9] 

[8 8 0 2 3] 

[1 2 0 1 2]] 
+0

Si vous avez trouvé la réponse utile, veuillez l'accepter.Merci –