(x, y)
次のデータに対して複数のユーザー入力を補間したいと思います。
| >=0 1 2 3 4 5 >=6
-------------------------------------------
>=09 <10 | 6.4 5.60 4.8 4.15 3.5 2.85 2.2
>=10 <11 | 5.3 4.50 3.7 3.05 2.4 1.75 1.1
>=11 <12 | 4.7 3.85 3.0 2.35 1.7 1.05 0.4
>=12 | 4.2 3.40 2.6 1.95 1.3 0.65 0.0
ユーザーがx = 2.5
andを入力したy = 9
場合、モデルは を返す必要があり4.475
ます。一方、ユーザーがx = 2.5
andを入力するとy = 9.5
、モデルは を返す必要があり3.925
ます。
map_coordinates
座標をx、y範囲にマップする機能を提供するため、使用しました
これが私がこれまでに行ったことです:
import numpy as np
from scipy.ndimage import map_coordinates
# define array
z = np.array([[6.4, 5.60, 4.8, 4.15, 3.5, 2.85, 2.2],
[5.3, 4.50, 3.7, 3.05, 2.4, 1.75, 1.1],
[4.7, 3.85, 3.0, 2.35, 1.7, 1.05, 0.4],
[4.2, 3.40, 2.6, 1.95, 1.3, 0.65, 0.0]])
# function to interpolate
def twoD_interpolate(arr, xmin, xmax, ymin, ymax, x1, y1):
"""
interpolate in two dimensions with "hard edges"
"""
nx, ny = arr.shape
x1 = np.array([x1], dtype=np.float)
y1 = np.array([y1], dtype=np.float)
# if x1 is out of bounds set its value to its closest point, so that we're always
# interpolating within the range
x1[x1 > xmax] = xmax
x1[x1 < xmin] = xmin
# if y1 is out of bounds set its value to its closest point, so that we're always
# interpolating within the range
y1[y1 > ymax] = ymax
y1[y1 < ymin] = ymin
# convert x1 and y1 to indices so we can map over them
x1 = (nx - 1) * (x1 - xmin) / (xmax - xmin)
y1 = (ny - 2) * (y1 - ymin) / (ymax - ymin)
y1[y1 > 1] = 2.0
return map_coordinates(arr, [y1, x1])
# function to get the value
def test_val(x, y, arr):
return twoD_interpolate(arr, 0, 6, 9, 12, x, y)
コードのテスト
print test_val(4, 11, z) --> 3.00
print test_val(2, 10, z) --> 3.85
これらの結果は正しくないため1.7
、3.7
それぞれ返されるはずです。
私が間違ったことについてのアイデアや考えはありますか?