如何用ROI计算二维数组的平均值?

时间:2017-04-28 12:22:57

标签: python python-2.7 numpy mean

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

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

例如,

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中的所有值都为零,则会发出警告。例如

ROI=[0,0,0
     0,0,0
     0,0,0]

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

  

/usr/lib/python2.7/dist-packages/numpy/core/_methods.py:55:RuntimeWarning:空切片的平均值。     warnings.warn(“空切片的平均值。”,RuntimeWarning)

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

2 个答案:

答案 0 :(得分:3)

检查案例:

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

或使用三元组的单线:

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

答案 1 :(得分:0)

删除警告使用:

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)