簡體   English   中英

如何為先前的非 inf 值更改 numpy 數組中的 inf 值?

[英]How to change inf values in numpy array for the previous non inf value?

我有一個 numpy 數組,其中可能包含 inf 值。

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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM