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

Best way to compute average of numpy array excluding uncomputable elements

我有一个 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 个值元素来填充数组,加上额外的 nan 由于 if 测试。

有没有一种方法可以通过排除 nan 或以更有效的方式一起计算此数组的平均值?

numpy.nanmean 正是这样做的。您可以指定轴,或将其保留在 None 以获得整个 ndarray 的平均值。 Here's a link to the docs.