Один из способов - использовать массив массива . Давайте определим следующее случайное значение ndarray
:
a = np.random.normal(1,2,(4,2))
print(a.round(2))
array([[ 1.41, -0.68],
[-1.53, 2.74],
[ 1.19, 2.66],
[ 2. , 1.26]])
Мы можем определить замаскированный массив с помощью:
ma = np.ma.array(a, mask = a >= 1.5)
print(ma.round(2))
[[1.41 -0.68]
[-1.53 --]
[1.19 --]
[-- 1.26]]
Чтобы иметь дело со строками без значений ниже порога, вы можете сделать:
m = ma.mask.any(axis=1)
# array([ True, True, True, True])
Который будет содержать False
, если в данной строке нет допустимых значений.
А затем возьмите np.argmin
поверх маскированного массива, чтобы получить столбцы с минимальными значениями ниже 1,5:
np.argmin(ma, axis=1)[m]
# array([1, 0, 0, 1])
А для строк вы можете сделать:
np.flatnonzero(m)
# array([0, 1, 2, 3])