質問編集履歴
3
誤字
title
CHANGED
File without changes
|
body
CHANGED
@@ -196,7 +196,7 @@
|
|
196
196
|
|
197
197
|
interpolator = RegularGridInterpolator(points, output, method='linear')
|
198
198
|
|
199
|
-
#
|
199
|
+
#インプット値に対応するLAIを多次元補間により推定
|
200
200
|
input_values = np.array([[input1_test, input2_test, input3_test]])
|
201
201
|
output_test = interpolator(input_values)
|
202
202
|
print("LAI:", output_test)
|
2
追記をしました
title
CHANGED
File without changes
|
body
CHANGED
@@ -4,7 +4,6 @@
|
|
4
4
|
|
5
5
|
### 前提
|
6
6
|
|
7
|
-
ここに質問の内容を詳しく書いてください。
|
8
7
|
Pythonを用いてデータ解析を行っています。その中で構築したいプログラムがあり、うまくいかず困っています。
|
9
8
|
|
10
9
|
input1 input2 input3 output
|
@@ -134,3 +133,74 @@
|
|
134
133
|
### 補足情報(FW/ツールのバージョンなど)
|
135
134
|
|
136
135
|
Jupyter labを使用しています。
|
136
|
+
|
137
|
+
### 以下7/10追記です、処理の時間などから多次元の補間をやることにしました。
|
138
|
+
いろいろ調べながらやっていますが、うまくいっていません。
|
139
|
+
|
140
|
+
以下のようなことをしています。
|
141
|
+
|
142
|
+
output = np.array([0.01, 0.2, 0.4, 0.6, 0.8, 1., 1.2, 1.4, 1.6, 1.8, 2.,
|
143
|
+
2.2, 2.4, 2.6, 2.8, 3., 3.2, 3.4, 3.6, 3.8, 4., 4.2,
|
144
|
+
4.4, 4.6, 4.8, 5., 5.2, 5.4, 5.6, 5.8, 6.])
|
145
|
+
|
146
|
+
input1= np.array([0.176463, 0.152728, 0.138598, 0.128642, 0.123007, 0.117635,
|
147
|
+
0.112536, 0.110502, 0.108924, 0.106747, 0.105962, 0.10582,
|
148
|
+
0.104823, 0.10449, 0.103251, 0.103633, 0.102974, 0.103084,
|
149
|
+
0.103043, 0.102879, 0.102681, 0.102527, 0.102997, 0.102664,
|
150
|
+
0.102451, 0.102072, 0.102249, 0.101777, 0.102069, 0.101809,
|
151
|
+
0.101998])
|
152
|
+
|
153
|
+
input2 = np.array([0.272927, 0.277758, 0.281626, 0.283859, 0.28659, 0.2867,
|
154
|
+
0.287287, 0.289614, 0.289179, 0.289283, 0.291206, 0.289775,
|
155
|
+
0.290282, 0.288257, 0.291728, 0.289183, 0.29019, 0.290279,
|
156
|
+
0.28848, 0.288594, 0.288264, 0.287192, 0.29105, 0.290441,
|
157
|
+
0.289335, 0.290651, 0.29004, 0.28723, 0.290567, 0.288062,
|
158
|
+
0.2894])
|
159
|
+
|
160
|
+
input3 = np.array([0.386387, 0.363491, 0.341545, 0.323909, 0.311452, 0.302448,
|
161
|
+
0.292989, 0.285284, 0.280991, 0.276571, 0.27309, 0.269776,
|
162
|
+
0.269617, 0.26874, 0.266365, 0.265985, 0.263457, 0.262764,
|
163
|
+
0.261464, 0.260748, 0.260258, 0.258956, 0.257731, 0.259482,
|
164
|
+
0.258395, 0.25853, 0.257665, 0.257651, 0.257651, 0.257812,
|
165
|
+
0.257578])
|
166
|
+
上記の読み込む数値は一例として載せています。
|
167
|
+
|
168
|
+
#インプットとして使う値を指定
|
169
|
+
input1_test = 0.117
|
170
|
+
input2_test = 0.286
|
171
|
+
input3_test = 0.303
|
172
|
+
|
173
|
+
①LinearNDInterpolator(コメントで教えていただきました)
|
174
|
+
from scipy.interpolate import LinearNDInterpolator
|
175
|
+
#3次元データ点を作成
|
176
|
+
points = np.array([input1,input2,input3]).T
|
177
|
+
|
178
|
+
#LinearNDInterpolatorを使用して3次元補間関数を作成
|
179
|
+
interp_func = LinearNDInterpolator(points, output)
|
180
|
+
|
181
|
+
#インプット値に対応するLAIを補間により推定
|
182
|
+
output_test = interp_func(input1_test, input2_test, input3_test)
|
183
|
+
print("LAI:", output_test)
|
184
|
+
実行結果ですが、nanという結果が出ました。補間の関数の範囲外などでこのようになることもあるみたいですが、3つのインプットはinput1-3の範囲内になっています。input2がきれいな増加や減少関数になっていないことがいけないのでしょうか。
|
185
|
+
|
186
|
+
|
187
|
+
②from scipy.interpolate import griddata,interpn,RegularGridInterpolator
|
188
|
+
似たような方法として見つけたのでやってみました。
|
189
|
+
#3次元データ点を作成
|
190
|
+
points = (input1,input2,input3)
|
191
|
+
|
192
|
+
#インプットとして使う値を指定
|
193
|
+
input1_test = 0.117
|
194
|
+
input2_test = 0.286
|
195
|
+
input3_test = 0.303
|
196
|
+
|
197
|
+
interpolator = RegularGridInterpolator(points, output, method='linear')
|
198
|
+
|
199
|
+
# インプット値に対応するLAIを多次元補間により推定
|
200
|
+
input_values = np.array([[input1_test, input2_test, input3_test]])
|
201
|
+
output_test = interpolator(input_values)
|
202
|
+
print("LAI:", output_test)
|
203
|
+
実行結果ですが、ValueError: There are 3 point arrays, but values has 1 dimensions
|
204
|
+
というエラーがでました。やりたい目的上、次元を減らすことはできない??とよくわからないでいます。
|
205
|
+
|
206
|
+
どちらの方法でも何かアドバイスをいただければ嬉しいです。
|
1
要点の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -28,6 +28,8 @@
|
|
28
28
|
上記は私が使用しているLUTの一部を抽出したものです。
|
29
29
|
4つのパラメータで構成されており、左からinput1、 input2 、input3、outputです。
|
30
30
|
やりたいこととしてはinput1-3に任意の値が与えられたときにLUTを参照し、最もらしいoutputを計算するというものです。
|
31
|
+
ある数理モデルを何百パターンも動かした結果をまとめたものでして、そのインプットのパラメータをinput、モデルから出力される値をoutputとしています。
|
32
|
+
モデルを毎回動かすととても時間がかかってしまうので、事前にモデルを動かしたで結果をまとめたものを処理を簡略化する用途でLUTと呼ばせてもらっています。
|
31
33
|
|
32
34
|
input1 output
|
33
35
|
0.175992 0.01
|