计算不包含不可计算元素的numpy数组平均值的最佳方法

时间:2019-04-07 09:50:08

标签: python numpy error-handling nan divide-by-zero

我有一个numpy数组,我将在其中计算一些数字之间的LN差,然后将其求平均值。问题在于,使用负输入将无法定义LN函数,并且还会发生被零除的情况。我想跳过这些垃圾元素,甚至不想将它们包括在数组中。我想要的是仅遍历可以计算的方程式并取其平均值。

我试图用numpy.nan来做到这一点,这似乎是处理它的最有效方法,只是对每个无法计算的索引值都放一个numpy.nan。更简单地说,我从一开始就将数组初始化为nan,然后填充可计算元素,并且默认情况下将所有其他内容保留为nan。

赞:

LN_ARRAY    = numpy.full(array_size, numpy.nan, dtype=float, order='C')

...

    for i in range(7,array_size):

       if(F>0.0): LN_ARRAY[i]=abs(  math.log( A / F )  )
       # make sure F can't be zero or negative, A is by default always non zero positive

现在的问题是,如果我只用numpy.average(LN_ARRAY)取平均值,它将只输出nan,因为从第8个元素转到第一个元素,我将始终具有nan值填充数组,加上if测试导致的其他nan

是否有一种方法可以通过排除nan来计算此数组的平均值,或者以一种更有效的方式一起使用呢?

1 个答案:

答案 0 :(得分:1)

numpy.nanmean正是这样做的。您可以指定轴,也可以将其保留为None以表示整个ndarray的均值。 Here's a link to the docs.