9999 に設定されたデータ値がない 1 次元データ セットがあります。
this_array = [ 4, 4, 1, 9999, 9999, 9999, -5, -4, ... ]
データなしの値を両側の最も近い値の平均に置き換えたいのですが、一部のデータなしの値にはデータなしの値と同様に最も近い値があるため、それらを置き換えるのは少し困難です。つまり、3 つのデータなしの値を -2 に置き換えたいと考えています。配列内の各スカラーを通過し、データがないかどうかをテストするループを作成しました。
for k in this_array:
if k == 9999:
temp = np.where(k == 9999, (abs(this_array[k-1]-this_array[k+1])/2), this_array[k])
else:
pass
this_array[k] = temp
ただし、if 関数を追加するか、k-1 の前または k+1 の後に値を取得する方法を追加する必要があります (それも 9999 に等しい場合)。
if np.logical_or(k+1 == 9999, k-1 == 9999):
temp = np.where(k == 9999, (abs(this_array[k-2]-this_array[k+2])/2), this_array[k])
お分かりのように、このコードは乱雑になり、間違った値を取得したり、ネストされた if 関数が大量に作成されたりする可能性があります。データセット全体でかなり可変であるため、これを実装するよりクリーンな方法を知っている人はいますか?
要求に応じて: 最初および/または最後のポイントがデータではない場合、それらはできれば最も近いデータ ポイントに置き換えられます。