Оценить матрицу чисел, основанную на известных значениях угла?

Вероятно, есть имя для алгоритма, который я хочу, но я не уверен, как его найти. У меня много 96-луночных пластин вроде этого:

1 2 3 4 5 6 7 8 9 10 11 12 ------------------------------------ A | XOOOOOOOOOOX | B | OOOOOOOOOOOO | C | OOOOOOOOOOOO | D | OOOOOOOOOOOO | E | OOOOOOOOOOOO | F | OOOOOOOOOOOO | G | OOOOOOOOOOOO | H | XOOOOOOOOOOX | ------------------------------------ 

Я измерил уровень освещенности в каждом углу с помощью светового индикатора и хотел бы использовать эти четыре значения (обозначенные X s) для оценки уровней везде. Я думаю, что мне нужен какой-то средневзвешенный, основанный на том, насколько близко колодец подходит к каждому углу.

Уровни имеют тенденцию варьироваться по диагонали, если это имеет значение. Например, верхний правый будет самым высоким, нижний левый – самым низким, а два других – между ними (но, возможно, нигде вблизи среднего).

Мои gotos обычно R и python, но любой язык в порядке, так как мне просто нужно написать матрицы в виде файлов CSV.

Это не продвинутый, но может помочь:

 import numpy as np import matplotlib.pyplot as plt c1 = 0 # Corner values c2 = 1 c3 = 1 c4 = 4 a=np.linspace(c1, c2, 8) b=np.linspace(c3, c4, 8) c = np.array([np.linspace(i,j,12) for i,j in zip(a,b)]) print np.shape(c) plt.figure() plt.imshow(c) plt.show() 

введите описание изображения здесь

И если вы хотите сделать то же самое в R, используя билинейный (или другой метод интерполяции по умолчанию) по умолчанию:

 library(raster) ## Four corner values defined as a matrix, raster: m <- matrix(c(12,4,3,9), 2, 2) r <- raster(m) ## Construct a new raster, with dimentions matching ## the grid you're interpolating to: r_i <- raster(nrows=200, ncols=200, ext=extent(r)) ## Resample your four corners, the default is using ## bilinear interpolation: r_i <- resample(r, r_i) ## Plot our results: par(mfrow=c(1,2)) plot(r, zlim=c(-10,25)) plot(r_i, zlim=c(-10,25)) 

введите описание изображения здесь

Обратите внимание, что билинейная интерполяция может быть не лучшим выбором, так как ваши значения угла известны, и вы, вероятно, захотите, чтобы эти значения оставались неизменными в ваших интерполированных данных. При желании можно использовать более сложную технику (сплайны, геостатистические и т. Д.).

Вы ищете 2D-интерполяцию. Существует несколько различных методов интерполяции, которые вы могли бы использовать.

Как быстрый пример python (я уверен, что R имеет множество опций, а также):

 import numpy as np import numpy as np import scipy.interpolate import matplotlib.pyplot as plt y, x = np.mgrid[:12, :12] xcorners = x[0,0], x[0, -1], x[-1, 0], x[-1, -1] ycorners = y[0,0], y[0, -1], y[-1, 0], y[-1, -1] zcorners = [1, 2, 3, 4] xy = np.column_stack([xcorners, ycorners]) xyi = np.column_stack([x.ravel(), y.ravel()]) zi = scipy.interpolate.griddata(xy, zcorners, xyi) zi = zi.reshape(x.shape) fig, ax = plt.subplots() grid = ax.pcolormesh(x, y, zi) ax.scatter(xcorners, ycorners, c=zcorners, s=200) fig.colorbar(grid) ax.margins(0.05) plt.show() 

введите описание изображения здесь