关于python:如何使用ROI计算2D数组的平均值?

How to compute the mean of a 2D array with ROI?

我有一个数组I及其ROI(感兴趣的区域)。 它的ROI有两个值1和0。

我的任务是计算数组中这些值的平均值,使其ROI大于0。

例如,

1
2
3
4
5
6
I=[1,2,3
   4,5,6
   7,8,9]
ROI=[0,1,1
     1,0,0
     0,0,1]

平均值将是平均值(2,3,4,9)= 18/4 = 4.5

这是我的代码,但是,如果ROI中的所有值都为零,则会发出警告。 例如

1
2
3
ROI=[0,0,0
     0,0,0
     0,0,0]

我该如何解决? 我使用python2.7并得到以下错误:

/usr/lib/python2.7/dist-packages/numpy/core/_methods.py:55: RuntimeWarning: Mean of empty slice.
warnings.warn("Mean of empty slice.", RuntimeWarning)

1
2
3
mask=ROI>0
if len(mask)>0:
   mean_ROI=I(mask)


只需查看案例:

1
2
3
4
if ROI.any():
    mean = I[ROI > 0].mean()
else:
    mean = 0

或使用三元组的单线程:

1
mean = I[ROI > 0].mean() if ROI.any() else 0


要删除警告使用:

1
2
3
4
5
6
import warnings

with warnings.catch_warnings():
    warnings.simplefilter("ignore", category=RuntimeWarning)
    mymean = np.mean([i for i, j in zip(I, ROI) if j])
    print(mymean)