{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "# Ctypes Example\n", "Author(s): Paul Miles, Joel Kulesza | Date Created: June 28, 2018\n", "\n", "In this example, we demonstrate how to use a model written in C++ within the context of using [pymcmcstat](https://github.com/prmiles/pymcmcstat/wiki). In this case we consider a linear model.\n", "\n", "$$y(x;q) = m x + b + \\epsilon, \\quad \\epsilon\\sim N(0,\\sigma^2), \\quad q = [m, b]$$\n", "\n", "but note that the model can be arbitrarily complex. Similar work can be performed with Fortran using the `iso_c_binding` module." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "from pymcmcstat.MCMC import MCMC\n", "import matplotlib.pyplot as plt\n", "import ctypes\n", "from numpy.ctypeslib import ndpointer\n", "np.seterr(over='ignore')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Define data set\n", "To define our data set, we generate a set of points along the line, $y = 2x - 3$, and add some random noise to the response. We have plotted the data with and without the random noise added to it." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "