2次元のサーフェスをデータに合わせようとしています。具体的には、IRAFのFITCOORDS
と同じように、ピクセル座標を波長座標にマッピングする関数を探したいと思います。 Pythonの3.6にastropy 2.0.2
とnumpy 1.13.3
でデータポイントのいくつかがNaNである場合の2次元関数のフィット方法は?
import numpy as np
from astropy.modeling.models import Chebyshev2D
from astropy.modeling.fitting import LevMarLSQFitter
#%%
test = np.array([[7473, 7040, 6613, 6183, 5753, 5321, 4888],
[7474, 7042, 6616, 6186, np.nan, 5325, 4893],
[7476, 7044, 6619, 6189, 5759, 5328, 4897],
[7479, 7047, np.nan, 6192, 5762, 5331, 4900]])
grid_pix, grid_wave = np.mgrid[:4, :7]
fitter = LevMarLSQFitter()
c2_init = Chebyshev2D(x_degree=3, y_degree=3)
c2_fit = fitter(c2_init, grid_wave, grid_pix, test)
print(c2_fit)
ResultI:
は一例として、私は次のスニペットでtest
配列へのフィット感を見つけたい
Model: Chebyshev2D
Inputs: ('x', 'y')
Outputs: ('z',)
Model set size: 1
X-Degree: 3
Y-Degree: 3
Parameters:
c0_0 c1_0 c2_0 c3_0 c0_1 c1_1 c2_1 c3_1 c0_2 c1_2 c2_2 c3_2 c0_3 c1_3 c2_3 c3_3
---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
WARNING: Model is linear in parameters; consider using linear fitting methods. [astropy.modeling.fitting]
それは明らかだフィッティングこと働いたことがない
np.nan
を特定の値に変更すると、当てはまりがうまくいきます(たとえば、手動でnp.nan
を0,1などに変更します)。
妥当な結果を得るにはどうすればよいですか?フィッターにnp.nan
の値を無視させることはできますか?
ダミー値で置き換えるのではなく、nanを削除するだけですか? – Julien
@Julien配列から 'np.nan'を削除するにはどうしたらいいですか? –
'np.where'たとえば – Julien