2016-08-11 11 views
0

リストの最初の出現を連続的に変更する方法がわかりません。例えば、私は私が削除どのように文字列の最初のオカレンスを繰り返してPythonを削除するには?

array([ nan, nan, nan, 1., 1., nan, nan, 1.]) 

にこれを変更する機能を使用したい

array([ nan, nan, 1., 1., 1., nan, 1., 1.]) 

の出力を与える数字

import numpy as np 
test=np.array([np.nan,np.nan,1,1,1,np.nan,1,1]) 

のリストを持っています開始するたびに1の最初のインスタンス。

+4

あなたは何をしようとしましたか? – depperm

答えて

1

あなたはこのような何かを行うことができます - で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)専用ケース -

idx = np.diff(np.append(False,(test==1)).astype(int))==1 
test[idx] = np.nan 

サンプルが掲載疑問から

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]) 
+2

もう少し試してみましたが、最初の部分全体をインデックス作成操作として直接使用することで、これをさらに難読化/偽造することができました。私は怠惰と呼ぶ! :p –

+1

@TasosPapastylianouサンプルランでその願いを果たした;) – Divakar

+0

ああ、あまりにも早く話しました! :p –

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.] 
関連する問題