背景
scipy.interpolate.griddata
で scatter point データを regular grid(pixel)で補間しようとすると nan が出る.
linear などの補間のときに起こります. nearest では生じません.
原因
グリッドの範囲がデータ点の凸包の外側にあると生じます. fill_value
がデフォルト nan
です.
たとえば [-10, 10]^2
の領域で 1 刻みでグリッドを作っているが, データ点が [-0.01, 0.01]^2
にまとまっている場合です.
特にエラーというわけではないので, なにもメッセージ出してくれないため最初手惑ってしまいますね.
対応
- nearest でよい場合は nearest を使う
- nearest で変換したのち, 画像データとして linear/cubic 補間するとか
- データ点の bounds を求めて, それを基準にグリッド範囲をうまく設定する
- データ点が複数のクラスタを構成している場合は, クラスタ単位で処理したほうがいいかも.
- あらかじめある程度グリッド領域を埋めるようにダミーのデータ点を作っておくか, 基準値(デフォルト値)がわかっている場合は
fill_value
オプションで補間がうまくいかなかったときの値を設定する.