みんな、
現在、matplotlib の griddata によって生成される補間に問題があります。データ ポイントごとに 3 つの値を含むデータ セットがあります。このデータを等高線でプロットしようとしています。私が抱えている問題は、組み込みの遅延補間が一部のデータセットで壊れることです。そこで、natgrid インターポラトインに移行しようとしました。これは一部のデータで機能します。ただし、他のデータ セットでは、griddata の出力でいくつかの null 値が生成されます。これらの null 値は、ほとんどの値が同じ (この場合は 0) の領域で発生することにも言及する必要があります。
これを引き起こす原因について何か提案はありますか?
編集:ここにいくつかの詳細があります。
ソース データがかなり大きいため、ここに貼り付けることができません。それで、私はそれを保持するためにペーストビンを使用しました。これが許可されることを願っています。ここから入手できます: http://pastebin.com/C7Nvvcaw。これは、x、y、z のようにフォーマットされます。したがって、最初の列は x 値などです。これは、xyz リスト内のすべての項目を出力し、それをファイルにパイプした結果です。
補間後のデータについても同様です。それで、ペーストビンも使用しました。ここにあります:http://pastebin.com/ZB6S2qFk。各 [] は特定の y 値に対応します。y の値は別のリストにあるため、含まれていません。ただし、Y 軸の場合は 0 ~ 50、X 軸の場合は 0 ~ 100 の範囲です。これは、コードから zi リスト内のすべての項目を出力し、それをファイルにパイプした出力です。
コードについては、コードの大部分がこの質問の範囲外であるため、すべてのコードを添付していません。というわけで、関連するコンポーネントを投稿します。初期データは、3 次元でデータをナビゲートする機能を提供するリストのリストにあります。これは 3 次元配列に似ていると思いますが、そうではなく単なるリストのリストです。ソース データのリストは xyz と呼ばれます。
#Function to get individual column of data
def column(matrix, i):
return [row[i] for row in matrix]
#Getting Max and Mins
xmin = float(min(column(xyz, 0)))
xmax = float(max(column(xyz, 0)))
ymin = float(min(column(xyz, 1)))
ymax = float(max(column(xyz, 1)))
#Resolution for interpolation (x and y list lengths)
resx = 100
resy = 50
xi = np.linspace(xmin, xmax, resx)
yi = np.linspace(ymin, ymax, resy)
x = np.array(column(xyz, 0))
y = np.array(column(xyz, 1))
z = np.array(column(xyz, 2))
zi = griddata(x, y, z, xi, yi, interp='nn')
編集:解決策を見つけました。0 値は補間を破っています。それらをキャッチしてすべてを 0.1 に変更すると、補間によって null 値が生成されなくなりました。0 と 0.1 は同じ輪郭色に分類されるため、これは私の場合は許容されます。他のユーザーの場合、データの絶対精度を維持する必要がある場合は、すべての値を +1 で変換し、補間してから、補間された値を -1 に変換することをお勧めします。これにより、補間方法を壊すことなく精度が維持されます。
助けてくれてありがとう、
ダニエル