Как из массива отобрать значения, которые больше заданного значения?
Может, кто-то подскажет?
Дан определенный массив. Пытаюсь отобрать все значения в массиве, которые больше 80. Но выходит ошибка. Что еще можно сделать, чтобы на выходе были все значения больше 80, именно сами значения, а не индексы их расположения?
import numpy as np
scores = np.array([[20, 40, 56, 80, 5, 25, 27, 74, 1],
[98, 67, 100, 8, 56, 34, 82, 100, 7],
[78, 54, 23, 79, 100, 42, 95, 83],
[51, 50, 47, 23, 100, 94, 25, 48, 38, 77],
[90, 87, 41, 89, 52, 5, 17, 28, 99],
[32, 18, 21, 18, 29, 31, 48, 62, 76, 22],
[6, 65, 78, 43, 22, 38, 88, 94, 100],
[77, 28, 39, 41, 81, 45, 54, 98, 12],
[66, 88, 44, 55, 100, 12, 11],
[17, 70, 86, 96, 56, 23, 32, 49, 70, 80],
[20, 24, 76, 50, 29, 40, 3, 2, 5, 11],
[33, 63, 28, 40, 51, 100, 98, 87, 22, 30],
[16, 54, 78, 12, 25, 35, 10, 19, 67],
[100, 88, 24, 33, 47, 56, 62, 34, 77, 53],
[50, 89, 70, 72, 56, 29, 15, 20]])
scores[scores>=80]
Ошибка:
TypeError Traceback (most recent call last)
<ipython-input-2-a045ad76049e> in <module>
----> 1 scores[scores>=80]
TypeError: '>=' not supported between instances of 'list' and 'int'
Ответ на выходе, какой хочу получить:
array([80, 98, 100, 82, 100, 78, 79, 100,
95, 83, 100, 94, 77, 90, 87, 89, 99,
76, 65, 78, 88, 94, 100, 77, 81, 98, 88,
100, 70, 86, 96, 70, 80, 76, 63, 100, 98,
87, 78, 100, 88, 77, 89, 70,
72])
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
Главная проблема в том, что "подсписки" имеют неодинаковую длину. Для того, чтобы создать двумерную Numpy матрицу все подсписки должны быть одинаковой длины (т.е. число столбцов должно совпадать).
В качестве обходного варианта можно из списка списков создать одномерный вектор и работать с ним:
In [76]: x = np.concatenate(scores)
In [77]: x[x>=80]
Out[77]:
array([ 80, 98, 100, 82, 100, 100, 95, 83, 100, 94, 90, 87, 89,
99, 88, 94, 100, 81, 98, 88, 100, 86, 96, 80, 100, 98,
87, 100, 88, 89])
Автор решения: strawdog
→ Ссылка
import numpy as np
import pandas as pd
scores = [[20, 40, 56, 80, 5, 25, 27, 74, 1],
[98, 67, 100, 8, 56, 34, 82, 100, 7],
[78, 54, 23, 79, 100, 42, 95, 83],
[51, 50, 47, 23, 100, 94, 25, 48, 38, 77],
[90, 87, 41, 89, 52, 5, 17, 28, 99],
[32, 18, 21, 18, 29, 31, 48, 62, 76, 22],
[6, 65, 78, 43, 22, 38, 88, 94, 100],
[77, 28, 39, 41, 81, 45, 54, 98, 12],
[66, 88, 44, 55, 100, 12, 11],
[17, 70, 86, 96, 56, 23, 32, 49, 70, 80],
[20, 24, 76, 50, 29, 40, 3, 2, 5, 11],
[33, 63, 28, 40, 51, 100, 98, 87, 22, 30],
[16, 54, 78, 12, 25, 35, 10, 19, 67],
[100, 88, 24, 33, 47, 56, 62, 34, 77, 53],
[50, 89, 70, 72, 56, 29, 15, 20]]
arr = pd.DataFrame(scores).fillna(0).to_numpy()
теперь:
arr[arr>=80]
получим:
array([ 80., 98., 100., 82., 100., 100., 95., 83., 100., 94., 90.,
87., 89., 99., 88., 94., 100., 81., 98., 88., 100., 86.,
96., 80., 100., 98., 87., 100., 88., 89.])