Skip to content

Instantly share code, notes, and snippets.

@tanutarou
Last active September 5, 2017 12:22
Show Gist options
  • Save tanutarou/4ce0a246d3691be80385f5472e7654e5 to your computer and use it in GitHub Desktop.
Save tanutarou/4ce0a246d3691be80385f5472e7654e5 to your computer and use it in GitHub Desktop.
『計算統計Ⅱ マルコフ連鎖モンテカルロ法とその周辺』 第1部2章の再現コード (p.8~28)
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from __future__ import print_function, division\n",
"import matplotlib as mpl\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"import numpy as np\n",
"import math\n",
"import itertools\n",
"import copy\n",
"import seaborn as sns\n",
"sns.set(context='paper', style='darkgrid', rc={'figure.facecolor':'white'}, font_scale=1.2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## メトロポリス法\n",
"### 完全グラフの2変数相互作用を持つ確率分布(2.1 p.8)\n",
"$$\n",
"P(\\bf{x}) = \\frac{\\exp(\\sum_{i<j} \\theta x_i x_j)}{Z}\n",
"$$\n",
"$\\theta$: 相互作用の強さ"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def calc_p(theta, x):\n",
" def calc_non_normalized_p(theta, x):\n",
" \"\"\" 正規化されていないpを返す \"\"\"\n",
" E = 0\n",
" for (x1, x2) in itertools.combinations(x,2):\n",
" E += x1 * x2\n",
" E *= theta\n",
" return np.exp(E)\n",
" \n",
" def calc_z(theta, x, n):\n",
" \"\"\" 分配関数の計算 \"\"\"\n",
" if len(x) == n:\n",
" return calc_non_normalized_p(theta, x)\n",
" ret = 0\n",
" for i in [-1, 1]:\n",
" x.append(i)\n",
" ret += calc_z(theta, x, n)\n",
" x.pop()\n",
" return ret\n",
" \n",
" z = calc_z(theta, [], len(x))\n",
" return calc_non_normalized_p(theta, x) / z"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"p(1,1,1) = 0.21294837787583085\n"
]
}
],
"source": [
"print(\"p(1,1,1) = {}\".format(calc_p(0.2, [1, 1, 1])))"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def calc_r(theta, x, idx):\n",
" \"\"\" 候補の確率と現在の状態の確率の比を計算する関数 \"\"\"\n",
" return np.exp(-2 * theta * x[idx] * (sum(x) - x[idx]))"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def mcmc_metro(calc_r, init, max_iter, burn_in, theta=0.2):\n",
" \"\"\" \n",
" メトロポリス法によるMCMC\n",
" calc_r : 候補の確率と現在の状態の確率の比を計算する関数\n",
" init : 初期状態\n",
" max_iter : 繰り返し回数\n",
" burn_in : 捨てる初期サンプル数\n",
" theta : 相互作用の強さ\n",
" \"\"\"\n",
" samples = []\n",
" x = init\n",
" for i in range(max_iter):\n",
" # 次の候補の生成\n",
" select = np.random.randint(len(x))\n",
" \n",
" # 候補の確率と現在の状態の確率の比の計算\n",
" r = calc_r(theta, x, select)\n",
" if np.random.rand() < r:\n",
" # aceptなら状態を変更する\n",
" x[select] = -x[select]\n",
" \n",
" # サンプル列に追加\n",
" samples.append(copy.deepcopy(x))\n",
" return samples[burn_in:]"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"mean x0 : 0.10888888888888888\n",
"mean x1 : 0.12066666666666667\n",
"mean x2 : 0.12933333333333333\n"
]
}
],
"source": [
"init = np.array([1, 1, 1])\n",
"samples = np.array(mcmc_metro(calc_r, init, 10000, 1000, 0.8))\n",
"samples = samples.transpose()\n",
"for i in range(len(init)):\n",
" print(\"mean x{} : {}\".format(i, samples[i].mean()))"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def mean_x_plot(samples, idx):\n",
" \"\"\" 1変数期待値のplot \"\"\"\n",
" div = 10\n",
" itr = []\n",
" means = []\n",
" for i in range(div, len(samples[idx]), div):\n",
" itr.append(i)\n",
" means.append(samples[idx][:i].mean())\n",
" plt.ylim([-1, 1])\n",
" plt.ylabel(\"mean x\")\n",
" plt.xlabel(\"number of iteration\")\n",
" plt.plot(itr, means, label=\"mean x{}\".format(idx))\n",
" plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f28332cac88>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 1変数期待値のtrace\n",
"init = np.array([1, 1, 1])\n",
"samples = np.array(mcmc_metro(calc_r, init, 10000, 1000, 0.8))\n",
"samples = samples.transpose()\n",
"for i in range(3):\n",
" mean_x_plot(samples, i)"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def mean_xx_plot(samples, i1, i2):\n",
" \"\"\" 2変数期待値のplot \"\"\"\n",
" div = 10\n",
" itr = []\n",
" means = []\n",
" for i in range(div, len(samples[i1]), div):\n",
" itr.append(i)\n",
" xx = samples[i1][:i] * samples[i2][:i]\n",
" means.append(xx.mean())\n",
" plt.ylim([-1, 1])\n",
" plt.ylabel(\"mean x\")\n",
" plt.xlabel(\"number of iteration\")\n",
" plt.plot(itr, means, label=\"mean x{} * x{}\".format(i1, i2))\n",
" plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"theta = 0.2\n"
]
},
{
"data": {
"image/png": "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\n+vRh5cqVpKenM23aNEwmE6tXr2bRokXccMMNjB07ltTUVObNm0d6ejomk4l58+bxm9/8hlOnTpGQ\nkEB8fDxff/01qqry8ssv06pVq+r9jxc1hhQOUSvFxsbyr3/9i40bN/LKK6/wt7/9rcJtDh06xJo1\nawAYMGAAxcXFvP/++yQnJ/Poo4/6CseZM2eIj49n0aJFrFq1imeffZbly5fzr3/9i8LCQtauXYui\nKMyfP58PPviACRMmAKCqKh9++OElxz148CArV65k3bp1REREMGPGDN5//30SEhJISUkBSopbWdq2\nbes7xvn1vv76a7755hvWrFmD0Wjkr3/9KytWrOCRRx4BSl4WdD5Oh8PBO++8g8lk4syZM9x1111s\n3bqVKVOm8O677/L666/TvHnzS477zDPP0Lt3b+655x6Sk5OZOXMmmzdvBuDnn39m0KBBzJs3jxUr\nVrBy5UqeeeaZCv8PRN0ghUPUSsOGDQNKxlN65ZVXLmubvn37EhoaCkDr1q3p27cvAF27duXkyZO+\n9S5+v/2YMWN8b3VLSkri4MGDfPnllwAUFxf7hscGfO9Y+KXdu3cTHx/vG2Z77NixrF+/noSEhMs9\n3UskJSXx3XffMW7cOADcbjcdO3b0i0VRFKBkGO958+Zx+PBhVFUlIyODzMxMGjduXO4xLm69de/e\nnaioKI4cOYLNZqNx48b06NHDt2zXrl2VPhdR+0jhELWS2WwGwGAw4PV6gZLf+DVN863jdDqxWCyX\nbHN+3fPTqqr69lEeXdd55JFHGDJkSKnLzxelXzr/BV6VdF0nISGB++67r8JYXn75ZeLi4nj55ZdR\nFIWePXte1utKfxn3xdMX5/Li/wNRP8hdVaLOaNGiBQcPHsTj8VBQUMC2bdsqtZ/c3Fzfths2bPBd\nkO7bty+rV6+mqKgIgJycHL+WSll69OjB1q1byc3NRdM01q9fz4033hhQTDabDYfD4Zvu27cv69at\nIzs7G4DCwkIOHz5c6rb5+fk0adIERVHYtGmT33DfVqvVb78Xu+GGG3xdb/v37ycnJ8f3xkhRv0mL\nQ9QZ1113Hd26dWP48OHExsbSuXPnSu2nSZMmfP7557zwwguEh4fz0ksvATBu3DjS09O54447ADCZ\nTMydO5cWLVqUu7/OnTtz7733MmnSJACuv/567rzzzoBiio+PZ8aMGYwePZp7772XUaNGMXnyZCZP\nnsz5cUpnzJhBu3btLtl22rRpPP7447z99tv06NGDpk2b+pZNmjSJWbNmERISwurVq/22e/LJJ5k3\nbx4ffvghJpOJF1980a+lIeovGR1XCCFEQKSrSgghRECkcAghhAiIFA4hhBABkcIhhBAiIFI4hBBC\nBEQKhxBCiIBI4RBCCBEQKRxCCCEC8v8B484uI5m/D3cAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f282fb9ac18>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"theta = 0.4\n"
]
},
{
"data": {
"image/png": "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\nanyP43tvqampOJ1Odu/ejcPhICkpid69ewfXffnll3U+FnH6kcIhTks2mw0AVVXRdR2o/IvfMIxg\nG6/Xi91uP2Gbo22PvtY0LbiPmpimyT333MPQoUOrXH+0KP3W0S/w+mSaJhkZGdx00021xvL000/T\nqVMnnn76aRRFoU+fPif1uNLfxn386+NzefzPQJwZ5Koq0WS0bt2a7du3EwgE8Hg8fPrpp3XaT3Fx\ncXDbVatWBU9I9+/fnyVLllBeXg5AUVFRSE+lOr1792b9+vUUFxdjGAYrV67k4osvDismh8OB2+0O\nvu7fvz8rVqygsLAQgLKyMnbt2lXltqWlpbRs2RJFUVizZk3IdN+xsbEh+z3eRRddFBx627ZtG0VF\nRcEnRoozm/Q4RJNx/vnn06tXL6688kpSUlLo1q1bnfbTsmVLPvnkE5544gni4uJ46qmnABg7diy5\nublcc801AFitVh588EFat25d4/66devGjTfeyMSJEwG48MILufbaa8OKKS0tjTvuuINRo0Zx4403\nctVVVzFp0iQmTZrE0XlK77jjDjp06HDCtlOnTuX+++/n1VdfpXfv3px11lnBdRMnTmT69OlERUWx\nZMmSkO0eeughZs6cybvvvovVauXJJ58M6WmIM5fMjiuEECIsMlQlhBAiLFI4hBBChEUKhxBCiLBI\n4RBCCBEWKRxCCCHCIoVDCCFEWKRwCCGECIsUDiGEEGH5/0GBPL5rmVASAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f2865abe828>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"theta = 0.8\n"
]
},
{
"data": {
"image/png": "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\nCCH88v8DXSGodGvL+EEAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f2833873f98>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 2変数期待値のtrace\n",
"for theta in [0.2, 0.4, 0.8]:\n",
" print(\"theta = {}\".format(theta))\n",
" samples = np.array(mcmc_metro(calc_r, init, 10000, 1000, theta))\n",
" samples = samples.transpose()\n",
" \n",
" # 理論線\n",
" plt.axhline((2*np.exp(3*theta) - 2*np.exp(-theta)) / (2*np.exp(3*theta) + 6*np.exp(-theta)), 0, len(samples), c=\"k\", label=\"ideal\")\n",
" # トレースのプロット\n",
" for (i1, i2) in itertools.combinations(list(range(len( samples ))), 2):\n",
" mean_xx_plot(samples, i1, i2)\n",
" plt.show()\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### イジングモデル(2.3 p.16)\n",
"$$\n",
"P(\\bf{x}) = \\frac{exp \\left(\\theta \\sum_{(i,j) \\in G} x_i x_j \\right)}{Z}\n",
"$$\n",
"グラフG : $L \\times L$格子"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def calc_r_ising(theta, x, idx):\n",
" L = int(np.sqrt(len(x)))\n",
" assert int(L*L) == len(x)\n",
" \n",
" adjs = [idx+1, idx-1, idx+L, idx-L]\n",
" \n",
" sum_adj = 0\n",
" for a in adjs:\n",
" if a >= 0 and a < len(x):\n",
" sum_adj += x[a]\n",
" return np.exp(-2 * theta * x[idx] * sum_adj)"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f2833176e48>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 1変数期待値のtrace\n",
"L = 5\n",
"init = [1 for i in range(L*L)]\n",
"samples = np.array(mcmc_metro(calc_r_ising, init, 100000, 2000, 0.5))\n",
"samples = samples.transpose()\n",
"for i in range(3):\n",
" mean_x_plot(samples, i)"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\n",
"\n",
"\n",
"mpl.get_websocket_type = function() {\n",
" if (typeof(WebSocket) !== 'undefined') {\n",
" return WebSocket;\n",
" } else if (typeof(MozWebSocket) !== 'undefined') {\n",
" return MozWebSocket;\n",
" } else {\n",
" alert('Your browser does not have WebSocket support.' +\n",
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
" 'Firefox 4 and 5 are also supported but you ' +\n",
" 'have to enable WebSockets in about:config.');\n",
" };\n",
"}\n",
"\n",
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
" this.id = figure_id;\n",
"\n",
" this.ws = websocket;\n",
"\n",
" this.supports_binary = (this.ws.binaryType != undefined);\n",
"\n",
" if (!this.supports_binary) {\n",
" var warnings = document.getElementById(\"mpl-warnings\");\n",
" if (warnings) {\n",
" warnings.style.display = 'block';\n",
" warnings.textContent = (\n",
" \"This browser does not support binary websocket messages. \" +\n",
" \"Performance may be slow.\");\n",
" }\n",
" }\n",
"\n",
" this.imageObj = new Image();\n",
"\n",
" this.context = undefined;\n",
" this.message = undefined;\n",
" this.canvas = undefined;\n",
" this.rubberband_canvas = undefined;\n",
" this.rubberband_context = undefined;\n",
" this.format_dropdown = undefined;\n",
"\n",
" this.image_mode = 'full';\n",
"\n",
" this.root = $('<div/>');\n",
" this._root_extra_style(this.root)\n",
" this.root.attr('style', 'display: inline-block');\n",
"\n",
" $(parent_element).append(this.root);\n",
"\n",
" this._init_header(this);\n",
" this._init_canvas(this);\n",
" this._init_toolbar(this);\n",
"\n",
" var fig = this;\n",
"\n",
" this.waiting = false;\n",
"\n",
" this.ws.onopen = function () {\n",
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
" fig.send_message(\"send_image_mode\", {});\n",
" if (mpl.ratio != 1) {\n",
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
" }\n",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" this.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var backingStore = this.context.backingStorePixelRatio ||\n",
"\tthis.context.webkitBackingStorePixelRatio ||\n",
"\tthis.context.mozBackingStorePixelRatio ||\n",
"\tthis.context.msBackingStorePixelRatio ||\n",
"\tthis.context.oBackingStorePixelRatio ||\n",
"\tthis.context.backingStorePixelRatio || 1;\n",
"\n",
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
"\n",
" var rubberband = $('<canvas/>');\n",
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
"\n",
" var pass_mouse_events = true;\n",
"\n",
" canvas_div.resizable({\n",
" start: function(event, ui) {\n",
" pass_mouse_events = false;\n",
" },\n",
" resize: function(event, ui) {\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" stop: function(event, ui) {\n",
" pass_mouse_events = true;\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" });\n",
"\n",
" function mouse_event_fn(event) {\n",
" if (pass_mouse_events)\n",
" return fig.mouse_event(event, event['data']);\n",
" }\n",
"\n",
" rubberband.mousedown('button_press', mouse_event_fn);\n",
" rubberband.mouseup('button_release', mouse_event_fn);\n",
" // Throttle sequential mouse events to 1 every 20ms.\n",
" rubberband.mousemove('motion_notify', mouse_event_fn);\n",
"\n",
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
"\n",
" canvas_div.on(\"wheel\", function (event) {\n",
" event = event.originalEvent;\n",
" event['data'] = 'scroll'\n",
" if (event.deltaY < 0) {\n",
" event.step = 1;\n",
" } else {\n",
" event.step = -1;\n",
" }\n",
" mouse_event_fn(event);\n",
" });\n",
"\n",
" canvas_div.append(canvas);\n",
" canvas_div.append(rubberband);\n",
"\n",
" this.rubberband = rubberband;\n",
" this.rubberband_canvas = rubberband[0];\n",
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
" this.rubberband_context.strokeStyle = \"#000000\";\n",
"\n",
" this._resize_canvas = function(width, height) {\n",
" // Keep the size of the canvas, canvas container, and rubber band\n",
" // canvas in synch.\n",
" canvas_div.css('width', width)\n",
" canvas_div.css('height', height)\n",
"\n",
" canvas.attr('width', width * mpl.ratio);\n",
" canvas.attr('height', height * mpl.ratio);\n",
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
"\n",
" rubberband.attr('width', width);\n",
" rubberband.attr('height', height);\n",
" }\n",
"\n",
" // Set the figure to an initial 600x600px, this will subsequently be updated\n",
" // upon first draw.\n",
" this._resize_canvas(600, 600);\n",
"\n",
" // Disable right mouse context menu.\n",
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
" return false;\n",
" });\n",
"\n",
" function set_focus () {\n",
" canvas.focus();\n",
" canvas_div.focus();\n",
" }\n",
"\n",
" window.setTimeout(set_focus, 100);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('<div/>')\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items) {\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) {\n",
" // put a spacer in here.\n",
" continue;\n",
" }\n",
" var button = $('<button/>');\n",
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
" 'ui-button-icon-only');\n",
" button.attr('role', 'button');\n",
" button.attr('aria-disabled', 'false');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
"\n",
" var icon_img = $('<span/>');\n",
" icon_img.addClass('ui-button-icon-primary ui-icon');\n",
" icon_img.addClass(image);\n",
" icon_img.addClass('ui-corner-all');\n",
"\n",
" var tooltip_span = $('<span/>');\n",
" tooltip_span.addClass('ui-button-text');\n",
" tooltip_span.html(tooltip);\n",
"\n",
" button.append(icon_img);\n",
" button.append(tooltip_span);\n",
"\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" var fmt_picker_span = $('<span/>');\n",
"\n",
" var fmt_picker = $('<select/>');\n",
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
" fmt_picker_span.append(fmt_picker);\n",
" nav_element.append(fmt_picker_span);\n",
" this.format_dropdown = fmt_picker[0];\n",
"\n",
" for (var ind in mpl.extensions) {\n",
" var fmt = mpl.extensions[ind];\n",
" var option = $(\n",
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
" fmt_picker.append(option)\n",
" }\n",
"\n",
" // Add hover states to the ui-buttons\n",
" $( \".ui-button\" ).hover(\n",
" function() { $(this).addClass(\"ui-state-hover\");},\n",
" function() { $(this).removeClass(\"ui-state-hover\");}\n",
" );\n",
"\n",
" var status_bar = $('<span class=\"mpl-message\"/>');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"}\n",
"\n",
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
" // which will in turn request a refresh of the image.\n",
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
"}\n",
"\n",
"mpl.figure.prototype.send_message = function(type, properties) {\n",
" properties['type'] = type;\n",
" properties['figure_id'] = this.id;\n",
" this.ws.send(JSON.stringify(properties));\n",
"}\n",
"\n",
"mpl.figure.prototype.send_draw_message = function() {\n",
" if (!this.waiting) {\n",
" this.waiting = true;\n",
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
" }\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" var format_dropdown = fig.format_dropdown;\n",
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
" fig.ondownload(fig, format);\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
" var size = msg['size'];\n",
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
" fig._resize_canvas(size[0], size[1]);\n",
" fig.send_message(\"refresh\", {});\n",
" };\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
" var x0 = msg['x0'] / mpl.ratio;\n",
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
" var x1 = msg['x1'] / mpl.ratio;\n",
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
" x0 = Math.floor(x0) + 0.5;\n",
" y0 = Math.floor(y0) + 0.5;\n",
" x1 = Math.floor(x1) + 0.5;\n",
" y1 = Math.floor(y1) + 0.5;\n",
" var min_x = Math.min(x0, x1);\n",
" var min_y = Math.min(y0, y1);\n",
" var width = Math.abs(x1 - x0);\n",
" var height = Math.abs(y1 - y0);\n",
"\n",
" fig.rubberband_context.clearRect(\n",
" 0, 0, fig.canvas.width, fig.canvas.height);\n",
"\n",
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
" // Updates the figure title.\n",
" fig.header.textContent = msg['label'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
" var cursor = msg['cursor'];\n",
" switch(cursor)\n",
" {\n",
" case 0:\n",
" cursor = 'pointer';\n",
" break;\n",
" case 1:\n",
" cursor = 'default';\n",
" break;\n",
" case 2:\n",
" cursor = 'crosshair';\n",
" break;\n",
" case 3:\n",
" cursor = 'move';\n",
" break;\n",
" }\n",
" fig.rubberband_canvas.style.cursor = cursor;\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_message = function(fig, msg) {\n",
" fig.message.textContent = msg['message'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
" // Request the server to send over a new figure.\n",
" fig.send_draw_message();\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
" fig.image_mode = msg['mode'];\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Called whenever the canvas gets updated.\n",
" this.send_message(\"ack\", {});\n",
"}\n",
"\n",
"// A function to construct a web socket function for onmessage handling.\n",
"// Called in the figure constructor.\n",
"mpl.figure.prototype._make_on_message_function = function(fig) {\n",
" return function socket_on_message(evt) {\n",
" if (evt.data instanceof Blob) {\n",
" /* FIXME: We get \"Resource interpreted as Image but\n",
" * transferred with MIME type text/plain:\" errors on\n",
" * Chrome. But how to set the MIME type? It doesn't seem\n",
" * to be part of the websocket stream */\n",
" evt.data.type = \"image/png\";\n",
"\n",
" /* Free the memory for the previous frames */\n",
" if (fig.imageObj.src) {\n",
" (window.URL || window.webkitURL).revokeObjectURL(\n",
" fig.imageObj.src);\n",
" }\n",
"\n",
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
" evt.data);\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
" fig.imageObj.src = evt.data;\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
"\n",
" var msg = JSON.parse(evt.data);\n",
" var msg_type = msg['type'];\n",
"\n",
" // Call the \"handle_{type}\" callback, which takes\n",
" // the figure and JSON message as its only arguments.\n",
" try {\n",
" var callback = fig[\"handle_\" + msg_type];\n",
" } catch (e) {\n",
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
" return;\n",
" }\n",
"\n",
" if (callback) {\n",
" try {\n",
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
" callback(fig, msg);\n",
" } catch (e) {\n",
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
" }\n",
" }\n",
" };\n",
"}\n",
"\n",
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
"mpl.findpos = function(e) {\n",
" //this section is from http://www.quirksmode.org/js/events_properties.html\n",
" var targ;\n",
" if (!e)\n",
" e = window.event;\n",
" if (e.target)\n",
" targ = e.target;\n",
" else if (e.srcElement)\n",
" targ = e.srcElement;\n",
" if (targ.nodeType == 3) // defeat Safari bug\n",
" targ = targ.parentNode;\n",
"\n",
" // jQuery normalizes the pageX and pageY\n",
" // pageX,Y are the mouse positions relative to the document\n",
" // offset() returns the position of the element relative to the document\n",
" var x = e.pageX - $(targ).offset().left;\n",
" var y = e.pageY - $(targ).offset().top;\n",
"\n",
" return {\"x\": x, \"y\": y};\n",
"};\n",
"\n",
"/*\n",
" * return a copy of an object with only non-object keys\n",
" * we need this to avoid circular references\n",
" * http://stackoverflow.com/a/24161582/3208463\n",
" */\n",
"function simpleKeys (original) {\n",
" return Object.keys(original).reduce(function (obj, key) {\n",
" if (typeof original[key] !== 'object')\n",
" obj[key] = original[key]\n",
" return obj;\n",
" }, {});\n",
"}\n",
"\n",
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
" var canvas_pos = mpl.findpos(event)\n",
"\n",
" if (name === 'button_press')\n",
" {\n",
" this.canvas.focus();\n",
" this.canvas_div.focus();\n",
" }\n",
"\n",
" var x = canvas_pos.x * mpl.ratio;\n",
" var y = canvas_pos.y * mpl.ratio;\n",
"\n",
" this.send_message(name, {x: x, y: y, button: event.button,\n",
" step: event.step,\n",
" guiEvent: simpleKeys(event)});\n",
"\n",
" /* This prevents the web browser from automatically changing to\n",
" * the text insertion cursor when the button is pressed. We want\n",
" * to control all of the cursor setting manually through the\n",
" * 'cursor' event from matplotlib */\n",
" event.preventDefault();\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" // Handle any extra behaviour associated with a key event\n",
"}\n",
"\n",
"mpl.figure.prototype.key_event = function(event, name) {\n",
"\n",
" // Prevent repeat events\n",
" if (name == 'key_press')\n",
" {\n",
" if (event.which === this._key)\n",
" return;\n",
" else\n",
" this._key = event.which;\n",
" }\n",
" if (name == 'key_release')\n",
" this._key = null;\n",
"\n",
" var value = '';\n",
" if (event.ctrlKey && event.which != 17)\n",
" value += \"ctrl+\";\n",
" if (event.altKey && event.which != 18)\n",
" value += \"alt+\";\n",
" if (event.shiftKey && event.which != 16)\n",
" value += \"shift+\";\n",
"\n",
" value += 'k';\n",
" value += event.which.toString();\n",
"\n",
" this._key_event_extra(event, name);\n",
"\n",
" this.send_message(name, {key: value,\n",
" guiEvent: simpleKeys(event)});\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
" if (name == 'download') {\n",
" this.handle_save(this, null);\n",
" } else {\n",
" this.send_message(\"toolbar_button\", {name: name});\n",
" }\n",
"};\n",
"\n",
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
" this.message.textContent = tooltip;\n",
"};\n",
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
"\n",
"mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
"\n",
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
" // object with the appropriate methods. Currently this is a non binary\n",
" // socket, so there is still some room for performance tuning.\n",
" var ws = {};\n",
"\n",
" ws.close = function() {\n",
" comm.close()\n",
" };\n",
" ws.send = function(m) {\n",
" //console.log('sending', m);\n",
" comm.send(m);\n",
" };\n",
" // Register the callback with on_msg.\n",
" comm.on_msg(function(msg) {\n",
" //console.log('receiving', msg['content']['data'], msg);\n",
" // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
" ws.onmessage(msg['content']['data'])\n",
" });\n",
" return ws;\n",
"}\n",
"\n",
"mpl.mpl_figure_comm = function(comm, msg) {\n",
" // This is the function which gets called when the mpl process\n",
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
"\n",
" var id = msg.content.data.id;\n",
" // Get hold of the div created by the display call when the Comm\n",
" // socket was opened in Python.\n",
" var element = $(\"#\" + id);\n",
" var ws_proxy = comm_websocket_adapter(comm)\n",
"\n",
" function ondownload(figure, format) {\n",
" window.open(figure.imageObj.src);\n",
" }\n",
"\n",
" var fig = new mpl.figure(id, ws_proxy,\n",
" ondownload,\n",
" element.get(0));\n",
"\n",
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
" // web socket which is closed, not our websocket->open comm proxy.\n",
" ws_proxy.onopen();\n",
"\n",
" fig.parent_element = element.get(0);\n",
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
" if (!fig.cell_info) {\n",
" console.error(\"Failed to find cell for figure\", id, fig);\n",
" return;\n",
" }\n",
"\n",
" var output_index = fig.cell_info[2]\n",
" var cell = fig.cell_info[0];\n",
"\n",
"};\n",
"\n",
"mpl.figure.prototype.handle_close = function(fig, msg) {\n",
" var width = fig.canvas.width/mpl.ratio\n",
" fig.root.unbind('remove')\n",
"\n",
" // Update the output cell to use the data from the current canvas.\n",
" fig.push_to_output();\n",
" var dataURL = fig.canvas.toDataURL();\n",
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
" // the notebook keyboard shortcuts fail.\n",
" IPython.keyboard_manager.enable()\n",
" $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
" fig.close_ws(fig, msg);\n",
"}\n",
"\n",
"mpl.figure.prototype.close_ws = function(fig, msg){\n",
" fig.send_message('closing', msg);\n",
" // fig.ws.close()\n",
"}\n",
"\n",
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
" // Turn the data on the canvas into data in the output cell.\n",
" var width = this.canvas.width/mpl.ratio\n",
" var dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Tell IPython that the notebook contents must change.\n",
" IPython.notebook.set_dirty(true);\n",
" this.send_message(\"ack\", {});\n",
" var fig = this;\n",
" // Wait a second, then push the new image to the DOM so\n",
" // that it is saved nicely (might be nice to debounce this).\n",
" setTimeout(function () { fig.push_to_output() }, 1000);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('<div/>')\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items){\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) { continue; };\n",
"\n",
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" // Add the status bar.\n",
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"\n",
" // Add the close button to the window.\n",
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\n",
"}\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(el){\n",
" var fig = this\n",
" el.on(\"remove\", function(){\n",
"\tfig.close_ws(fig, {});\n",
" });\n",
"}\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(el){\n",
" // this is important to make the div 'focusable\n",
" el.attr('tabindex', 0)\n",
" // reach out to IPython and tell the keyboard manager to turn it's self\n",
" // off when our div gets focus\n",
"\n",
" // location in version 3\n",
" if (IPython.notebook.keyboard_manager) {\n",
" IPython.notebook.keyboard_manager.register_events(el);\n",
" }\n",
" else {\n",
" // location in version 2\n",
" IPython.keyboard_manager.register_events(el);\n",
" }\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" var manager = IPython.notebook.keyboard_manager;\n",
" if (!manager)\n",
" manager = IPython.keyboard_manager;\n",
"\n",
" // Check for shift+enter\n",
" if (event.shiftKey && event.which == 13) {\n",
" this.canvas_div.blur();\n",
" // select the cell after this one\n",
" var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
" IPython.notebook.select(index + 1);\n",
" }\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" fig.ondownload(fig, null);\n",
"}\n",
"\n",
"\n",
"mpl.find_output_cell = function(html_output) {\n",
" // Return the cell and output element which can be found *uniquely* in the notebook.\n",
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
" // IPython event is triggered only after the cells have been serialised, which for\n",
" // our purposes (turning an active figure into a static one), is too late.\n",
" var cells = IPython.notebook.get_cells();\n",
" var ncells = cells.length;\n",
" for (var i=0; i<ncells; i++) {\n",
" var cell = cells[i];\n",
" if (cell.cell_type === 'code'){\n",
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
" var data = cell.output_area.outputs[j];\n",
" if (data.data) {\n",
" // IPython >= 3 moved mimebundle to data attribute of output\n",
" data = data.data;\n",
" }\n",
" if (data['text/html'] == html_output) {\n",
" return [cell, data, j];\n",
" }\n",
" }\n",
" }\n",
" }\n",
"}\n",
"\n",
"// Register the function which deals with the matplotlib target/channel.\n",
"// The kernel may be null if the page has been refreshed.\n",
"if (IPython.notebook.kernel != null) {\n",
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
"}\n"
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<img src=\"data:image/png;base64,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\" width=\"431.818172458775\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# イジングモデルのアニメーション\n",
"%matplotlib nbagg\n",
"from matplotlib import animation\n",
"L = 20\n",
"theta = 0.50\n",
"init = [1 - 2*np.random.randint(0, 2) for i in range(L*L)]\n",
"samples = np.array(mcmc_metro(calc_r_ising, init, 10000, 2000, theta))\n",
"\n",
"# animation \n",
"fig = plt.figure()\n",
"plt.axes().set_aspect('equal')\n",
"ims = []\n",
"for sample in samples[::20]:\n",
" sample = np.reshape(sample, [L, L])\n",
" ims.append((plt.pcolor(np.arange(L), np.arange(L), sample, cmap=plt.cm.Blues),))\n",
"\n",
"ani = animation.ArtistAnimation(fig, ims, interval=5, blit=True)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"### 2変量正規分布 (2.4 p.19)\n",
"$$\n",
"p(x_1, x_2) = \\frac{1}{Z} \\exp \\left(- \\frac{x_1^2 - 2b x_1 x_2 + x_2^2}{2} \\right)\n",
"$$\n",
"b : x1とx2の相関の強さ"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def mcmc_metro_continuous(calc_r, init, max_iter, burn_in, theta=0.2):\n",
" \"\"\" \n",
" メトロポリス法によるMCMC(連続変数ver)\n",
" calc_r : 候補の確率と現在の状態の確率の比を計算する関数\n",
" init : 初期状態\n",
" max_iter : 繰り返し回数\n",
" burn_in : 捨てる初期サンプル数\n",
" theta : 相互作用の強さ\n",
" \"\"\"\n",
" samples = []\n",
" x = init\n",
" for i in range(max_iter):\n",
" # 次の候補の生成\n",
" delta = np.random.normal(0, 1, (len(x)))\n",
" \n",
" # 候補の確率と現在の状態の確率の比の計算\n",
" r = calc_r(theta, x, delta)\n",
" if np.random.rand() < r:\n",
" # aceptなら状態を変更する\n",
" x += delta\n",
" \n",
" # サンプル列に追加\n",
" samples.append(copy.deepcopy(x))\n",
" return samples[burn_in:]"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def calc_unormalized_p(x):\n",
" \"\"\" 2変量正規分布の正規化されていない値 \"\"\"\n",
" return np.exp(-(x[0]**2 - 2*b*x[0]*x[1] + x[1]**2)/2)\n",
"\n",
"def calc_r_mul_normal(b, x, delta):\n",
" \"\"\" 2変量正規分布の次状態と現在の状態の確率の比を返す \"\"\"\n",
" nx = x + delta\n",
" r = calc_unormalized_p(nx) / calc_unormalized_p(x)\n",
" return r"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"b = 0.0\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f282f87ecf8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"b = 0.25\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f28332cfe10>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"b = 0.5\n"
]
},
{
"data": {
"image/png": "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\nCeX/AXcbwgcbSNEQAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f2831d54c50>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"b = 0.75\n"
]
},
{
"data": {
"image/png": "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\nEwsRY4wn/x+33mmR9LRIQAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f2832b649b0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"b = 1.0\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f2831ba0c88>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"# サンプリングの散布図の描画\n",
"init = [5, 5]\n",
"bs = [0.0, 0.25, 0.5, 0.75, 1.0]\n",
"for b in bs:\n",
" print(\"b = {}\".format(b))\n",
" samples = np.array(mcmc_metro_continuous(calc_r_mul_normal, init, 10000, 2000, b))\n",
" plt.axes().set_aspect('equal')\n",
" plt.scatter(samples[:, 0], samples[:, 1])\n",
" plt.xlim([-10, 10])\n",
" plt.ylim([-10, 10])\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def calc_r_mul_normal_constrain(b, x, delta):\n",
" nx = x + delta\n",
" # 制約条件に満たない場合はreject\n",
" if nx[1] < 0.5*nx[0]**2 + 3:\n",
" return 0\n",
" \n",
" r = calc_unormalized_p(nx) / calc_unormalized_p(x)\n",
" return r"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"b = 0.0\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f282fa5b9b0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"b = 0.25\n"
]
},
{
"data": {
"image/png": "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\nSUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f282f9fa7f0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"b = 0.5\n"
]
},
{
"data": {
"image/png": "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\nAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f282f951828>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"b = 0.75\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f282fa76400>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"b = 1.0\n"
]
},
{
"data": {
"image/png": "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\nRK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f283324f278>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 制約付きの場合のサンプリングの散布図の描画\n",
"init = [2, 8]\n",
"bs = [0.0, 0.25, 0.5, 0.75, 1.0]\n",
"for b in bs:\n",
" print(\"b = {}\".format(b))\n",
" samples = np.array(mcmc_metro_continuous(calc_r_mul_normal_constrain, init, 10000, 2000, b))\n",
" # サンプルのplot\n",
" plt.axes().set_aspect('equal')\n",
" plt.scatter(samples[:, 0], samples[:, 1])\n",
" plt.xlim([-10, 10])\n",
" plt.ylim([-10, 10])\n",
" # 制約条件のplot\n",
" xs = np.linspace(-10, 10, 100)\n",
" ys = [0.5*(x**2) + 3 for x in xs]\n",
" plt.plot(xs, ys, c=\"r\")\n",
" \n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ギブス・サンプラー\n",
"### 2変量正規分布 (2.5 p.23)\n",
"$$\n",
"p(x_1, x_2) = \\frac{1}{Z} \\exp \\left(- \\frac{x_1^2 - 2b x_1 x_2 + x_2^2}{2} \\right)\n",
"$$\n",
"b : x1とx2の相関の強さ\n",
"\n",
"条件付き確率:\n",
"$$\n",
"p(x_1 | x_2) = \\frac{1}{\\sqrt{2\\pi}} \\exp \\left( - \\frac{(x_1 - bx_2)^2}{2} \\right)\n",
"$$\n",
"$$\n",
"p(x_2 | x_1) = \\frac{1}{\\sqrt{2\\pi}} \\exp \\left( - \\frac{(x_2 - bx_1)^2}{2} \\right)\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def mcmc_gibbs_normal(init, max_iter, burn_in, b=0.8):\n",
" \"\"\" \n",
" ギブスサンプリングによるMCMC(2変量正規分布)\n",
" init : 初期状態\n",
" max_iter : 繰り返し回数\n",
" burn_in : 捨てる初期サンプル数\n",
" b : 相関の強さ\n",
" \"\"\"\n",
" samples = []\n",
" x = init\n",
" for i in range(max_iter):\n",
" # 交互に条件付き確率からのサンプリング\n",
" if i % 2 == 0:\n",
" x[0] = np.random.normal(b*x[1], 1)\n",
" else:\n",
" x[1] = np.random.normal(b*x[0], 1)\n",
" \n",
" # サンプル列に追加\n",
" samples.append(copy.deepcopy(x))\n",
" return samples[burn_in:]"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"b = 0.0\n"
]
},
{
"data": {
"image/png": "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\nZ0SkzilERCSIQkREgihERCSIQkREgihERCSIQkREgihERCSIQkREgihERCSIQkREgihERCSIQkRE\ngihERCSIQkREgihERCSIQkREgihERCSIQkREggQv1Gxmfwo8AJxw9w8Ubd8APA4sBX4IfM7d4wnv\nvR54ArgBOEyuXu/l0DaJSOWUoyfyLXKlMif6MvAld38fsAz4cMIxvwM87u43AceBz5ShPSJSQcEh\n4u4/Bs4WbzOzCOhy9z35TY8BH0l4+y7gm9McIyI1LK26M8sYHywngdUJxy129wvTHAPkyvstX764\nfC2sMfX62fS56t+0ITKTmrsiMn9NGyLuvnkO5z1LrjdScAPQn3DcRTMr9EZKHSMiNSyVId78KMxL\nZrYjv+mTwNMJh+4G/t00x4hIDQsOETN7FPg/wC1mdtLMPprf9UXg98zsODBMLjAws4eKjvnvwL81\ns2PATcDXQtsjIpWVmVq8IlKb0hqdKauQCW1ZYma9wHkgBvrdPWn+TSaY2S7gj8j1dr/s7nXRyzSz\nd4Aj+ZcH3T2zc5vM7EngHuBZd/9Efts24OvANcBj7v7QdOfJyrT3kAltWdPl7p0ZD5ArgIeBu4Fb\ngN8ys2VTvik7zuZ/Pp1ZDpC8R8jdi5y47QHAgJ1mtmW6k2QiRAIntEnlbQMOu/tpd79I7n7Yh6rc\nJpnA3Z8HCvO0MLNVQOTuR9x9hNxE0F3TnScTIVLCTCe0ZUkM/MjMDpjZfdVuTIBVwKmi1/Xwsylo\nMrOXzWy/md1d7caU2Zx+bjVxT2S+TGibwee83d37zWw18JyZ/dTdj1WwiTK9dfmf0c3AbjPrdPfz\n1W5UNdVEiKQ8oa1mTPc53b0//99TZvYDoBPIYoj0M/4v2A3Ay1VqS1kV/Yxezf9RuAk4WN1WlU3S\nz23af1OZvZyZxYS2TDCzRWa2OP/1EuAuoKe6rZqzA0CHmbWa2bXkrqufrXKbgplZk5ldnf96FbAZ\neK26rSqfQkCa2SYzawQeZAb/pjIxTyQ/oe2jQDPwBvB5d/8bM7uJ3MjNUuA54N+7+2j1Wjp3ZrYe\neCr/sgF4xN0frWKTguQnFD5M7rP8gbt/tcpNCmZmHwS+CowAo8Dvuvt3q9uquTOz3eRugi8ChsgN\nTFwN/Dm5Id5vuPt/m+48mQgREaldmb2cEZHaoBARkSAKEREJohARkSAKEREJohARkSAKEREJohAR\nkSD/H+oq5Y6O6DqEAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f282fae4d30>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"b = 0.25\n"
]
},
{
"data": {
"image/png": "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\nTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f282d741748>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"b = 0.5\n"
]
},
{
"data": {
"image/png": "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\nAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f2832f93eb8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"b = 0.75\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f2832a33588>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"b = 1.0\n"
]
},
{
"data": {
"image/png": "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\nypf/D0I2mttUHdXZAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f28326f2b70>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# サンプリングの散布図の描画\n",
"init = [5, 9]\n",
"bs = [0.0, 0.25, 0.5, 0.75, 1.0]\n",
"for b in bs:\n",
" print(\"b = {}\".format(b))\n",
" samples = np.array(mcmc_gibbs_normal(init, 1000, 0, b))\n",
" plt.axes().set_aspect('equal')\n",
" plt.scatter(samples[:, 0], samples[:, 1])\n",
" plt.xlim([-10, 10])\n",
" plt.ylim([-10, 10])\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### イジングモデル(2.5 p.27)\n",
"$$\n",
"P(\\bf{x}) = \\frac{exp \\left(\\theta \\sum_{(i,j) \\in G} x_i x_j \\right)}{Z}\n",
"$$\n",
"グラフG : $L \\times L$格子\n",
"\n",
"条件付き確率\n",
"$$\n",
"P(x_i=1 | \\{ x_{j(\\neq i)} \\}) = \\frac{1 + \\tanh \\left( \\theta \\sum_{j \\in N(i)} x_j \\right)}{2}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [],
"source": [
"def mcmc_gibbs_ising(init, max_iter, burn_in, theta=0.2):\n",
" \"\"\" \n",
" ギブスサンプリングによるMCMC(イジングモデル)\n",
" init : 初期状態\n",
" max_iter : 繰り返し回数\n",
" burn_in : 捨てる初期サンプル数\n",
" theta : 相関の強さ\n",
" \"\"\"\n",
" samples = []\n",
" x = init\n",
" L = int(np.sqrt(len(x)))\n",
" assert int(L*L) == len(x)\n",
" \n",
" for i in range(max_iter):\n",
" idx = np.random.randint(len(x))\n",
" adjs = [idx+1, idx-1, idx+L, idx-L]\n",
" sum_adj = 0\n",
" for a in adjs:\n",
" if a >= 0 and a < len(x):\n",
" sum_adj += x[a]\n",
" \n",
" p_1 = (1 + np.tanh(theta * sum_adj)) / 2\n",
" if np.random.rand() < p_1:\n",
" x[idx] = 1\n",
" else:\n",
" x[idx] = -1\n",
" \n",
" # サンプル列に追加\n",
" samples.append(copy.deepcopy(x))\n",
" return samples[burn_in:]"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\n",
"\n",
"\n",
"mpl.get_websocket_type = function() {\n",
" if (typeof(WebSocket) !== 'undefined') {\n",
" return WebSocket;\n",
" } else if (typeof(MozWebSocket) !== 'undefined') {\n",
" return MozWebSocket;\n",
" } else {\n",
" alert('Your browser does not have WebSocket support.' +\n",
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
" 'Firefox 4 and 5 are also supported but you ' +\n",
" 'have to enable WebSockets in about:config.');\n",
" };\n",
"}\n",
"\n",
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
" this.id = figure_id;\n",
"\n",
" this.ws = websocket;\n",
"\n",
" this.supports_binary = (this.ws.binaryType != undefined);\n",
"\n",
" if (!this.supports_binary) {\n",
" var warnings = document.getElementById(\"mpl-warnings\");\n",
" if (warnings) {\n",
" warnings.style.display = 'block';\n",
" warnings.textContent = (\n",
" \"This browser does not support binary websocket messages. \" +\n",
" \"Performance may be slow.\");\n",
" }\n",
" }\n",
"\n",
" this.imageObj = new Image();\n",
"\n",
" this.context = undefined;\n",
" this.message = undefined;\n",
" this.canvas = undefined;\n",
" this.rubberband_canvas = undefined;\n",
" this.rubberband_context = undefined;\n",
" this.format_dropdown = undefined;\n",
"\n",
" this.image_mode = 'full';\n",
"\n",
" this.root = $('<div/>');\n",
" this._root_extra_style(this.root)\n",
" this.root.attr('style', 'display: inline-block');\n",
"\n",
" $(parent_element).append(this.root);\n",
"\n",
" this._init_header(this);\n",
" this._init_canvas(this);\n",
" this._init_toolbar(this);\n",
"\n",
" var fig = this;\n",
"\n",
" this.waiting = false;\n",
"\n",
" this.ws.onopen = function () {\n",
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
" fig.send_message(\"send_image_mode\", {});\n",
" if (mpl.ratio != 1) {\n",
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
" }\n",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" this.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var backingStore = this.context.backingStorePixelRatio ||\n",
"\tthis.context.webkitBackingStorePixelRatio ||\n",
"\tthis.context.mozBackingStorePixelRatio ||\n",
"\tthis.context.msBackingStorePixelRatio ||\n",
"\tthis.context.oBackingStorePixelRatio ||\n",
"\tthis.context.backingStorePixelRatio || 1;\n",
"\n",
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
"\n",
" var rubberband = $('<canvas/>');\n",
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
"\n",
" var pass_mouse_events = true;\n",
"\n",
" canvas_div.resizable({\n",
" start: function(event, ui) {\n",
" pass_mouse_events = false;\n",
" },\n",
" resize: function(event, ui) {\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" stop: function(event, ui) {\n",
" pass_mouse_events = true;\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" });\n",
"\n",
" function mouse_event_fn(event) {\n",
" if (pass_mouse_events)\n",
" return fig.mouse_event(event, event['data']);\n",
" }\n",
"\n",
" rubberband.mousedown('button_press', mouse_event_fn);\n",
" rubberband.mouseup('button_release', mouse_event_fn);\n",
" // Throttle sequential mouse events to 1 every 20ms.\n",
" rubberband.mousemove('motion_notify', mouse_event_fn);\n",
"\n",
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
"\n",
" canvas_div.on(\"wheel\", function (event) {\n",
" event = event.originalEvent;\n",
" event['data'] = 'scroll'\n",
" if (event.deltaY < 0) {\n",
" event.step = 1;\n",
" } else {\n",
" event.step = -1;\n",
" }\n",
" mouse_event_fn(event);\n",
" });\n",
"\n",
" canvas_div.append(canvas);\n",
" canvas_div.append(rubberband);\n",
"\n",
" this.rubberband = rubberband;\n",
" this.rubberband_canvas = rubberband[0];\n",
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
" this.rubberband_context.strokeStyle = \"#000000\";\n",
"\n",
" this._resize_canvas = function(width, height) {\n",
" // Keep the size of the canvas, canvas container, and rubber band\n",
" // canvas in synch.\n",
" canvas_div.css('width', width)\n",
" canvas_div.css('height', height)\n",
"\n",
" canvas.attr('width', width * mpl.ratio);\n",
" canvas.attr('height', height * mpl.ratio);\n",
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
"\n",
" rubberband.attr('width', width);\n",
" rubberband.attr('height', height);\n",
" }\n",
"\n",
" // Set the figure to an initial 600x600px, this will subsequently be updated\n",
" // upon first draw.\n",
" this._resize_canvas(600, 600);\n",
"\n",
" // Disable right mouse context menu.\n",
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
" return false;\n",
" });\n",
"\n",
" function set_focus () {\n",
" canvas.focus();\n",
" canvas_div.focus();\n",
" }\n",
"\n",
" window.setTimeout(set_focus, 100);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('<div/>')\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items) {\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) {\n",
" // put a spacer in here.\n",
" continue;\n",
" }\n",
" var button = $('<button/>');\n",
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
" 'ui-button-icon-only');\n",
" button.attr('role', 'button');\n",
" button.attr('aria-disabled', 'false');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
"\n",
" var icon_img = $('<span/>');\n",
" icon_img.addClass('ui-button-icon-primary ui-icon');\n",
" icon_img.addClass(image);\n",
" icon_img.addClass('ui-corner-all');\n",
"\n",
" var tooltip_span = $('<span/>');\n",
" tooltip_span.addClass('ui-button-text');\n",
" tooltip_span.html(tooltip);\n",
"\n",
" button.append(icon_img);\n",
" button.append(tooltip_span);\n",
"\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" var fmt_picker_span = $('<span/>');\n",
"\n",
" var fmt_picker = $('<select/>');\n",
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
" fmt_picker_span.append(fmt_picker);\n",
" nav_element.append(fmt_picker_span);\n",
" this.format_dropdown = fmt_picker[0];\n",
"\n",
" for (var ind in mpl.extensions) {\n",
" var fmt = mpl.extensions[ind];\n",
" var option = $(\n",
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
" fmt_picker.append(option)\n",
" }\n",
"\n",
" // Add hover states to the ui-buttons\n",
" $( \".ui-button\" ).hover(\n",
" function() { $(this).addClass(\"ui-state-hover\");},\n",
" function() { $(this).removeClass(\"ui-state-hover\");}\n",
" );\n",
"\n",
" var status_bar = $('<span class=\"mpl-message\"/>');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"}\n",
"\n",
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
" // which will in turn request a refresh of the image.\n",
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
"}\n",
"\n",
"mpl.figure.prototype.send_message = function(type, properties) {\n",
" properties['type'] = type;\n",
" properties['figure_id'] = this.id;\n",
" this.ws.send(JSON.stringify(properties));\n",
"}\n",
"\n",
"mpl.figure.prototype.send_draw_message = function() {\n",
" if (!this.waiting) {\n",
" this.waiting = true;\n",
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
" }\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" var format_dropdown = fig.format_dropdown;\n",
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
" fig.ondownload(fig, format);\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
" var size = msg['size'];\n",
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
" fig._resize_canvas(size[0], size[1]);\n",
" fig.send_message(\"refresh\", {});\n",
" };\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
" var x0 = msg['x0'] / mpl.ratio;\n",
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
" var x1 = msg['x1'] / mpl.ratio;\n",
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
" x0 = Math.floor(x0) + 0.5;\n",
" y0 = Math.floor(y0) + 0.5;\n",
" x1 = Math.floor(x1) + 0.5;\n",
" y1 = Math.floor(y1) + 0.5;\n",
" var min_x = Math.min(x0, x1);\n",
" var min_y = Math.min(y0, y1);\n",
" var width = Math.abs(x1 - x0);\n",
" var height = Math.abs(y1 - y0);\n",
"\n",
" fig.rubberband_context.clearRect(\n",
" 0, 0, fig.canvas.width, fig.canvas.height);\n",
"\n",
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
" // Updates the figure title.\n",
" fig.header.textContent = msg['label'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
" var cursor = msg['cursor'];\n",
" switch(cursor)\n",
" {\n",
" case 0:\n",
" cursor = 'pointer';\n",
" break;\n",
" case 1:\n",
" cursor = 'default';\n",
" break;\n",
" case 2:\n",
" cursor = 'crosshair';\n",
" break;\n",
" case 3:\n",
" cursor = 'move';\n",
" break;\n",
" }\n",
" fig.rubberband_canvas.style.cursor = cursor;\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_message = function(fig, msg) {\n",
" fig.message.textContent = msg['message'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
" // Request the server to send over a new figure.\n",
" fig.send_draw_message();\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
" fig.image_mode = msg['mode'];\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Called whenever the canvas gets updated.\n",
" this.send_message(\"ack\", {});\n",
"}\n",
"\n",
"// A function to construct a web socket function for onmessage handling.\n",
"// Called in the figure constructor.\n",
"mpl.figure.prototype._make_on_message_function = function(fig) {\n",
" return function socket_on_message(evt) {\n",
" if (evt.data instanceof Blob) {\n",
" /* FIXME: We get \"Resource interpreted as Image but\n",
" * transferred with MIME type text/plain:\" errors on\n",
" * Chrome. But how to set the MIME type? It doesn't seem\n",
" * to be part of the websocket stream */\n",
" evt.data.type = \"image/png\";\n",
"\n",
" /* Free the memory for the previous frames */\n",
" if (fig.imageObj.src) {\n",
" (window.URL || window.webkitURL).revokeObjectURL(\n",
" fig.imageObj.src);\n",
" }\n",
"\n",
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
" evt.data);\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
" fig.imageObj.src = evt.data;\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
"\n",
" var msg = JSON.parse(evt.data);\n",
" var msg_type = msg['type'];\n",
"\n",
" // Call the \"handle_{type}\" callback, which takes\n",
" // the figure and JSON message as its only arguments.\n",
" try {\n",
" var callback = fig[\"handle_\" + msg_type];\n",
" } catch (e) {\n",
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
" return;\n",
" }\n",
"\n",
" if (callback) {\n",
" try {\n",
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
" callback(fig, msg);\n",
" } catch (e) {\n",
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
" }\n",
" }\n",
" };\n",
"}\n",
"\n",
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
"mpl.findpos = function(e) {\n",
" //this section is from http://www.quirksmode.org/js/events_properties.html\n",
" var targ;\n",
" if (!e)\n",
" e = window.event;\n",
" if (e.target)\n",
" targ = e.target;\n",
" else if (e.srcElement)\n",
" targ = e.srcElement;\n",
" if (targ.nodeType == 3) // defeat Safari bug\n",
" targ = targ.parentNode;\n",
"\n",
" // jQuery normalizes the pageX and pageY\n",
" // pageX,Y are the mouse positions relative to the document\n",
" // offset() returns the position of the element relative to the document\n",
" var x = e.pageX - $(targ).offset().left;\n",
" var y = e.pageY - $(targ).offset().top;\n",
"\n",
" return {\"x\": x, \"y\": y};\n",
"};\n",
"\n",
"/*\n",
" * return a copy of an object with only non-object keys\n",
" * we need this to avoid circular references\n",
" * http://stackoverflow.com/a/24161582/3208463\n",
" */\n",
"function simpleKeys (original) {\n",
" return Object.keys(original).reduce(function (obj, key) {\n",
" if (typeof original[key] !== 'object')\n",
" obj[key] = original[key]\n",
" return obj;\n",
" }, {});\n",
"}\n",
"\n",
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
" var canvas_pos = mpl.findpos(event)\n",
"\n",
" if (name === 'button_press')\n",
" {\n",
" this.canvas.focus();\n",
" this.canvas_div.focus();\n",
" }\n",
"\n",
" var x = canvas_pos.x * mpl.ratio;\n",
" var y = canvas_pos.y * mpl.ratio;\n",
"\n",
" this.send_message(name, {x: x, y: y, button: event.button,\n",
" step: event.step,\n",
" guiEvent: simpleKeys(event)});\n",
"\n",
" /* This prevents the web browser from automatically changing to\n",
" * the text insertion cursor when the button is pressed. We want\n",
" * to control all of the cursor setting manually through the\n",
" * 'cursor' event from matplotlib */\n",
" event.preventDefault();\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" // Handle any extra behaviour associated with a key event\n",
"}\n",
"\n",
"mpl.figure.prototype.key_event = function(event, name) {\n",
"\n",
" // Prevent repeat events\n",
" if (name == 'key_press')\n",
" {\n",
" if (event.which === this._key)\n",
" return;\n",
" else\n",
" this._key = event.which;\n",
" }\n",
" if (name == 'key_release')\n",
" this._key = null;\n",
"\n",
" var value = '';\n",
" if (event.ctrlKey && event.which != 17)\n",
" value += \"ctrl+\";\n",
" if (event.altKey && event.which != 18)\n",
" value += \"alt+\";\n",
" if (event.shiftKey && event.which != 16)\n",
" value += \"shift+\";\n",
"\n",
" value += 'k';\n",
" value += event.which.toString();\n",
"\n",
" this._key_event_extra(event, name);\n",
"\n",
" this.send_message(name, {key: value,\n",
" guiEvent: simpleKeys(event)});\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
" if (name == 'download') {\n",
" this.handle_save(this, null);\n",
" } else {\n",
" this.send_message(\"toolbar_button\", {name: name});\n",
" }\n",
"};\n",
"\n",
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
" this.message.textContent = tooltip;\n",
"};\n",
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
"\n",
"mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
"\n",
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
" // object with the appropriate methods. Currently this is a non binary\n",
" // socket, so there is still some room for performance tuning.\n",
" var ws = {};\n",
"\n",
" ws.close = function() {\n",
" comm.close()\n",
" };\n",
" ws.send = function(m) {\n",
" //console.log('sending', m);\n",
" comm.send(m);\n",
" };\n",
" // Register the callback with on_msg.\n",
" comm.on_msg(function(msg) {\n",
" //console.log('receiving', msg['content']['data'], msg);\n",
" // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
" ws.onmessage(msg['content']['data'])\n",
" });\n",
" return ws;\n",
"}\n",
"\n",
"mpl.mpl_figure_comm = function(comm, msg) {\n",
" // This is the function which gets called when the mpl process\n",
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
"\n",
" var id = msg.content.data.id;\n",
" // Get hold of the div created by the display call when the Comm\n",
" // socket was opened in Python.\n",
" var element = $(\"#\" + id);\n",
" var ws_proxy = comm_websocket_adapter(comm)\n",
"\n",
" function ondownload(figure, format) {\n",
" window.open(figure.imageObj.src);\n",
" }\n",
"\n",
" var fig = new mpl.figure(id, ws_proxy,\n",
" ondownload,\n",
" element.get(0));\n",
"\n",
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
" // web socket which is closed, not our websocket->open comm proxy.\n",
" ws_proxy.onopen();\n",
"\n",
" fig.parent_element = element.get(0);\n",
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
" if (!fig.cell_info) {\n",
" console.error(\"Failed to find cell for figure\", id, fig);\n",
" return;\n",
" }\n",
"\n",
" var output_index = fig.cell_info[2]\n",
" var cell = fig.cell_info[0];\n",
"\n",
"};\n",
"\n",
"mpl.figure.prototype.handle_close = function(fig, msg) {\n",
" var width = fig.canvas.width/mpl.ratio\n",
" fig.root.unbind('remove')\n",
"\n",
" // Update the output cell to use the data from the current canvas.\n",
" fig.push_to_output();\n",
" var dataURL = fig.canvas.toDataURL();\n",
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
" // the notebook keyboard shortcuts fail.\n",
" IPython.keyboard_manager.enable()\n",
" $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
" fig.close_ws(fig, msg);\n",
"}\n",
"\n",
"mpl.figure.prototype.close_ws = function(fig, msg){\n",
" fig.send_message('closing', msg);\n",
" // fig.ws.close()\n",
"}\n",
"\n",
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
" // Turn the data on the canvas into data in the output cell.\n",
" var width = this.canvas.width/mpl.ratio\n",
" var dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Tell IPython that the notebook contents must change.\n",
" IPython.notebook.set_dirty(true);\n",
" this.send_message(\"ack\", {});\n",
" var fig = this;\n",
" // Wait a second, then push the new image to the DOM so\n",
" // that it is saved nicely (might be nice to debounce this).\n",
" setTimeout(function () { fig.push_to_output() }, 1000);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('<div/>')\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items){\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) { continue; };\n",
"\n",
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" // Add the status bar.\n",
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"\n",
" // Add the close button to the window.\n",
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\n",
"}\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(el){\n",
" var fig = this\n",
" el.on(\"remove\", function(){\n",
"\tfig.close_ws(fig, {});\n",
" });\n",
"}\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(el){\n",
" // this is important to make the div 'focusable\n",
" el.attr('tabindex', 0)\n",
" // reach out to IPython and tell the keyboard manager to turn it's self\n",
" // off when our div gets focus\n",
"\n",
" // location in version 3\n",
" if (IPython.notebook.keyboard_manager) {\n",
" IPython.notebook.keyboard_manager.register_events(el);\n",
" }\n",
" else {\n",
" // location in version 2\n",
" IPython.keyboard_manager.register_events(el);\n",
" }\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" var manager = IPython.notebook.keyboard_manager;\n",
" if (!manager)\n",
" manager = IPython.keyboard_manager;\n",
"\n",
" // Check for shift+enter\n",
" if (event.shiftKey && event.which == 13) {\n",
" this.canvas_div.blur();\n",
" // select the cell after this one\n",
" var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
" IPython.notebook.select(index + 1);\n",
" }\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" fig.ondownload(fig, null);\n",
"}\n",
"\n",
"\n",
"mpl.find_output_cell = function(html_output) {\n",
" // Return the cell and output element which can be found *uniquely* in the notebook.\n",
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
" // IPython event is triggered only after the cells have been serialised, which for\n",
" // our purposes (turning an active figure into a static one), is too late.\n",
" var cells = IPython.notebook.get_cells();\n",
" var ncells = cells.length;\n",
" for (var i=0; i<ncells; i++) {\n",
" var cell = cells[i];\n",
" if (cell.cell_type === 'code'){\n",
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
" var data = cell.output_area.outputs[j];\n",
" if (data.data) {\n",
" // IPython >= 3 moved mimebundle to data attribute of output\n",
" data = data.data;\n",
" }\n",
" if (data['text/html'] == html_output) {\n",
" return [cell, data, j];\n",
" }\n",
" }\n",
" }\n",
" }\n",
"}\n",
"\n",
"// Register the function which deals with the matplotlib target/channel.\n",
"// The kernel may be null if the page has been refreshed.\n",
"if (IPython.notebook.kernel != null) {\n",
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
"}\n"
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<img src=\"data:image/png;base64,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\" width=\"431.818172458775\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# イジングモデルのアニメーション\n",
"%matplotlib nbagg\n",
"from matplotlib import animation\n",
"L = 20\n",
"theta = 0.90\n",
"init = [1 - 2*np.random.randint(0, 2) for i in range(L*L)]\n",
"samples = np.array(mcmc_gibbs_ising(init, 10000, 2000, theta))\n",
"\n",
"# animation \n",
"fig = plt.figure()\n",
"plt.axes().set_aspect('equal')\n",
"ims = []\n",
"for sample in samples[::20]:\n",
" sample = np.reshape(sample, [L, L])\n",
" ims.append((plt.pcolor(np.arange(L), np.arange(L), sample, cmap=plt.cm.Blues),))\n",
"\n",
"ani = animation.ArtistAnimation(fig, ims, interval=5, blit=True)\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
},
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"toc_cell": false,
"toc_position": {},
"toc_section_display": "block",
"toc_window_display": false
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment