Я могу загрузить набор данных iris
из sklearn
с помощью:
In [317]: from sklearn.datasets import load_iris
In [321]: arr = load_iris().data
In [322]: arr.shape
Out[322]: (150, 4)
Результат - массив 2d;первые 5 строк:
In [323]: arr[:5,:]
Out[323]:
array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[5. , 3.6, 1.4, 0.2]])
первый и второй столбцы:
In [324]: sp_l = arr[:,0]
In [325]: sp_w = arr[:,1]
In [326]: sp_l.shape
Out[326]: (150,)
sp_l.any()
просто проверяет, не равны ли значения 0. Я не думаю, что вы этого хотите.
sp_l<=5
проверяет, являются ли значения sp_l
меньшими или равными 5
In [327]: (sp_l<=5).any()
Out[327]: True # at least some are
In [328]: (sp_l<=5).sum()
Out[328]: 32 # there are 32 true values in that test
In [329]: (sp_w<=3).sum()
Out[329]: 83 # and 83 sp_w values are small enough.
Неясно, что вы хотите, но одна возможность состоит в том, что вы хотите строки, где sp_l
равно 5 или меньше, а sp_w
равно 3 или меньше.
In [330]: (sp_l<=5)&(sp_w<=3) # the () and & are important
Out[330]:
array([False, True, False, False, False, False, False, False, True,
False, ... False])
In [331]: ((sp_l<=5)&(sp_w<=3)).sum()
Out[331]: 12
Мы получаем индексы этих строк с where
:
In [332]: idx = np.where(((sp_l<=5)&(sp_w<=3)))
In [333]: idx
Out[333]: (array([ 1, 8, 12, 13, 25, 38, 41, 45, 57, 60, 93, 106]),)
и фактические строки:
In [334]: arr[idx[0]]
Out[334]:
array([[4.9, 3. , 1.4, 0.2],
[4.4, 2.9, 1.4, 0.2],
[4.8, 3. , 1.4, 0.1],
[4.3, 3. , 1.1, 0.1],
[5. , 3. , 1.6, 0.2],
[4.4, 3. , 1.3, 0.2],
[4.5, 2.3, 1.3, 0.3],
[4.8, 3. , 1.4, 0.3],
[4.9, 2.4, 3.3, 1. ],
[5. , 2. , 3.5, 1. ],
[5. , 2.3, 3.3, 1. ],
[4.9, 2.5, 4.5, 1.7]])