2012-07-30 33 views
9

Düzenli bir eğitim değerleri ızgaram var (xmesh ve ymesh x ve y vektörleri ve bilinen zmesh değerleri x). enterpolasyonlu düzensiz grup değerleri (xs ve yI vektörleri, zI [0] = f (xI [0], yI [0]) ile ilgileniriz ... zI [N-1] = f (xI [N -1], yI [N-1]) Bu enterpolasyon, optimizasyon probleminin bir parçası olarak milyonlarca kez çağrılacaktır, bu nedenle performans, ızgarayı yapan ve izleyen bir yöntemi kullanmak için çok önemlidir.Python'da Python ile hızlı 2-D interpolasyon Dağınık/düzensiz değerlendirmeye düzenli kılavuz ızgara

Şimdiye kadar istediğim, Bpf işlevine yaklaşan bir scipy.interpolate işlevi buldum. Ancak, dağınık bir girdiyi anlattığı için, bunun iyi bir performansa sahip olmadığını düşünüyorum ve ' d li spline, lineer ve en yakın komşu interpolasyon yöntemlerine karşı test etmek için daha iyi anlıyorum ve daha hızlı olacağımı umuyorum. Düzenli gridleri, eğitim verileri olarak (RectBivariateSpline gibi) bulabildiklerimi uygulayabilen tüm yöntemler, değerlerin enterpolasyonu için düzenli ızgaralar gerektiriyor. Bu kod, ne istediğimi açıkça belirleyecektir.

import numpy as np 
import scipy as sp 
import scipy.interpolate as interp 

x = np.arange(0,2*np.pi,.1) 
y = x 
xmesh,ymesh = np.meshgrid(x,y) 
zmesh = np.sin(xmesh)+np.cos(ymesh) 
rbf = interp.Rbf(xmesh, ymesh, zmesh, epsilon=2) 
xI = np.arange(0,np.pi,.05) 
yI = xI 
XI, YI = np.meshgrid(xI,yI) 
# Notice how this is happy to take a vector or grid as input 
zI = rbf(xI, yI) 
ZI = rbf(XI,YI) # equiv. to zImesh 
myspline = interp.RectBivariateSpline(x, y, zmesh) 
# myspline takes vectors as input but makes them into meshes for evaluation 
splineoutput = myspline(xI, yI) 
# myspline returns ZI but I want zI 
print(splineoutput) 
print(ZI) 
print(zI) 

yerine ZI (mesh) ait Zi (vektör) almak için ama RectBivariateSpline gibi bir işlevi kullanmak için yapabileceği bir şey var mı? Veya alternatif olarak, alternatif optimizasyon yöntemlerinde istediğim şekilde çalışan başka bir işlev ailesi var mı, eğer öyleyse, ne aramalıyım?

Aradığım şey, göreceli olarak büyük veri dizileri (20.000'den fazla giriş), ızgara noktaları arasındaki küçük mesafeler ve verilerin oldukça düzgün olduğu, hızlı bir optimizasyon tekniği olduğudur. Mevcut kütüphanelerle ihtiyacım olanı yapmak için güzel ve basit bir yol olduğunu sanıyorum ama bulamıyorum. Yardım için teşekkürler.

cevap

2

, RectBivariateSpline.__call__() opsiyonel grid= kelime argüman alır True bu durumda varsayılan:

ızgara: bool

tarafından yayılan bir ızgara üzerinde sonuçları değerlendirmek ister giriş dizileri veya giriş dizileri tarafından belirtilen noktalarda.

Yani kullanabilirsiniz:

splineoutput = myspline(xI, yI, grid=False)