質問するログイン新規登録

質問編集履歴

3

誤字

2023/07/09 18:20

投稿

napo5221
napo5221

スコア7

title CHANGED
File without changes
body CHANGED
@@ -196,7 +196,7 @@
196
196
 
197
197
  interpolator = RegularGridInterpolator(points, output, method='linear')
198
198
 
199
- # インプット値に対応するLAIを多次元補間により推定
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

追記をしました

2023/07/09 18:19

投稿

napo5221
napo5221

スコア7

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

要点の追加

2023/07/02 18:20

投稿

napo5221
napo5221

スコア7

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