计算不包括不可计算元素的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.
我有一个 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.