2017-07-01 12 views
0

複数のデータリストがあります。それらをa, b, cとしましょう。リストまたは配列からNaNおよびinfのインデックスを取得する方法

import numpy as np 

a = [np.NaN, 1, 2, 3, np.NaN, np.NaN, 6] 
b = [7, 8, 9, 10, 11, 12, 13] 
c = [14, 15, 16, 17, 18, 19, 20] 

NaN値がインデックス[0, 4, 5]aで起こります。私の場合はNaNsに適用されるすべてのものがnp.infにも適用されます。 Rather than removeこれらのインデックスの単一リストaの値をすべてのリストa b and cから効率的に削除したい(実際のデータセットは大きい)。私は以下の関数を使ってこれらのインデックスを取得しようとしました。

def get_nan_idx(data, val=np.NaN): 
    # data = np.array(data) 
    idxs, = np.where(data == val) 
    return idxs 

私は関数を呼び出しますが、目的の結果は得られません。

nan_idxs = get_nan_idx(a, np.NaN) 
print(nan_idxs) 
>> [] # result 

私はライン# data = np.array(data)をコメントアウトしていないと私は、関数の引数valに代わりのNaNの山車を使用している場合、その機能が動作する場合。

なぜこのアプローチはNaNsinfsでは機能しませんか?希望の結果を得るために修正することはできますか?

EDIT:NaNsなくinfsを取り外すとき

類似した(ただし同一ではない)問題へのリンクで提供回答に基づいて、次のコードは動作します。

ii = [] 
for idx in range(len(a)): 
    if a[idx] != a[idx]: 
     ii.append(idx) 

print(ii) 
>> [0, 4, 5] 

答えて

-1

私は動作する方法を見つけました。しかし、これを行うための他の価値ある方法があるかどうかを知ることはまだ興味があります。

def get_ndex(data, val): # data = a 
    if val == 'inf': 
     res, = np.where(np.isinf(data)) 
    elif val == 'nan': 
     res, = np.where(np.isnan(data)) 
    return res 
+0

なぜこれがダウンリストされましたか? – mikey

関連する問題