diff --git a/src/helper_files/helper.cpp b/src/helper_files/helper.cpp index d7690732aa314a047ad116d13feff8ebfc1d6dcb..7f7568af71d955c320ecbf5ccef5b770804e6d84 100644 --- a/src/helper_files/helper.cpp +++ b/src/helper_files/helper.cpp @@ -3,7 +3,7 @@ // Extra functions to reduce some code for the conversion between arma and float *array -float *convertArmaToArray(colvec vec) +float *convertToArray(colvec vec) { vector<float> vectorData = conv_to<vector<float>>::from(vec); int vectorSize = vectorData.size(); @@ -18,10 +18,16 @@ float *convertArmaToArray(colvec vec) } return arr; } -float *convertArmaToArray(rowvec vec) +float *convertToArray(rowvec vec) { colvec newVec = conv_to<colvec>::from(vec); - return convertArmaToArray(newVec); + return convertToArray(newVec); +} + +float *convertToArray(vector<size_t> vec) +{ + colvec newVec = conv_to<colvec>::from(vec); + return convertToArray(newVec); } rowvec convertArrayToRowvec(float *arr, int vecSize) diff --git a/src/helper_files/helper.hpp b/src/helper_files/helper.hpp index 408868d5d918798f33f1eac42691b6de54343607..1093c1a88fa3c3498549f8310acb2940afb2b6ed 100644 --- a/src/helper_files/helper.hpp +++ b/src/helper_files/helper.hpp @@ -7,9 +7,14 @@ using namespace arma; using namespace mlpack; using namespace std; -float *convertArmaToArray(colvec vec); +float *convertToArray(colvec vec); + +float *convertToArray(rowvec vec); + +float *convertToArray(mat matrix); + +float *convertToArray(vector<size_t> vec); -float *convertArmaToArray(rowvec vec); rowvec convertArrayToRowvec(float *arr, int vecSize); diff --git a/src/methods/bayesian_linear_regression/bayesian_linear_regression.cpp b/src/methods/bayesian_linear_regression/bayesian_linear_regression.cpp index d79b7bb428c6dc0a751d994e4b254a47a96c0145..78813e645edd158279acb6dbb548cd3dc12a3cb4 100644 --- a/src/methods/bayesian_linear_regression/bayesian_linear_regression.cpp +++ b/src/methods/bayesian_linear_regression/bayesian_linear_regression.cpp @@ -47,7 +47,7 @@ float * dataOffset(SP_integer *arraySize) *arraySize = armaDataOffset.n_elem; - return convertArmaToArray(armaDataOffset); + return convertToArray(armaDataOffset); } // input: @@ -59,7 +59,7 @@ float * dataScale(SP_integer *arraySize) *arraySize = armaDataScale.n_elem; - return convertArmaToArray(armaDataScale); + return convertToArray(armaDataScale); } // input: @@ -71,7 +71,7 @@ float * omega(SP_integer *arraySize) *arraySize = armaOmega.n_elem; - return convertArmaToArray(armaOmega); + return convertToArray(armaOmega); } // input: const arma::mat &points, arma::rowvec &predictions @@ -89,7 +89,7 @@ void predict(float *pointsArr, SP_integer pointsSize, SP_integer pointsRowNum, f // give back the sizes and the converted results as arrays *predicSize = predictions.n_elem; - *predicArr = convertArmaToArray(predictions); + *predicArr = convertToArray(predictions); } // input: const arma::mat &points, arma::rowvec &predictions, arma::rowvec &std @@ -108,8 +108,8 @@ void predictWithStd(float *pointsArr, SP_integer pointsSize, SP_integer pointsRo *predicSize = predictions.n_elem; *stdSize = std.n_elem; - *predicArr = convertArmaToArray(predictions); - *stdArr = convertArmaToArray(std); + *predicArr = convertToArray(predictions); + *stdArr = convertToArray(std); } diff --git a/src/methods/lars/lars.cpp b/src/methods/lars/lars.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3e26a3ae41f0194b5c77a74dd7303bdbb4171639 --- /dev/null +++ b/src/methods/lars/lars.cpp @@ -0,0 +1,184 @@ +#include <sicstus/sicstus.h> +/* ex_glue.h is generated by splfr from the foreign/[2,3] facts. + Always include the glue header in your foreign resource code. +*/ +#include "lars_glue.h" +#include <mlpack/methods/lars/lars.hpp> +#include <mlpack/core.hpp> + +// including helper functions for converting between arma structures and arrays +#include "../../helper_files/helper.hpp" + +using namespace arma; +using namespace mlpack; +using namespace std; +using namespace mlpack::regression; + +// Global Variable of the Lars regressor object so it can be accessed from all functions +LARS regressor; + +// input: const bool useCholesky, const double lambda1, const double lambda2, const double tolerance +// output: +void initModelNoDataNoGram(SP_integer useCholesky, double lambda1, double lambda2, double tol) +{ + regressor = new LARS((useCholesky == 1), lambda1, lambda2, tol); +} + +// input: const bool useCholesky, const arma::mat & gramMatrix, const double lambda1, const double lambda2, const double tolerance +// output: +void initModelNoDataWithGram(SP_integer useCholesky, float *gramArr, SP_integer gramSize, SP_integer gramRowNum, SP_integer lambda1, SP_integer lambda2, double tol) +{ + mat gramMatrix = convertArrayToMat(gramArr, gramSize, gramRowNum); + + regressor = new LARS((useCholesky == 1), gramMatrix, lambda1, lambda2, tol); +} + +// input: const arma::mat & dataMatrix, const arma::rowvec & responses, const bool transposeData, const bool useCholesky, const double lambda1, const double lambda2, const double tolerance +// output: +void initModelWithDataNoGram(float *dataArr, SP_integer dataSize, SP_integer dataRowNum, float *responsesArr, SP_integer responsesSize, SP_integer transposeData, + SP_integer useCholesky, SP_integer lambda1, SP_integer lambda2, double tol) +{ + if(dataSize / dataRowNum != responsesSize) + { + cout << "Target dim doesnt fit to the Data dim" << endl; + return; + } + // convert the Prolog arrays to arma::rowvec and arma::mat + mat data = convertArrayToMat(dataArr, dataSize, dataRowNum); + rowvec responses = convertArrayToRowvec(responsesArr, responsesSize); + + regressor = new LARS(data, responses, (transposedata == 1), (useCholesky == 1), lambda1, lambda2, tol); +} + +// input: const arma::mat & dataMatrix, const arma::rowvec & responses, const bool transposeData, const bool useCholesky, const arma::mat & gramMatrix, const double lambda1, const double lambda2, const double tolerance +// output: +void initModelWithDataWithGram(float *dataArr, SP_integer dataSize, SP_integer dataRowNum, float *responsesArr, SP_integer responsesSize, SP_integer transposeData, + SP_integer useCholesky, float *gramArr, SP_integer gramSize, SP_integer gramRowNum, SP_integer lambda1, SP_integer lambda2, double tol) +{ + if(dataSize / dataRowNum != responsesSize) + { + cout << "Target dim doesnt fit to the Data dim" << endl; + return; + } + // convert the Prolog arrays to arma::rowvec and arma::mat + mat data = convertArrayToMat(dataArr, dataSize, dataRowNum); + rowvec responses = convertArrayToRowvec(responsesArr, responsesSize); + mat gramMatrix = convertArrayToMat(gramArr, gramSize, gramRowNum); + + regressor = new LARS(data, responses, (transposedata == 1), (useCholesky == 1), gramMatrix, lambda1, lambda2, tol); +} + +// TODO: conversion of std::vector to array +// input: +// output: const std::vector<size_t>& +void activeSet(SP_integer a) +{ + vector<size_t> active = regressor.ActiveSet(); + for (size_t i = 0; i < active.size(); i++) + { + cout << active[i] << endl; + } +} + +// input: +// output: arma::vec& +void beta( float **betaArr, SP_integer *betaSize) +{ + rowvec betasolution = regressor.Beta(); + *betaSize = betasolution.n_elem; + + *betaArr = convertToArray(betasolution); +} + +// TODO: adding matrix as a return +// input: +// output: std::vector<arma::vec>& +void betaPath() +{ + +} + +// input: const arma::mat &data, const arma::rowvec &responses, const bool rowMajor +// output: double minimum cost error +SP_integer computeError(float *points_mat_arr, SP_integer dataSize, SP_integer dataRowNum, float *responses_arr, SP_integer responsesSize, SP_integer rowMajor) +{ + if(dataSize / dataRowNum != responsesSize) + { + cout << "Target dim doesnt fit to the Data dim" << endl; + return 0; + } + // convert the Prolog arrays to arma::rowvec and arma::mat + mat data = convertArrayToMat(points_mat_arr, dataSize, dataRowNum); + rowvec responses = convertArrayToRowvec(responses_arr, responsesSize); + + // run the model function + return regressor.ComputeError(data, responses); +} + +// TODO: conversion of vector to array +// input: +// output: std::vector<double>& +void lambdaPath() +{ + +} + +// TODO: adding matrix as a return +// input: +// output: arma::mat& upper triangular cholesky factor +void matUtriCholFactor() +{ + mat UtriCholFact = regressor.MatUtriCholFactor(); +} + +// input: const arma::mat &points, arma::rowvec &predictions, const bool rowMajor +// output: +void predict(float *pointsArr, SP_integer pointsSize, SP_integer pointsRowNum, float **predicArr, SP_integer *predicSize, SP_integer rowMajor) +{ + // convert the Prolog arrays to std::vec for easy conversion to arma::mat + mat data = convertArrayToMat(pointsArr, pointsSize, pointsRowNum); + + // run the prediction and save the result in arma::rowvec + rowvec predictions; + regressor.Predict(data, predictions); + + + // give back the sizes and the converted results as arrays + *predicSize = predictions.n_elem; + + *predicArr = convertToArray(predictions); +} + +// input: const arma::mat &data, const arma::rowvec &responses, arma::vec& beta, const bool transposeData +// output: double minimum cost error +void train(float *dataArr, SP_integer dataSize, SP_integer dataRowNum, float *responsesArr, SP_integer responsesSize, float **betaArr, SP_integer *betaSize, SP_integer transposeData) +{ + if(dataSize / dataRowNum != responsesSize) + { + cout << "Target dim doesnt fit to the Data dim" << endl; + return; + } + // convert the Prolog arrays to arma::rowvec and arma::mat + mat data = convertArrayToMat(dataArr, dataSize, dataRowNum); + rowvec responses = convertArrayToRowvec(responsesArr, responsesSize); + + // run the model function + regressor.Train(data, responses); +} + +// input: const arma::mat &data, const arma::rowvec &responses, const bool transposeData +// output: double minimum cost error +void trainNoBetaReturn(float *dataArr, SP_integer dataSize, SP_integer dataRowNum, float *responsesArr, SP_integer responsesSize, SP_integer transposeData) +{ + if(dataSize / dataRowNum != responsesSize) + { + cout << "Target dim doesnt fit to the Data dim" << endl; + return; + } + // convert the Prolog arrays to arma::rowvec and arma::mat + rowvec responses = convertArrayToRowvec(responsesArr, responsesSize); + mat data = convertArrayToMat(dataArr, dataSize, dataRowNum); + + // run the model function + regressor.Train(data, responses); +} \ No newline at end of file diff --git a/src/methods/lars/lars.pl b/src/methods/lars/lars.pl new file mode 100644 index 0000000000000000000000000000000000000000..aef6aeb4f4ef0ee04cf8078f59115471a6a17e54 --- /dev/null +++ b/src/methods/lars/lars.pl @@ -0,0 +1,105 @@ +:- module(lars, [function/4, function/1, function/2, function/6]). + +:- load_files(library(str_decl), + [when(compile_time), if(changed)]). + +%% needed for using the array type and for reading from csv +:- use_module(library(structs)). +:- use_module('../../helper_files/helper.pl'). + +%% type definitions for the float array +:- foreign_type + float32 = float_32, + float_array = array(float32). + +%% definitions for the connected function and what there inputs and output arguments are + +%% Funktion const bool useCholesky, const double lambda1, const double lambda2, const double tolerance +foreign(initModelNoDataNoGram, c, initModelNoDataNoGram(+integer, +float32, +float32, +float32)). + +%% Funktion const bool useCholesky, const arma::mat & gramMatrix, const double lambda1, const double lambda2, const double tolerance +foreign(initModelNoDataWithGram, c, initModelNoDataWithGram(+integer, +pointer(float_array), +integer, +integer, +float32, +float32, +float32)). + +%% Funktion const arma::mat & dataMatrix, const arma::rowvec & responses, const bool transposeData, const bool useCholesky, const double lambda1, const double lambda2, const double tolerance +foreign(initModelWithDataNoGram, c, initModelWithDataNoGram(+pointer(float_array), +integer, +pointer(float_array), +integer, +integer, +integer, +float32, +float32, +float32)). + +%% Funktion const arma::mat & dataMatrix, const arma::rowvec & responses, const bool transposeData, const bool useCholesky, const arma::mat & gramMatrix, const double lambda1, const double lambda2, const double tolerance +foreign(initModelWithDataWithGram, c, initModelWithDataWithGram(+pointer(float_array), +integer, +pointer(float_array), +integer, +integer, +integer, +pointer(float_array), +integer, +integer, +float32, +float32, +float32)). + +%% TODO: +%% Funktion that takes data from Prolog +%% input +%% output const std::vector<size_t>& +foreign(activeSet, c, activeSet(+integer, +integer, +integer, +float32)). + +%% Funktion that takes data from Prolog +%% input +%% output arma::vec& +foreign(beta, c, beta(+integer, +integer, +integer, +float32)). + +%% TODO: +%% Funktion that takes data from Prolog +%% input +%% output std::vector<arma::vec>& +foreign(betaPath, c, betaPath(+integer, +integer, +integer, +float32)). + +%% Funktion that takes data from Prolog +%% input: const arma::mat &data, const arma::rowvec &responses, const bool rowMajor +%% output: double minimum cost error +foreign(computeError, c, computeError(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, +integer, [-float32])). + +%% TODO: +%% Funktion that takes data from Prolog +%% input +%% output std::vector<double>& +foreign(lambdaPath, c, lambdaPath(+integer, +integer, +integer, +float32)). + +%% TODO: +%% Funktion that takes data from Prolog +%% input +%% output arma::mat& upper triangular cholesky factor +foreign(matUtriCholFactor, c, matUtriCholFactor(+integer)). + +%% Funktion that takes data from Prolog +%% input const arma::mat &points, arma::rowvec &predictions, const bool rowMajor +%% output +foreign(predict, c, predict(+pointer(float_array), +integer, +integer, -pointer(float_array), -integer, +integer)). + +%% Funktion that takes data from Prolog +%% input const arma::mat &data, const arma::rowvec &responses, arma::vec& beta, const bool transposeData +%% output double minimum cost error +foreign(train, c, train(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, -pointer(float_array), -integer, +integer, [-integer])). + +%% Funktion that takes data from Prolog +%% input const arma::mat &data, const arma::rowvec &responses, const bool transposeData +%% output double minimum cost error +foreign(trainNoBetaReturn, c, trainNoBetaReturn(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, +integer, [-integer])). + +%% Funktion that takes data from Prolog +%% input +%% output +foreign(function, c, function(+integer, +integer, +integer, +float32)). +%% Funktion that return data to Prolog +foreign(function, c, function([-integer])). +%% Funktion that returns a array +foreign(function, c, function(-integer, [-pointer(float_array)])). +%% Funktion that takes a Matrix and a Array +foreign(function, c, function(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, [-integer])). + +%% Defines what functions should be connected from main.cpp +foreign_resource(lars, [ + initModelNoDataNoGram, + initModelNoDataWithGram, + initModelWithDataNoGram, + initModelWithDataWithGram, + activeSet, + beta, + betaPath, + computeError, + lambdaPath, + matUtriCholFactor, + predict, + train, + trainNoBetaReturn]). + +:- load_foreign_resource(lars). \ No newline at end of file diff --git a/src/methods/lars/new_method.cpp b/src/methods/lars/new_method.cpp deleted file mode 100644 index dba044b94fdbb2bdc397bc75fab7a829824fd6a5..0000000000000000000000000000000000000000 --- a/src/methods/lars/new_method.cpp +++ /dev/null @@ -1,196 +0,0 @@ -#include <sicstus/sicstus.h> -/* ex_glue.h is generated by splfr from the foreign/[2,3] facts. - Always include the glue header in your foreign resource code. -*/ -#include "new_method_glue.h" -#include <mlpack/methods/new_method.hpp> -#include <mlpack/core.hpp> - -// including helper functions for converting between arma structures and arrays -#include "../../helper_files/helper.hpp" - -using namespace arma; -using namespace mlpack; -using namespace std; -using namespace mlpack::regression; - -// Global Variable of the BayesianLinearRegression object so it can be accessed from all functions -BayesianLinearRegression regressor; - - -// input: const bool , const bool , const size_t , const double -// output: double -void initModel(SP_integer centerData, SP_integer scaleData, SP_integer nIterMax, double tol) -{ - regressor = new BayesianLinearRegression((centerData == 1), (scaleData == 1), nIterMax, tol); -} - -// input: -// output: double -SP_integer alpha() -{ - return regressor.Alpha(); -} - -// input: -// output: double -SP_integer beta() -{ - return regressor.Beta(); -} - -// input: -// output: const arma::colvec & -float * dataOffset(SP_integer *arraySize) -{ - // save the DataOffset output in colvec - colvec armaDataOffset = regressor.DataOffset(); - - *arraySize = armaDataOffset.n_elem; - - return convertArmaToArray(armaDataOffset); -} - -// input: -// output: const arma::colvec & -float * dataScale(SP_integer *arraySize) -{ - // save the DataScale output in colvec - colvec armaDataScale = regressor.DataScale(); - - *arraySize = armaDataScale.n_elem; - - return convertArmaToArray(armaDataScale); -} - -// input: -// output: const arma::colvec & -float * omega(SP_integer *arraySize) -{ - // save the Omega output in colvec - colvec armaOmega = regressor.Omega(); - - *arraySize = armaOmega.n_elem; - - return convertArmaToArray(armaOmega); -} - -// input: const arma::mat &points, arma::rowvec &predictions -// output: -void predict(float *pointsArr, SP_integer pointsSize, SP_integer pointsRowNum, float **predicArr, SP_integer *predicSize) -{ - // convert the Prolog arrays to std::vec for easy conversion to arma::mat - mat data = convertArrayToMat(pointsArr, pointsSize, pointsRowNum); - - // run the prediction and save the result in arma::rowvec - rowvec predictions; - regressor.Predict(data, predictions); - - - // give back the sizes and the converted results as arrays - *predicSize = predictions.n_elem; - - *predicArr = convertArmaToArray(predictions); -} - -// input: const arma::mat &points, arma::rowvec &predictions, arma::rowvec &std -// output: -void predictWithStd(float *pointsArr, SP_integer pointsSize, SP_integer pointsRowNum, float **predicArr, SP_integer *predicSize, float **stdArr, SP_integer *stdSize) -{ - // convert the Prolog arrays to std::vec for easy conversion to arma::mat - mat data = convertArrayToMat(pointsArr, pointsSize, pointsRowNum); - - // run the prediction and save the results in arma::rowvecs - rowvec predictions; - rowvec std; - regressor.Predict(data, predictions, std); - - // give back the sizes and the converted results as arrays - *predicSize = predictions.n_elem; - *stdSize = std.n_elem; - - *predicArr = convertArmaToArray(predictions); - *stdArr = convertArmaToArray(std); -} - - -// input: -// output: double -SP_integer responsesOffset() -{ - return regressor.ResponsesOffset(); -} - -// input: const arma::mat &data, const arma::rowvec &responses -// output: double -SP_integer rmse(float *matrix, SP_integer matSize, SP_integer matRowNum, float *arr, SP_integer vecSize) -{ - // convert the Prolog arrays to arma::rowvec and arma::mat - rowvec responses = convertArrayToRowvec(arr, vecSize); - mat data = convertArrayToMat(matrix, matSize, matRowNum); - - // run the model function and return the error - return regressor.RMSE(data, responses); -} - -// input: const arma::mat &data, const arma::rowvec &responses -// output: -void train(float *matrix, SP_integer matSize, SP_integer matRowNum, float *arr, SP_integer vecSize) -{ - if(matSize / matRowNum != vecSize) - { - cout << "Target dim doesnt fit to the Data dim" << endl; - return; - } - // convert the Prolog arrays to arma::rowvec and arma::mat - rowvec responses = convertArrayToRowvec(arr, vecSize); - mat data = convertArrayToMat(matrix, matSize, matRowNum); - - // run the model function - regressor.Train(data, responses); -} - -// input: -// output: double -SP_integer variance() -{ - return regressor.Variance(); -} - -/* -void testing() -{ - // load the iris data - mat dataset; - bool loaded = mlpack::data::Load("iris.csv", dataset); - - // split the data into train and test - mat trainData = dataset.cols(1, 4); - trainData.shed_row(trainData.n_rows - 1); - rowvec trainTarget = trainData.row(trainData.n_rows - 1); - trainData.shed_row(trainData.n_rows - 1); - - mat testData = dataset.col(dataset.n_cols - 1); - testData.shed_row(testData.n_rows - 1); - rowvec testTarget = testData.row(testData.n_rows - 1); - testData.shed_row(testData.n_rows - 1); - - - // init the bayesian linear regressor model - - - // train the model - regressor.Train(trainData, trainTarget); - - // predict with the test data - rowvec prediction; - regressor.Predict(testData, prediction); - - - // compare test target and prediction - cout << "Train Data: " << trainData << endl; - cout << "Train Target: " << trainTarget << endl; - cout << "Alpha" << alpha() << endl; - cout << "Beta" << beta() << endl; -} -*/ diff --git a/src/methods/lars/new_method.pl b/src/methods/lars/new_method.pl deleted file mode 100644 index 2ba4630ba07bc285076c0bce10f0231484ea8cd3..0000000000000000000000000000000000000000 --- a/src/methods/lars/new_method.pl +++ /dev/null @@ -1,29 +0,0 @@ -:- module(new_method, [function/4, function/1, function/2, function/6]). - -:- load_files(library(str_decl), - [when(compile_time), if(changed)]). - -%% needed for using the array type and for reading from csv -:- use_module(library(structs)). -:- use_module('../../helper_files/helper.pl'). - -%% type definitions for the float array -:- foreign_type - float32 = float_32, - float_array = array(float32). - -%% definitions for the connected function and what there inputs and output arguments are - -%% Funktion that takes data from Prolog -foreign(function, c, function(+integer, +integer, +integer, +float32)). -%% Funktion that return data to Prolog -foreign(function, c, function([-integer])). -%% Funktion that returns a array -foreign(function, c, function(-integer, [-pointer(float_array)])). -%% Funktion that takes a Matrix and a Array -foreign(function, c, function(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, [-integer])). - -%% Defines what functions should be connected from main.cpp -foreign_resource(new_method, [function, function, function, function]). - -:- load_foreign_resource(new_method). \ No newline at end of file diff --git a/src/methods/linear_regression/linear_regression.cpp b/src/methods/linear_regression/linear_regression.cpp index 7dd7bbd2b2f6d9a2e4b7787baff6af1df5ee36a4..47b9ea2d533148c669e2e29a8872b21f0c9f8815 100644 --- a/src/methods/linear_regression/linear_regression.cpp +++ b/src/methods/linear_regression/linear_regression.cpp @@ -112,7 +112,7 @@ float * parameters(SP_integer *arraySize) *arraySize = armaDataOffset.n_elem; // convert b vector to array and return - return convertArmaToArray(armaDataOffset); + return convertToArray(armaDataOffset); } // input: arma::vec & new b vector @@ -144,7 +144,7 @@ void predict(float *pointsArr, SP_integer pointsSize, SP_integer pointsRowNum, f // give back the sizes and the converted results as arrays *predicSize = predictions.n_elem; - *predicArr = convertArmaToArray(predictions); + *predicArr = convertToArray(predictions); } // input: const arma::mat &data, const arma::rowvec &responses, const bool intercept diff --git a/src/methods/new_method/new_method.cpp b/src/methods/new_method/new_method.cpp index dba044b94fdbb2bdc397bc75fab7a829824fd6a5..7224c8805d9dc598920a36aecbf0fced66b3c00c 100644 --- a/src/methods/new_method/new_method.cpp +++ b/src/methods/new_method/new_method.cpp @@ -48,7 +48,7 @@ float * dataOffset(SP_integer *arraySize) *arraySize = armaDataOffset.n_elem; - return convertArmaToArray(armaDataOffset); + return convertToArray(armaDataOffset); } // input: @@ -60,7 +60,7 @@ float * dataScale(SP_integer *arraySize) *arraySize = armaDataScale.n_elem; - return convertArmaToArray(armaDataScale); + return convertToArray(armaDataScale); } // input: @@ -72,7 +72,7 @@ float * omega(SP_integer *arraySize) *arraySize = armaOmega.n_elem; - return convertArmaToArray(armaOmega); + return convertToArray(armaOmega); } // input: const arma::mat &points, arma::rowvec &predictions @@ -90,7 +90,7 @@ void predict(float *pointsArr, SP_integer pointsSize, SP_integer pointsRowNum, f // give back the sizes and the converted results as arrays *predicSize = predictions.n_elem; - *predicArr = convertArmaToArray(predictions); + *predicArr = convertToArray(predictions); } // input: const arma::mat &points, arma::rowvec &predictions, arma::rowvec &std @@ -109,8 +109,8 @@ void predictWithStd(float *pointsArr, SP_integer pointsSize, SP_integer pointsRo *predicSize = predictions.n_elem; *stdSize = std.n_elem; - *predicArr = convertArmaToArray(predictions); - *stdArr = convertArmaToArray(std); + *predicArr = convertToArray(predictions); + *stdArr = convertToArray(std); } diff --git a/src/methods/new_method/new_method.pl b/src/methods/new_method/new_method.pl index 2ba4630ba07bc285076c0bce10f0231484ea8cd3..35488cbd497d7899b1f34af8f0aeb7af0154a88f 100644 --- a/src/methods/new_method/new_method.pl +++ b/src/methods/new_method/new_method.pl @@ -15,13 +15,24 @@ %% definitions for the connected function and what there inputs and output arguments are %% Funktion that takes data from Prolog -foreign(function, c, function(+integer, +integer, +integer, +float32)). -%% Funktion that return data to Prolog -foreign(function, c, function([-integer])). -%% Funktion that returns a array -foreign(function, c, function(-integer, [-pointer(float_array)])). -%% Funktion that takes a Matrix and a Array -foreign(function, c, function(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, [-integer])). +%% input +%% output +foreign(function, c, function(arguments)). + +%% +integer , +float32 +%% [-integer] , [-float32] + +%% matrix input +%% +pointer(float_array), +integer, +integer + +%% array input +%% +pointer(float_array), +integer + +%% matrix return +%% -pointer(float_array), -integer, -integer + +%% array return +%% -pointer(float_array), -integer %% Defines what functions should be connected from main.cpp foreign_resource(new_method, [function, function, function, function]).