python and matplotlib。に単純な問題があります。x、y、rhoの3つのリストがあり、rho [i]点x [i]、y [i]の密度です。すべてxとyの値は-1と1の間ですが、特定の順序ではありません。
密度rho(点x、yで補間)の等高線プロット(imshowのような)の作成方法。
どうもありがとうございました。
編集:私は大きな配列で作業します:x、y、rhoには10,000から1,000,000の要素があります
rho
値を補間する必要があります。これを行う唯一の方法はありません。「最良の」方法は、補間に組み込む必要があるアプリオリ情報に完全に依存します。
しかし、「ブラックボックス」補間法について暴言を述べる前に、放射基底関数(たとえば、「薄い板のスプライン」は特定のタイプの放射基底関数)が良い選択であることがよくあります。数百万のポイントがある場合、この実装は非効率になりますが、出発点としては:
import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate
# Generate data:
x, y, z = 10 * np.random.random((3,10))
# Set up a regular grid of interpolation points
xi, yi = np.linspace(x.min(), x.max(), 100), np.linspace(y.min(), y.max(), 100)
xi, yi = np.meshgrid(xi, yi)
# Interpolate
rbf = scipy.interpolate.Rbf(x, y, z, function='linear')
zi = rbf(xi, yi)
plt.imshow(zi, vmin=z.min(), vmax=z.max(), Origin='lower',
extent=[x.min(), x.max(), y.min(), y.max()])
plt.scatter(x, y, c=z)
plt.colorbar()
plt.show()
Scipyのgriddata
(Scipy> = 0.10が必要)を使用できます。これは、三角形分割ベースの方法です。
import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate
# Generate data: for N=1e6, the triangulation hogs 1 GB of memory
N = 1000000
x, y = 10 * np.random.random((2, N))
rho = np.sin(3*x) + np.cos(7*y)**3
# Set up a regular grid of interpolation points
xi, yi = np.linspace(x.min(), x.max(), 300), np.linspace(y.min(), y.max(), 300)
xi, yi = np.meshgrid(xi, yi)
# Interpolate; there's also method='cubic' for 2-D data such as here
zi = scipy.interpolate.griddata((x, y), rho, (xi, yi), method='linear')
plt.imshow(zi, vmin=rho.min(), vmax=rho.max(), Origin='lower',
extent=[x.min(), x.max(), y.min(), y.max()])
plt.colorbar()
plt.show()
逆距離加重補間もあります-RBFに似ていますが、多数のポイントに対してより適切に機能するはずです: Inverse Distance Weighted(IDW)Interpolation with Python