如何为先前的非 inf 值更改 numpy 数组中的 inf 值?
How to change inf values in numpy array for the previous non inf value?
我有一个可能包含 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)
为什么不用最简单的方法?
for i in range (0,len(a)):
if a[i]==inf: a[i]=a[i-1]
我从未使用过 inf。也许你的类型是 str 所以你应该写 a[i]=='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)
为什么不用最简单的方法?
for i in range (0,len(a)):
if a[i]==inf: a[i]=a[i-1]
我从未使用过 inf。也许你的类型是 str 所以你应该写 a[i]=='inf'