Origin Cから Python関数を呼び出す


次のシンタックスを使用して、Origin CからPython関数を呼び出せます。

Python.function_name(arg1, arg2...)

デフォルトでは、C/CPPまたはXFファイルと同じフォルダに.pyファイルを置く必要があります。ファイル名はorigin.pyにしてください。

サンプル - ベイズ回帰を実行するPython関数

import numpy as np
import pandas as pd
import originpro as op
from sklearn import linear_model

def bayesian(vX, vY):
    blr = linear_model.BayesianRidge(tol=1e-6, fit_intercept=True, compute_score=False, alpha_init=1, lambda_init=1e-3)
    blr.fit(np.vander(vX, 10), vY)
    mean = blr.predict(np.vander(vX, 10))
    return mean

その後OCコードから関数を呼び出せます。

void bayesian_reg()
{
        // 3列あるワークシートをアクティブにする
        // 列1と2はそれぞれフィットを実行するX、Yデータ
        // 列3にはフィット曲線の結果を出力する
        Worksheet wks=Project.ActiveLayer();        
        Dataset dsx, dsy, dsypred;
        dsx.Attach(wks, 0);
        dsy.Attach(wks, 1);
        dsypred.Attach(wks, 2);

        dsypred = Python.bayesian(dsx, dsy);
}

複数の変数は、引数を使ってPython関数から返せます。引数名の前の&記号は、それが返された変数であることを示します。

Python.function_name(arg1, arg2..., & ret1, & ret2...)

サンプル - フィット値とフィット誤差を返すベイズ回帰を実行するPython関数

import numpy as np
import pandas as pd
import originpro as op
from sklearn import linear_model

def bayesian(vX, vY, vYmean, vYstd):
    blr = linear_model.BayesianRidge(tol=1e-6, fit_intercept=True, compute_score=False, alpha_init=1, lambda_init=1e-3)
    blr.fit(np.vander(vX, 10), vY)
    mean, std = blr.predict(np.vander(vX, 10), return_std=True)
    vYmean[:] = mean # 変数vYmeanに平均値を渡す
    vYstd[:] = std  # 変数vYstdに誤差の値を返す

その後OCコードから関数を呼び出せます。

void bayesian_reg()
{
        // 4列あるワークシートをアクティブにする
        // 列1と2はそれぞれフィットを実行するX、Yデータ
        // 列3と4にはフィット曲線結果とフィット誤差を出力
        Worksheet wks=Project.ActiveLayer();        
        Dataset dsx, dsy, dsypred, dsystd;
        dsx.Attach(wks, 0);
        dsy.Attach(wks, 1);
        dsypred.Attach(wks, 2);
        dsystd.Attach(wks, 3);
        vector vYmean, vYstd;
        Python.bayesian(dsx, dsy, &vYmean, &vYstd);  
        dsypred = vYmean;
        dsystd = vYstd;
}

ファイルの位置を変更するには、LabTalkのPythonオブジェクトプロパティである、Python.OCWD$を目的のフォルダ(作業ディレクトリ)のフルパスに設定します。

ファイル名を変更するには、LabTalkのPythonオブジェクトプロパティである、Python.OCWF$を作業ディレクトリ内の目的のファイル名に設定します。