Python 如何将numpy数组中的inf值更改为以前的非inf值?

Python 如何将numpy数组中的inf值更改为以前的非inf值?,python,arrays,numpy,inf,Python,Arrays,Numpy,Inf,我有一个可能包含inf值的numpy数组 numpy数组是一个一维数字向量 是否有方法将数组的inf值更改为数组的上一个值(不是inf) 因此,如果数组的第1000个索引是inf,则应将其替换为不是inf的第999个索引 这是我想要的一个例子 vals=np.random.random(10000) VAL inf和-inf将作为nan加载。因此,这应该用它来处理 试试这个更新的 import numpy as np Data = np.array([np.nan,1.3,np.nan,1.4

我有一个可能包含inf值的numpy数组

numpy数组是一个一维数字向量

是否有方法将数组的inf值更改为数组的上一个值(不是inf)

因此,如果数组的第1000个索引是inf,则应将其替换为不是inf的第999个索引

这是我想要的一个例子

vals=np.random.random(10000)
VAL
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)
将numpy导入为np
Data=np.array([np.nan,1.3,np.nan,1.4,np.nan,np.nan])
nansIndx=np.where(np.isnan(数据))[0]
isanIndx=np.where(~np.isnan(数据))[0]
对于nansIndx中的nan:
替换候选项=np.where(isanIndx>nan)[0]
如果replacementCandidates.size!=0:
替换=数据[isanIndx[replacement候选者[0]]
其他:
替换=数据[isanIndx[np.其中(isanIndx
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)
将numpy导入为np
Data=np.array([np.nan,1.3,np.nan,1.4,np.nan,np.nan])
nansIndx=np.where(np.isnan(数据))[0]
isanIndx=np.where(~np.isnan(数据))[0]
对于nansIndx中的nan:
替换候选项=np.where(isanIndx>nan)[0]
如果replacementCandidates.size!=0:
替换=数据[isanIndx[replacement候选者[0]]
其他:

替换=数据[isanIndx[np.where(isanIndx为什么不使用最简单的方法

for i in range (0,len(a)):
    if a[i]==inf: a[i]=a[i-1]

我从来没有使用过inf。也许你知道它的类型是str,所以你应该写一个[I]=='inf'

为什么不使用最简单的方法呢

for i in range (0,len(a)):
    if a[i]==inf: a[i]=a[i-1]


我从来没有使用过inf。也许你知道它的类型是str,所以你应该写一个[I]='inf'

你所说的数组的前一个值是什么意思,它是任何数组的元素吗?我编辑了这个问题以使它更清楚。这回答了问题吗?你可以这样做
my_arr[1000]=my_arr[999]
我正在寻找一个通用版本。添加一个我们可以使用的示例如何?你所说的数组的上一个值是什么意思,它是任何数组的元素吗?我编辑了这个问题以使其更清楚。这是否回答了问题?你可以这样做
my_arr[1000]=my_arr[999]
我正在寻找一个通用版本。添加一个我们可以使用的示例如何?函数会给我错误。请发布错误。我希望您已经导入了pandas或numpy,无论您在pandas:AttributeError中使用哪一个。DataFrame对象没有属性“as_matrix”。对于numpy:IndexError:tuple索引超出范围。在idx=np.行中(~mask,np.arange(mask.shape[1]),0)是的,我想要最接近的前一个不是inf。第一个元素不应该是inf。我认为这个解决方案很好。但是我为ISIN替换了isnan。函数给我错误。你能发布错误吗。我希望你已经导入了pandas或numpy,无论你在pandas中使用哪一个:AttributeError:“DataFrame”对象没有属性“as_matrix”。对于numpy:indexer:tuple索引超出范围。在idx=np行,其中(~mask,np.arange(mask.shape[1]),0)是的,我想要最接近的前一个不是inf。第一个元素不应该是inf。我认为这个解决方案很好。但是我把isnan替换为ISINF应该是np.inf。还有更好的方法吗?我的数组非常大。inf应该是np.inf。还有更好的方法吗?我的数组非常大。