Как напечатать количество строк, у которых все значения между числами - PullRequest
0 голосов
/ 10 марта 2020

Привет, так что я довольно новичок в python, и я пытаюсь найти количество строк, у которых все их значения находятся в диапазоне 0-50 (оба числа включительно) из массива numpy, который я создал.

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

Я хочу, чтобы код показал мне 3, потому что есть только 3 строки из массива, которые имеют все свои значения в диапазоне 0-50. Кто-нибудь может мне помочь сделать это?

Ответы [ 4 ]

2 голосов
/ 10 марта 2020

Вы можете перебирать каждую строку и проверять, находятся ли значения между числами, например:

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
1 голос
/ 10 марта 2020

Вы можете использовать встроенную функцию sum с numpy .all :

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

выход:

3
1 голос
/ 10 марта 2020

Это можно сделать легко и без итераций, используя np.all и 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
1 голос
/ 10 марта 2020
x = array(...)
count = 0
for y in x:
    if (min(y) > -1 and max(y) < 51):
        count += 1

Нечто подобное должно дать вам то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...