【发布时间】:2018-07-13 01:21:03
【问题描述】:
我有一个大型 numpy 数组,我需要对其进行操作,以便每个元素都在一定范围内。
我可以识别无效的元素
v[np.where(v>upper_lim)]
v[np.where(v<lower_lim)]
或更简单地:
v[v>upper_lim]
v[v<lower_lim]
现在我想用满足条件的最接近(较早)的可用样本替换满足此条件的每个元素。
例如
upper_lim=10
lower_lim=1
v=[1,-77,3,4,5,13213,6,7,8,1024]
应该给
v=[1,1,3,4,5,5,6,7,8,8]
当在无效值之前没有可用元素时,我需要用下一个有效元素替换
所以
upper_lim=10
lower_lim=1
v=[-7,1,2,3,-77]
应该给
v=[1,1,2,3,3]
使用 pandas 的可能解决方案:
import pandas as pd
v=pd.DataFrame(v)
v[v>ul]=np.nan
v[v<ll]=np.nan
v=v.fillna(method='ffill').fillna(method='bfill')
v=v.flatten()
但我不适合使用pandas
【问题讨论】:
-
一种方法,用 NaN 替换无效值并使用 bfill()/ffill() 方法。
-
附注:你不需要
where,你可以使用v[v>upper_lim]
标签: python arrays numpy boolean