import numpy
Сгенерируем матрицу с данными и матрицу с площадями каждого грид бокса:
data = numpy.random.rand(10,10)
area = numpy.random.rand(10,10)
data
array([[ 0.4799995 , 0.81162532, 0.84395946, 0.34337136, 0.09023133, 0.21080576, 0.07088579, 0.66579443, 0.08733906, 0.77950683], [ 0.84535882, 0.39421111, 0.85293539, 0.80299008, 0.4378775 , 0.95341829, 0.10521339, 0.84771396, 0.55046806, 0.51041121], [ 0.98243964, 0.80530687, 0.34242324, 0.62640743, 0.98845304, 0.92885085, 0.4087861 , 0.50244311, 0.19422892, 0.61583262], [ 0.36363114, 0.42329027, 0.31506576, 0.49397728, 0.44698418, 0.2199662 , 0.13779422, 0.44864527, 0.31840965, 0.34409872], [ 0.03295981, 0.78716262, 0.54203765, 0.67647828, 0.98835482, 0.05189829, 0.20107201, 0.62200009, 0.46657053, 0.32454102], [ 0.78806925, 0.94317756, 0.61225187, 0.87672403, 0.90168935, 0.45257451, 0.97492283, 0.79189891, 0.42008526, 0.87820854], [ 0.75904864, 0.40736762, 0.65415514, 0.99703453, 0.74747502, 0.23825918, 0.51349156, 0.17546054, 0.75734161, 0.27551597], [ 0.04428944, 0.49098957, 0.90246701, 0.80683007, 0.50031729, 0.33472585, 0.93477423, 0.06158024, 0.97823346, 0.51093175], [ 0.47192277, 0.60450342, 0.11473635, 0.1192469 , 0.65966146, 0.61150907, 0.92495853, 0.07063024, 0.90815091, 0.57645134], [ 0.37676253, 0.6044804 , 0.07102357, 0.09464439, 0.61280806, 0.18306206, 0.54140392, 0.87217179, 0.21521987, 0.33831438]])
area
array([[ 7.38875600e-01, 8.66895041e-01, 1.45736862e-01, 1.76406590e-02, 2.31042934e-01, 8.27189335e-01, 6.66045552e-01, 4.70617387e-01, 4.57471020e-01, 6.36755409e-02], [ 4.97484953e-01, 5.04774247e-01, 3.40898054e-04, 6.95313244e-01, 5.77101059e-01, 7.43834332e-01, 5.29791356e-01, 6.39143351e-01, 6.89350852e-01, 6.10153246e-01], [ 4.46935345e-01, 9.09773520e-01, 7.78630934e-02, 8.69769385e-01, 7.19321787e-01, 6.26874407e-01, 5.86375929e-01, 1.11888506e-01, 5.08017548e-01, 8.56709517e-01], [ 7.30588551e-01, 2.91252823e-01, 6.11213168e-01, 3.79039882e-01, 2.31310139e-01, 5.98640320e-01, 9.49797360e-01, 1.69209719e-01, 2.20145666e-01, 1.10855384e-01], [ 4.70045072e-01, 7.68960478e-01, 5.26724780e-01, 4.95179974e-01, 7.34143435e-01, 1.24758181e-01, 8.82244385e-01, 6.33397721e-01, 5.53660738e-01, 5.36925973e-01], [ 1.90188643e-02, 3.92666396e-01, 9.41502147e-01, 9.67436263e-01, 4.36550448e-01, 9.23466157e-01, 3.23958259e-02, 9.82462671e-01, 7.20394194e-01, 5.03092861e-01], [ 3.29882513e-02, 7.72181897e-01, 1.91440033e-03, 6.60714206e-01, 4.30747176e-01, 8.72150220e-01, 7.39062633e-01, 5.44892331e-01, 7.52964781e-01, 4.02845109e-01], [ 3.69483646e-01, 6.90317233e-01, 6.30513965e-01, 8.26849106e-01, 9.17125854e-01, 5.59924689e-01, 4.74026973e-01, 5.08087036e-01, 2.82239635e-01, 1.40022265e-01], [ 5.95516046e-01, 1.90051054e-01, 2.43252315e-02, 2.00951863e-01, 3.69513303e-01, 3.73487188e-01, 4.80464698e-01, 5.89890311e-01, 4.35128233e-01, 1.02463983e-01], [ 2.05023751e-01, 8.62150888e-01, 5.27276588e-01, 3.56412550e-01, 6.65238604e-01, 8.97178270e-02, 8.55718266e-01, 6.49181334e-01, 4.47994757e-01, 3.62020433e-01]])
Найдём индексы значений для data, где data больше 0.2 и меньше 0.8
i,j = numpy.where((data>0.2)&(data<0.8))
Проверим, действительно ли значения соответствующие этим индексам удовлетворяют нашим условиям:
data[i,j]
array([ 0.4799995 , 0.34337136, 0.21080576, 0.66579443, 0.77950683, 0.39421111, 0.4378775 , 0.55046806, 0.51041121, 0.34242324, 0.62640743, 0.4087861 , 0.50244311, 0.61583262, 0.36363114, 0.42329027, 0.31506576, 0.49397728, 0.44698418, 0.2199662 , 0.44864527, 0.31840965, 0.34409872, 0.78716262, 0.54203765, 0.67647828, 0.20107201, 0.62200009, 0.46657053, 0.32454102, 0.78806925, 0.61225187, 0.45257451, 0.79189891, 0.42008526, 0.75904864, 0.40736762, 0.65415514, 0.74747502, 0.23825918, 0.51349156, 0.75734161, 0.27551597, 0.49098957, 0.50031729, 0.33472585, 0.51093175, 0.47192277, 0.60450342, 0.65966146, 0.61150907, 0.57645134, 0.37676253, 0.6044804 , 0.61280806, 0.54140392, 0.21521987, 0.33831438])
Похоже на правду
Теперь создадим переменную, которая будет содержать наши условные площади только для точек, которые попадают в заданные границы:
area_between_contours = area[i,j]
area_between_contours
array([ 0.7388756 , 0.01764066, 0.82718934, 0.47061739, 0.06367554, 0.50477425, 0.57710106, 0.68935085, 0.61015325, 0.07786309, 0.86976938, 0.58637593, 0.11188851, 0.85670952, 0.73058855, 0.29125282, 0.61121317, 0.37903988, 0.23131014, 0.59864032, 0.16920972, 0.22014567, 0.11085538, 0.76896048, 0.52672478, 0.49517997, 0.88224439, 0.63339772, 0.55366074, 0.53692597, 0.01901886, 0.94150215, 0.92346616, 0.98246267, 0.72039419, 0.03298825, 0.7721819 , 0.0019144 , 0.43074718, 0.87215022, 0.73906263, 0.75296478, 0.40284511, 0.69031723, 0.91712585, 0.55992469, 0.14002227, 0.59551605, 0.19005105, 0.3695133 , 0.37348719, 0.10246398, 0.20502375, 0.86215089, 0.6652386 , 0.85571827, 0.44799476, 0.36202043])
И суммируем все точки, получая площадь:
area_between_contours.sum()
29.66960087540744
Можно сделать и в одно действие:
area[i,j].sum()
29.66960087540744