python - 如何将numpy数组中的inf值更改为前一个非inf值?
问题描述
我有一个可能包含 inf 值的 numpy 数组。
numpy 数组是数字的一维向量。
有没有办法将数组的 inf 值更改为数组的前一个值(不是 inf)?
因此,如果数组的第 1000 个索引是 inf,它应该用不是 inf 的第 999 个索引替换它。
这是我想要的一个例子
vals = np.random.random(10000)
vals[vals<0.1] = np.inf
indexes = np.asarray(vals==np.inf).nonzero()
for i in indexes:
vals[i] = vals[i-1]
if np.isinf(vals).any():
print("It doesnt work")
else:
print("It works")
解决方案
def pandas_fill(arr):
df = pd.DataFrame(arr)
df.fillna(method='ffill', axis=1, inplace=True)
out = df.as_matrix()
return out
def numpy_fill(arr):
mask = np.isnan(arr)
idx = np.where(~mask,np.arange(mask.shape[1]),0)
np.maximum.accumulate(idx,axis=1, out=idx)
out = arr[np.arange(idx.shape[0])[:,None], idx]
return out
inf
并将-inf
加载为nan
. 所以,这应该用那个来处理。
试试这个更新的。
import numpy as np
Data = np.array([np.nan,1.3,np.nan,1.4,np.nan,np.nan])
nansIndx = np.where(np.isnan(Data))[0]
isanIndx = np.where(~np.isnan(Data))[0]
for nan in nansIndx:
replacementCandidates = np.where(isanIndx>nan)[0]
if replacementCandidates.size != 0:
replacement = Data[isanIndx[replacementCandidates[0]]]
else:
replacement = Data[isanIndx[np.where(isanIndx<nan)[0][-1]]]
Data[nan] = replacement
print(Data)
推荐阅读
- sqlite - MS Access 和 qGIS .gpkg 数据之间的 ODBC 链接?
- c# - 如果不满足特定时间范围,如何启用或禁用组合框中的值
- node.js - 使用前端授权从nodejs后端调用google drive api
- c# - “没有为类型 'System.Object[]' 定义无参数构造函数。” 对于 RestSharp
- excel - VBA 运行时有时会出错,但有时在自动连接 visio 形状时不会出错
- mysql - Laravel 7 从表中选择,其中两列具有来自单个表的 id
- r - ggplot-maps 中未显示图例标题
- javascript - 角度输入范围滑块四舍五入十进制数据绑定值
- amazon-web-services - 用于 Control M 迁移的 AWS Batch 与 AWS Step 函数
- visual-studio-code - VSCode CLI:禁用电子记录