0
votes

Comment imprimer le nombre de lignes qui ont toutes leurs valeurs entre un nombre

Bonjour, je suis assez nouveau en python et j'essaie de trouver le nombre de lignes qui ont toutes leurs valeurs entre 0 et 50 (les deux nombres inclus) à partir d'un tableau numpy que j'ai créé.

array([[39, 42, 48, -5, -2, -2, 34,  4, 14, 16],
       [45, 31, 18,  1, 19, 19,  7, -4, 33, 34],
       [18, 41, 19, 12, 32, 20,  8,  3,  4, 15],
       [46, 11, 46,  0, 10, 42, -5, 13, 30, 19],
       [44, 46, 24, 14, 14,  9, 34, 27, -4,  4],
       [27, 26,  5, 47, 18, 30,  6, 45, 23, 29],
       [-5, -5, 31, 48,  0, 33, 35, 47, 12, 10],
       [-1, 36, 37, 26, -4, -4, 34, 36, 30, 33],
       [ 6, 41, 13, 22, -5,  9, 30, 48,  7, 37],
       [15,  6, -1,  1, -1, 42, 47, -2,  7, 31],
       [47, 35,  9, 10, 15, 30, 18, 10,  8, 48],
       [16, 43, 44,  0, 36, 30, -5, 26,  0, 25],
       [-5, 44, 45, 31, 29, 43, 24, -2, 29, 37],
       [ 8, 43, 34, 16,  4, -5,  5, 45, 38, 18],
       [-3, 29, 30, 25, -2, 13, 41, 30, 15, 12],
       [45, 22,  9, 36, -4, 31,  5, 17, 38, 35],
       [ 6, -3, 46, 11, 27, 49, -5, 33, 14, 41],
       [37, 46, 35,  8, 25, 19, -3, -2, 25, 29],
       [38,  8, 43, 35,  3, 14, 26,  3, 21, -3],
       [47, -2, 39,  9, 27, -1, -2, 40,  6, 17]])

Je veux que le code me montre 3 car il n'y a que 3 lignes du tableau qui ont toutes leurs valeurs entre 0 et 50. Quelqu'un peut-il m'aider à faire cela?


0 commentaires

4 Réponses :


2
votes

Vous pouvez parcourir chaque ligne et vérifier si les valeurs se trouvent entre les nombres, par exemple:

from numpy import array

matrix = array([[39, 42, 48, -5, -2, -2, 34,  4, 14, 16],
       [45, 31, 18,  1, 19, 19,  7, -4, 33, 34],
       [18, 41, 19, 12, 32, 20,  8,  3,  4, 15],
       [46, 11, 46,  0, 10, 42, -5, 13, 30, 19],
       [44, 46, 24, 14, 14,  9, 34, 27, -4,  4],
       [27, 26,  5, 47, 18, 30,  6, 45, 23, 29],
       [-5, -5, 31, 48,  0, 33, 35, 47, 12, 10],
       [-1, 36, 37, 26, -4, -4, 34, 36, 30, 33],
       [ 6, 41, 13, 22, -5,  9, 30, 48,  7, 37],
       [15,  6, -1,  1, -1, 42, 47, -2,  7, 31],
       [47, 35,  9, 10, 15, 30, 18, 10,  8, 48],
       [16, 43, 44,  0, 36, 30, -5, 26,  0, 25],
       [-5, 44, 45, 31, 29, 43, 24, -2, 29, 37],
       [ 8, 43, 34, 16,  4, -5,  5, 45, 38, 18],
       [-3, 29, 30, 25, -2, 13, 41, 30, 15, 12],
       [45, 22,  9, 36, -4, 31,  5, 17, 38, 35],
       [ 6, -3, 46, 11, 27, 49, -5, 33, 14, 41],
       [37, 46, 35,  8, 25, 19, -3, -2, 25, 29],
       [38,  8, 43, 35,  3, 14, 26,  3, 21, -3],
       [47, -2, 39,  9, 27, -1, -2, 40,  6, 17]])

output = sum(1 for row in matrix if all(0 <= value <= 50 for value in row))
print(output)
>>> 3


0 commentaires

1
votes
x = array(...)
count = 0
for y in x:
    if (min(y) > -1 and max(y) < 51):
        count += 1
Something like this should give you what you want. 

0 commentaires

1
votes

Cela peut être fait facilement et sans itération en utilisant np.all et np.count_nonzero:

cond = np.all((x < 50) * (x > 0), axis=1)  # check which rows are between 0-50
count = np.count_nonzero(cond)  # counts the number of corresponding rows


0 commentaires

1
votes

vous pouvez utiliser la fonction intégrée sum avec numpy.all :

3

sortie:

sum(np.all((a >= 0) & (a <= 50), axis=1)) # a is your np.array


0 commentaires