Как вы печатаете элементы, которые меньше, чем переменная из массива numpy - PullRequest
1 голос
/ 27 февраля 2020

Привет, так что я довольно новичок в python, и для выполнения задания мне нужно напечатать элементы, которые меньше переменной из массива numpy.

Я создал массив случайных чисел размером 20x10 numpy от -5 до 50

x = np.random.randint (-5, 50, (20, 10))
x

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

выше - результат. Теперь я хочу напечатать количество элементов, которые меньше 5 в каждой строке.

Мне удалось сделать это

print (x[0, :] < 5)

[False False False False  True False False False  True  True]

результат, как показано выше, но я хотел, чтобы он показывал число элементов меньше 5. Я хотел, чтобы он дайте мне 3, так как есть 3 элемента.

Может кто-нибудь помочь мне с этим? Спасибо

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Можно использовать np.sum для массивов типа bool, подобных вашему. Итак, сначала я попробовал следующее:

[np.sum(n<5) for n in x]

Это дает мне список [3, 4, 0, 0, 2, 3, 4, 2, 0, 1, 2, 3, 2, 0, 3, 4, 4, 4, 4, 2], который является правильным, но плохая вещь состоит в том, что вам нужно избегать понимания списка в действиях numpy. Вот лучший способ сделать это в numpy:

np.sum(x<5, axis=1)

Эта команда делает массив bool из x, а затем вычисляет значения True для каждой строки вдоль оси y (номер оси 1)

1 голос
/ 27 февраля 2020

Вы можете использовать свою логическую маску для индексации массива, а затем для подсчета элементов. В качестве альтернативы вы можете использовать numpy.where(). Подобно вашему подходу, он даст вам логическую маску, в которой выполняется определенное условие.

Для вашего примера:

indices = numpy.where(x < 3)
values_greater_than_3 = x[indices]
count = len(values_greater_than_3)
print(count)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...