는 당신은 간다. 너무 가능하다
샘플링 다운 : 여기
from matplotlib import pyplot
import numpy
from interval import Interval, IntervalSet
def overlap(rect1, rect2):
"""Calculate the overlap between two rectangles"""
xInterval = Interval(rect1[0][0], rect1[1][0]) & Interval(rect2[0][0], rect2[1][0])
yInterval = Interval(rect1[0][1], rect1[1][1]) & Interval(rect2[0][1], rect2[1][1])
area = (xInterval.upper_bound - xInterval.lower_bound) * (yInterval.upper_bound - yInterval.lower_bound)
return area
def meanInterp(data, m, n):
newData = numpy.zeros((m,n))
mOrig, nOrig = data.shape
hBoundariesOrig, vBoundariesOrig = numpy.linspace(0,1,mOrig+1), numpy.linspace(0,1,nOrig+1)
hBoundaries, vBoundaries = numpy.linspace(0,1,m+1), numpy.linspace(0,1,n+1)
for iOrig in range(mOrig):
for jOrig in range(nOrig):
for i in range(m):
if hBoundaries[i+1] <= hBoundariesOrig[iOrig]: continue
if hBoundaries[i] >= hBoundariesOrig[iOrig+1]: break
for j in range(n):
if vBoundaries[j+1] <= vBoundariesOrig[jOrig]: continue
if vBoundaries[j] >= vBoundariesOrig[jOrig+1]: break
boxCoords = ((hBoundaries[i], vBoundaries[j]),(hBoundaries[i+1], vBoundaries[j+1]))
origBoxCoords = ((hBoundariesOrig[iOrig], vBoundariesOrig[jOrig]),(hBoundariesOrig[iOrig+1], vBoundariesOrig[jOrig+1]))
newData[i][j] += overlap(boxCoords, origBoxCoords) * data[iOrig][jOrig]/(hBoundaries[1] * vBoundaries[1])
return newData
fig = pyplot.figure()
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)
m1, n1 = 37,59
m2, n2 = 10,13
dataGrid1 = numpy.random.rand(m1, n1)
dataGrid2 = meanInterp(dataGrid1, m2, n2)
mat1 = ax1.matshow(dataGrid1, cmap="YlOrRd")
mat2 = ax2.matshow(dataGrid2, cmap="YlOrRd")
#make both plots square
ax1.set_aspect(float(n1)/float(m1))
ax2.set_aspect(float(n2)/float(m2))
pyplot.show()
는 다른 그리드와 몇 가지 예입니다.
이 작업을 수행 한 후, 내가 한 모든 작업은 image sampling의 일부 양식이라고 확신합니다. 큰 목록에서이 작업을 수행하려는 경우 꽤 느려질 수 있으므로 작업을 좀 더 효율적으로 만들어야합니다.
당신이 말하는 것은 보간법입니다. numpy/scipy에서 여러 가지 방법이 있습니다. [다음은 그 중 하나입니다] (http://docs.scipy.org/doc/scipy-0.14.0/reference/tutorial/interpolate.html#two-dimensional-spline-representation-procedural-bisplrep) (편집 : 업데이트 됨 더 좋은 예에 대한 링크) – will
나는 여러 가지 보간 방법을 이미 실험 해왔다. 그러나 그 중 아무 것도 나에게 내가 설명한 결과를 제공하지는 못했다. – user3468216
당신이 묘사하는 것은 정확하게 보간법입니다. 선형이든, 스플라인이든, 또는 다른 메트릭이 좋을 지 결정해야합니다. – will