问题描述
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,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])
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)
,
为什么不使用最简单的方法?
for i in range (0,len(a)):
if a[i]==inf: a[i]=a[i-1]
我从未使用过 inf。也许你的类型是 str ,所以你应该写 a[i]=='inf'