阵列我怎样才能获得中值的指数包含NaN的数组?获取中间值的指数中包含的NaN
例如,我的数值为[Nan, 2, 5, NaN, 4, NaN, 3, 1]
,其值为[np.nan, 0.1, 0.2, np.nan, 0.1, np.nan, 0.4, 0.3]
。然后中位数是3
,而错误是0.4
。
有没有一种简单的方法来做到这一点?
编辑:我编辑的错误阵列暗示更现实的情况。是的,我正在使用numpy。
阵列我怎样才能获得中值的指数包含NaN的数组?获取中间值的指数中包含的NaN
例如,我的数值为[Nan, 2, 5, NaN, 4, NaN, 3, 1]
,其值为[np.nan, 0.1, 0.2, np.nan, 0.1, np.nan, 0.4, 0.3]
。然后中位数是3
,而错误是0.4
。
有没有一种简单的方法来做到这一点?
编辑:我编辑的错误阵列暗示更现实的情况。是的,我正在使用numpy。
这不是真的清楚你打算如何有意义地提取从平均误差,但如果你碰巧有一个数组使得中值是其项目之一,相应的错误数组对应的索引定义,还有没有其他项具有相同值的中位数,和其他大概有免责声明,那么你就可以做到以下几点:
a = np.array([np.nan,2,5,np.nan, 4,np.nan,3,1])
aerr = np.array([np.nan, 0.1, 0.2, np.nan, 0.1, np.nan, 0.4, 0.3])
# median, ignoring NaNs
amedian = np.median(a[np.isfinite(a)])
# find the index of the closest value to the median in a
idx = np.nanargmin(np.abs(a-amedian))
# this is the corresponding "error"
aerr[idx]
编辑:作为@DSM指出,如果你有NumPy的1.9或以上,您可以将amedian
的计算简化为amedian = np.nanmedian(a)
。
如果我们知道这是OP是什么之后,我们可以在现代'numpy'使用'np.nanmedian'简单的'amedian'线一点点。 – DSM 2015-02-05 16:58:11
numpy的有你需要的一切:
values = np.array([np.nan, 2, 5, np.nan, 4, np.nan, 3, 1])
errors = np.array([np.nan, 0.1, 0.2, np.nan, 0.1, np.nan, 0.4, 0.3])
# filter
filtered = values[~np.isnan(values)]
# find median
median = np.median(filtered)
# find indexes
indexes = np.where(values == median)[0]
# find errors
errors[indexes] # array([ 0.4])
比方说您有您的列表命名为“A”,那么你可以使用这个码至发现没有“南”一个蒙面数组,然后做中间有np.ma.median()
:
a=[Nan, 2, 5, NaN, 4, NaN, 3, 1]
am = numpy.ma.masked_array(a, [numpy.isnan(x) for x in a])
numpy.ma.median(am)
你也可以做同样的错误。
我不确定这是否正在做我所需要的。 – 2015-02-05 16:56:34
这会忽略你的NaN值 – 2015-02-05 17:00:38
你想要什么,如果有多个值的中位数,如'[1,2,2,3]'? – DSM 2015-02-05 16:36:01
@DSM,你是指中位数本身还是错误?中位数也是为偶数值数组定义的。 – 2015-02-05 16:39:47
@ Py-ser:在您的标题和您的问题中,您指的是中值的**索引**,而不是中值。 – DSM 2015-02-05 16:40:38