Вы можете использовать замаскированный массив.
максимальное количество чисел <0 </strong> (хотя теперь я вижу, что это не тот вопрос, который вы задавали - см. «Обновление» ниже )
import numpy as np
import numpy.ma as ma
a = np.array(
[[[1,0,-3,8], [4,-1,0,-4], [1,-2,-3,8], [4,1,-2,4], [-4,-1,-2,0]],
[[3,0, 0,-8], [4,3,2,5], [1,2,3,8], [4,1,2,4], [4,1,2,4]]]
)
a_masked = ma.array(a, mask=(a >= 0)) # mask off any values >= 0
print(np.max(a_masked, axis=2)) # max of non-masked values (if any)
дает
[[-3 -1 -2 -2 -1]
[-8 -- -- -- --]]
максимальное количество чисел> 0 (аналогично)
Кому получить максимум любых значений> 0, вы бы сделали то же самое, но со значениями <=0
замаскировано
a_masked = ma.array(a, mask=(a <= 0))
Это дает:
[[8 4 8 4 --]
[3 5 8 4 4]]
, что, очевидно, похоже на максимум без mask, за исключением случаев, когда все значения равны нулю или отрицательны, вы получаете замаскированное значение вместо максимального из существующих значений.
Обновление
Спасибо Ehsan за указание на то, что я неправильно понял вопрос. Вы спрашивали о максимуме чисел больше или меньше нуля - почему-то я неправильно понял это, задав два вопроса:
- максимум чисел больше нуля
- максимум чисел меньше ноль
отсюда
Теперь я понимаю, что вы задаете единственный вопрос:
- максимум чисел больше или меньше (т.е. не равно) нулю
Следовательно, конечно, просто измените условие маски:
a_masked = ma.array(a, mask=(a == 0)) # mask off any values == 0
дает это время:
[[8 4 8 4 -1]
[3 5 8 4 4]]