複数のデータリストがあります。それらを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の山車を使用している場合、その機能が動作する場合。
なぜこのアプローチはNaNs
とinfs
では機能しませんか?希望の結果を得るために修正することはできますか?
EDIT:NaNs
なくinfs
を取り外すとき
類似した(ただし同一ではない)問題へのリンクで提供回答に基づいて、次のコードは動作します。
ii = []
for idx in range(len(a)):
if a[idx] != a[idx]:
ii.append(idx)
print(ii)
>> [0, 4, 5]
なぜこれがダウンリストされましたか? – mikey