7

scipy.interpolate.UnivariateSpline大量のデータをスムーズに補間するために使用しています。よく働く。関数のように機能するオブジェクトを取得します。

ここで、スプライン ポイントを後で保存して、元のデータを必要とせずに、Matlab (および Python でも緊急ではありません) で使用したいと考えています。これどうやってするの?

scipy では手がかりがありません。UnivariateSpline は、以前に計算されたノットと係数を持つコンストラクターを提供していないようです。

spline()MATLAB では、Matlab の関数とを試しましたが、どちらも近いですが、ギブスの耳pchip()のように見えるエンドポイントの近くにエラーがあります。

以下は、私が持っている Matlab 形式のデータのサンプル セットです。

splinedata = struct('coeffs',[-0.0412739180955273 -0.0236463479425733 0.42393753107602 -1.27274336116436 0.255711720888164 1.93923263846732 -2.30438927604816 1.02078680231079 0.997156858475075 -2.35321792387215 0.667027554745454 0.777918416623834],...
 'knots',[0 0.125 0.1875 0.25 0.375 0.5 0.625 0.75 0.875 0.9999],...
 'y',[-0.0412739180955273 -0.191354308450615 -0.869601364377744 -0.141538578624065 0.895258135865578 -1.04292294390242 0.462652465278345 0.442550440125204 -1.03967756446455 0.777918416623834])

係数とノットは、scipy UnivariateSpline を呼び出した結果get_coeffs()ですget_knots()。「y」の値は、ノットでの UnivariateSpline の値、またはより正確には次の値です。

 y = f(f.get_knots())

ここで、f は私の UnivariateSpline です。

Curve-Fitting Toolbox を使用せずに、このデータを使用して UnivariateSpline の動作に一致するスプラインを作成するにはどうすればよいですか? Matlab でデータ フィッティングを行う必要はありません。ノット/係数/スプライン値から 3 次スプラインを作成する方法を知る必要があるだけです。

4

2 に答える 2

1

scipy では、scipy.interpolate.splevを試してください。

tck: シーケンス ... スプラインのノット、係数、および次数を含みます。

追加: 次の python クラスはスプライン関数を作成します: (knots, coefs, degree) で初期化し、 によって作成されたスプライン関数と同じように使用しますUnivariateSpline( x, y, s ):

from scipy.interpolate import splev
    # http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.splev.html

class Splinefunc:
    """ splinef = Splinefunc( knots, coefs, degree )
        ...
        y = splinef( x )  # __call__

        19june untested
    """

    def __init__( self, knots, coefs, degree ):
        self.knots = knots
        self.coefs = coefs
        self.degree = degree

    def __call__( self, x ):
        return splev( x, (self.knots, self.coefs, self.degree ))
于 2013-06-18T08:42:40.873 に答える