我不确定如何不断更改列表中的第一次出现。例如,我将有一个数字列表
import numpy as np
test=np.array([np.nan,np.nan,1,1,1,np.nan,1,1])
这给了我一个输出
array([ nan, nan, 1., 1., 1., nan, 1., 1.])
我想使用一个函数将其更改为
array([ nan, nan, nan, 1., 1., nan, nan, 1.])
每次启动时都会删除1的第一个实例。
答案 0 :(得分:1)
你可以这样做 -
idx = np.diff(np.append(False,(test==1)).astype(int))==1
test[idx] = np.nan
示例运行
1)来自已发布问题的示例案例 -
In [80]: test
Out[80]: array([ nan, nan, 1., 1., 1., nan, 1., 1.])
In [81]: test[np.diff(np.append(False,(test==1)).astype(int))==1] = np.nan
In [82]: test
Out[82]: array([ nan, nan, nan, 1., 1., nan, nan, 1.])
2)开始时1
的特殊情况 -
In [72]: test
Out[72]: array([ 1., 1., 0., 1., 0., 0., 1., 1., 0., 1.])
In [73]: test[np.diff(np.append(False,(test==1)).astype(int))==1] = np.nan
In [74]: test
Out[74]: array([ nan, 1., 0., nan, 0., 0., nan, 1., 0., nan])
答案 1 :(得分:1)
您可以利用nan
次nan
的任何事实。
import numpy as np
test=np.array([np.nan,np.nan,1,1,1,np.nan,1,1])
test[1:] *= test[:-1]
test[0] = np.nan
print test
# [ nan nan nan 1. 1. nan nan 1.]