Skip to content

Instantly share code, notes, and snippets.

@izmailovpavel
Last active September 17, 2017 23:04
Show Gist options
  • Save izmailovpavel/6e82f702472706266ce66299df700b13 to your computer and use it in GitHub Desktop.
Save izmailovpavel/6e82f702472706266ce66299df700b13 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 257,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from scipy.stats import multivariate_normal\n",
"from mpl_toolkits.mplot3d import Axes3D\n",
"\n",
"import torch\n",
"from torch.autograd import Variable\n",
"import torch.optim as optim\n",
"import torch.utils.data as data\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Linear Regression"
]
},
{
"cell_type": "code",
"execution_count": 238,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"noise_var = 0.1\n",
"num_data = 50\n",
"num_features = 2\n",
"prior_var = 1.\n",
"\n",
"X = np.random.randn(num_data, num_features)\n",
"w_true = np.random.randn(num_features, 1) * np.sqrt(noise_var)\n",
"noise = np.random.randn(num_data, 1) * np.sqrt(noise_var)\n",
"y = X.dot(w_true) + noise"
]
},
{
"cell_type": "code",
"execution_count": 239,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"w_grid_x = np.linspace(-1, 1, num=100)\n",
"w_grid_y = np.linspace(-1, 1, num=100)\n",
"w_grid_x, w_grid_y = np.meshgrid(w_grid_x, w_grid_y)"
]
},
{
"cell_type": "code",
"execution_count": 240,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"w_grid_x = w_grid_x.reshape(-1)[:, None]\n",
"w_grid_y = w_grid_y.reshape(-1)[:, None]\n",
"w_grid = np.hstack([w_grid_x, w_grid_y])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Prior: $p(w) = \\mathcal{N}(0, I)$. Likelihood: $p(y \\vert w) = \\mathcal{N}(0, 0.1 \\cdot I)$\n",
"\n",
"Posterior $p(w \\vert y) \\propto p(w) p(y \\vert w)$.\n",
"\n",
"### True posterior:"
]
},
{
"cell_type": "code",
"execution_count": 241,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# prior parameters\n",
"S0 = np.eye(num_features) * prior_var\n",
"m0 = np.zeros([num_features, 1])\n",
"\n",
"beta = 1 / noise_var\n",
"\n",
"# posterior parameters\n",
"S0_inv = np.linalg.inv(S0)\n",
"Sn_inv = S0_inv + beta * X.T.dot(X)\n",
"Sn = np.linalg.inv(Sn_inv)\n",
"\n",
"\n",
"mn = Sn.dot(S0_inv.dot(m0) + beta * X.T.dot(y))"
]
},
{
"cell_type": "code",
"execution_count": 739,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"true_posterior = multivariate_normal(mean=mn[:, 0], cov=Sn)"
]
},
{
"cell_type": "code",
"execution_count": 1098,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"w_samples = np.random.multivariate_normal(mn[:, 0], Sn, size=5000)"
]
},
{
"cell_type": "code",
"execution_count": 1099,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x127d30390>]"
]
},
"execution_count": 1099,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1282aa160>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(w_samples[:, 0], w_samples[:, 1], 'bo')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### SGHMC"
]
},
{
"cell_type": "code",
"execution_count": 896,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class RegDataset(data.Dataset):\n",
" \n",
" def __init__(self, X, y):\n",
" self.X = torch.from_numpy(X).float()\n",
" self.y = torch.from_numpy(y).float()\n",
" \n",
" def __len__(self):\n",
" return self.X.size()[0]\n",
" \n",
" def __getitem__(self, index):\n",
" return self.X[index], self.y[index]"
]
},
{
"cell_type": "code",
"execution_count": 1048,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"dataset = RegDataset(X, y)\n",
"dataloader = data.DataLoader(dataset, batch_size=10, shuffle=True)"
]
},
{
"cell_type": "code",
"execution_count": 1049,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class SGHMC:\n",
" \n",
" def __init__(self, var, alpha, eta, log_density, num_data):\n",
" \"\"\"\n",
" Stochastic Gradient Monte Carlo sampler.\n",
" \n",
" Args:\n",
" var: `Variable` corresponding to the variable that is sampled\n",
" alpha: momentum parameter\n",
" eta: learning rate parameter\n",
" log_density: function computing log_density for a given sample\n",
" and batch of data\n",
" \"\"\"\n",
" self.var = var\n",
" self.alpha = alpha\n",
" self.eta = eta\n",
" self.log_density = log_density\n",
" self.dataloader = dataloader\n",
" self.optimizer = optim.SGD([self.var], lr=1, momentum=(1 - self.alpha))\n",
" self.num_data = num_data\n",
" \n",
" def _noise(self):\n",
" std = np.sqrt(2 * self.alpha * self.eta)\n",
" n = Variable(torch.normal(0, std= std * torch.ones(self.var.size())))\n",
" return torch.sum(n * self.var)\n",
" \n",
" def sample(self, x_batch, y_batch):\n",
" loss = self.log_density(self.var, x_batch, y_batch) * self.eta\n",
" loss += self._noise() / self.num_data\n",
" loss.backward()\n",
" self.optimizer.step()\n",
" self.var.grad.data.zero_()\n",
"# print(self.var.grad)\n",
" return self.var"
]
},
{
"cell_type": "code",
"execution_count": 1050,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class BayesianLinearRegression:\n",
"\n",
" def __init__(self, prior_std, noise_std, num_data):\n",
" self.prior_std = prior_std\n",
" self.noise_std = noise_std\n",
" self.num_data = num_data\n",
" \n",
" def log_prior(self, w):\n",
" return - torch.sum(w**2 / (2 * self.prior_std**2))\n",
"\n",
" def log_posterior_density(self, w, X_batch, y_batch):\n",
" Xv = Variable(X_batch)\n",
" yv = Variable(y_batch)[:, 0]\n",
" preds = torch.matmul(Xv, w)\n",
" loss = - torch.mean((preds - yv)**2 /(2 * self.noise_std**2))\n",
" loss += self.log_prior(w)/ self.num_data\n",
" return -loss"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Sampling"
]
},
{
"cell_type": "code",
"execution_count": 1129,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"w = torch.from_numpy(np.random.multivariate_normal(m0[:, 0], S0)).float()\n",
"w_v = Variable(w, requires_grad=True)\n",
"bayes_reg = BayesianLinearRegression(np.sqrt(prior_var), np.sqrt(noise_var), X.shape[0])\n",
"sghmc = SGHMC(w_v, .01, 5e-3, bayes_reg.log_posterior_density, X.shape[0])"
]
},
{
"cell_type": "code",
"execution_count": 1131,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0\n",
"100\n",
"200\n",
"300\n",
"400\n",
"500\n",
"600\n",
"700\n",
"800\n",
"900\n",
"1000\n",
"1100\n",
"1200\n",
"1300\n",
"1400\n",
"1500\n",
"1600\n",
"1700\n",
"1800\n",
"1900\n",
"2000\n",
"2100\n",
"2200\n",
"2300\n",
"2400\n",
"2500\n",
"2600\n",
"2700\n",
"2800\n",
"2900\n",
"3000\n",
"3100\n",
"3200\n",
"3300\n",
"3400\n",
"3500\n",
"3600\n",
"3700\n",
"3800\n",
"3900\n",
"4000\n",
"4100\n",
"4200\n",
"4300\n",
"4400\n",
"4500\n",
"4600\n",
"4700\n",
"4800\n",
"4900\n",
"5000\n",
"5100\n",
"5200\n",
"5300\n",
"5400\n",
"5500\n",
"5600\n",
"5700\n",
"5800\n",
"5900\n",
"6000\n",
"6100\n",
"6200\n",
"6300\n",
"6400\n",
"6500\n",
"6600\n",
"6700\n",
"6800\n",
"6900\n",
"7000\n",
"7100\n",
"7200\n",
"7300\n",
"7400\n",
"7500\n",
"7600\n",
"7700\n",
"7800\n",
"7900\n",
"8000\n",
"8100\n",
"8200\n",
"8300\n",
"8400\n",
"8500\n",
"8600\n",
"8700\n",
"8800\n",
"8900\n",
"9000\n",
"9100\n",
"9200\n",
"9300\n",
"9400\n",
"9500\n",
"9600\n",
"9700\n",
"9800\n",
"9900\n"
]
}
],
"source": [
"samples = []\n",
"for epoch in range(10000):\n",
" for i, data_ in enumerate(dataloader, 0):\n",
" x_batch, y_batch = data_\n",
" w_sample = sghmc.sample(x_batch, y_batch)\n",
" samples.append(np.copy(w_sample.data.numpy()))\n",
" if not(epoch % 100):\n",
" print(epoch)"
]
},
{
"cell_type": "code",
"execution_count": 1132,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(50000, 2)"
]
},
"execution_count": 1132,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"samples = np.vstack(samples)\n",
"samples.shape"
]
},
{
"cell_type": "code",
"execution_count": 1133,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x1292edf98>]"
]
},
"execution_count": 1133,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x129314668>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"start_from=45000\n",
"plus = 5000\n",
"plt.plot(samples[start_from:start_from+plus, 0], samples[start_from:start_from+plus, 1], 'bo')\n",
"plt.plot(mn[0] ,mn[1], 'ro')"
]
},
{
"cell_type": "code",
"execution_count": 1134,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x12941b518>]"
]
},
"execution_count": 1134,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD8CAYAAABzTgP2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnX2MHdd12H9nl7uUdteyyEdboT52KcE0UActVGirWHVc\nCKa/KtihgQqxjJXNSk4IrVxUQZGiNAgngAsGltzCYZAqMiFLorwb+KtoLbiKFZKqUiOwLa9cfTpl\nuLK4tFTaligpNkVBpMjbP2amO2927p07X2/mvXd+wMHOm3dn5r7ZmXvuPefcc8UYg6IoiqJEjDRd\nAUVRFKVdqGJQFEVRulDFoCiKonShikFRFEXpQhWDoiiK0oUqBkVRFKULVQyKoihKF6oYFEVRlC5U\nMSiKoihdrKviJCLyYWAvMArcbYz5QuL79cD9wFXACeDjxpij4XefBT4NnAX+rTHmoazrbdq0yWzZ\nsqWKqiuKogwNjz322EvGmLdllSutGERkFPgvwAeA54EficgDxpifxIp9GnjFGPMOEbkBuB34uIi8\nC7gB+E3gYuCgiLzTGHPWdc0tW7awtLRUtuqKoihDhYis+JSrwpR0NbBsjPmpMeY08DVge6LMdmB/\nuP0tYJuISLj/a8aYN4wxzwHL4fkURVGUhqhCMVwC/Cz2+flwX2oZY8ybwD8AHc9jARCRnSKyJCJL\nL774YgXVVhRFUdLoG+ezMWafMWbWGDP7trdlmsgURVGUglShGF4ALot9vjTcl1pGRNYBbyVwQvsc\nqyiKovSQKhTDj4CtInK5iIwTOJMfSJR5ANgRbl8PPGyChSAeAG4QkfUicjmwFXi0gjopiqIoBSmt\nGEKfwb8BHgL+DviGMeYZEfm8iPxOWOwrQEdEloF/B+wKj30G+AbwE+C7wGeyIpIUpSkWF2HLFhgZ\nCf4uLjZdI0WpB+nHFdxmZ2eNhqsqvWRxEXbuhFOnVvdNTMC+fTA311y9FCUPIvKYMWY2q1zfOJ8V\npUl27+5WChB83r27mfooSp2oYlAUD44dy7dfUfoZVQyK4sH0dL79itLPqGJQFA/27Al8CnEmJoL9\nijJoqGJQFA/m5gJH88wMiAR/1fGsDCqqGBTFk7k5OHoUzp0L/pZVChr+qrSVStJuK4qSj2T468pK\n8Bl0FKI0j44YFKUBNPxVaTOqGBSlATT8VWkzqhgUpQE0/FVpM6oYFKUBNPxVaTOqGBSlATT8VWkz\nGpWkKA0xN6eKQGknOmJQFEVRulDFoCiKonRRSjGIyEYROSAiR8K/GyzldoRljojIjtj+R0TksIg8\nHsrby9RHURRFKU/ZEcMu4JAxZitwKPzchYhsBP4Y+C3gauCPEwpkzhhzZSi/LFkfpWY0jYOiDD5l\nFcN2YH+4vR/4WEqZDwEHjDEvG2NeAQ4AHy55XaUBojQOKytgzGoaB1UOijJYlFUMFxljjofbPwcu\nSilzCfCz2Ofnw30R94ZmpM+JiJSsj1IjmsZBUYaDTMUgIgdF5OkU2R4vZ4LFo/MuID1njPnHwHtD\n+aSjHjtFZElEll588cWcl1GqQNM4uEkzs6npTelHMucxGGPeb/tORH4hIpuNMcdFZDOQ5iN4Abg2\n9vlS4JHw3C+Ef38tIn9J4IO431KPfcA+gNnZ2bwKSKmA6enAfJS2f9hJy5Z6003B5LXTp1f3aQZV\npR8oa0p6AIiijHYA304p8xDwQRHZEDqdPwg8JCLrRGQTgIiMAR8Bni5ZH6VGBjGNQ1U9+jQz25kz\nq0ohot9MbzriGVKMMYUF6BBEIx0BDgIbw/2zwN2xcjcDy6HcFO6bBB4DngSeAfYCoz7Xveqqq4zS\nDAsLxszMGCMS/F1YaO56ZeuysGDMxIQxgSs9kImJYr9JpPs8LhHJf/5eEt3XqK5V3B+lHQBLxqON\nlaBsfzE7O2uWlpaaroZSM0nzDAQjlH37gm3bd75mmi1b0k1jMzPBCm15sJ0rjSLn7xVp9zxJm+uv\nuBGRx4wxs5nlVDEobcXVcEP5Rn1kJOgHJxEJlu/MQ1qDOjbW7WOA/Mqr1/gouCL3R2kHvopBU2Io\nrSJu07Y1UMeOVRMhVXZNhHhdd++GHTu6s6Xeey/cc087Mqj6+gp87l/8/qgPYkDxsTe1TdTHMJik\n2fzTZGZm1Qae9l2Z6/na0Kv0T1RJmt8lT11t9zXtuLbeA8UOnj6Gxhv5IqKKoR3EnZSjo6sNc9GG\nIatRijc88/PVOEaLOrCrUExVY2uoOx3/uqadI7rPyfvTxnuguFHFoNSKq3dfR2RPVg9YJFAWtrpW\nHUllq2uTEUc+itWnrr73q433QHGjikGplaxGqEiv0bcHmqenWpe5o2hvuc5w3zwhs1X07HXE0H/4\nKgZ1PiuFyHJSFkmTcd116fvf8Y5uB6fLKZ10ht52W7X5naLzp9VhfNw92a/uJIQ2p3mnU8/ExEGc\n8KiE+GiPtomOGOonq2fbyxFDsids6xl3On7O6yxzh+23ZznHx8bcI4C6e9iu0VFdI5VeT3hUyoGa\nkpSi+JhfXI1k0t5f1mbtoyxcTtY8jXHa7xob8z+3zZzlUqRV2uS1oVZcqGJQCuPbs3U1ePGealWh\nkmn1iTeAvorF5WPIW4esRt4nBFdt8kqv8FUMOvNZWUPeGcFVzVD2ScfgOt531u4tt8Cdd6Z/b/vt\nviTrlVWnts+EVgYLnfmsFCbvjGCbo3llJd8M5bm5oJGMZgp3OkFDncTm5E1zhiYxBh58sHtf3GGd\ndj1f0hyvLid8kzOhFcWFKgZlDXmjTWwKQwQmJ9O/27gxff/cXNDjPncOpqbSRyhveUt6Y5pULDbi\njXUyUujsWftxSTqdQABGR1ejneJRRrZ7E40sot+hi/worcLH3tQ2UR9D/eRxYs7Pu23uafs7new6\nlJ1A5eMrKeJTiPsosmZg+zryx8bWXieaTe7jG8lD8n87P68O62EBdT4rvaJI4+rTuJcN7/RplH0d\n1qOj6eGrtuPjdcxSslVEU/ni4wwfHw/qpIpi8OiJYgA2AgcIFuo5AGywlPsu8CrwncT+y4EfEizg\n83Vg3Oe6qhjqoWioo6txTfZ68zRwtpGILfVFkd/k2yinKbI8IaiuelStUF2UHSEp/U2vFMMdwK5w\nexdwu6XcNuCjKYrhG8AN4fZdwLzPdVUxrKXJ1cxsjWs0nyFPXiOf81Y5IWx83K9xTLumSyF2Ov4r\noeVppPNmjy0a0lvXPVeapVeK4TCwOdzeDBx2lL02rhgAAV4C1oWfrwEe8rmuKoZuqsgHVCb3T5p9\nPN6zt9nhXbbthQV7I5W312xTmnl6z2l1dR0/MpKtdKJ76ztqyfM/TXsmfJWgzz3XiXT9Sa8Uw6ux\nbYl/TimbVAybgOXY58uAp32uq4qhmypSLRR19NquHXcu+6a6iDd8rkbX53f59NZ9e88ia5VfpNh8\nU3C47q3LeR9XNHns/mUn6rnuua7D0L9UphiAg8DTKbI9qQiAVxznKaUYgJ3AErA0PT1d793rM6pI\nf2xrSEZH3S+8z7WLZP10fZ+sT1qUjU+DbfN/5Kmna2STJVNTxRvwrIa4iMlIJFA+aUpQ12EYDNSU\nNIDYhu9ZtnifYX/R9RXqCgl1NWxZie2K2tEhMLeMjPjX0ZjyCqaouBriIvc86zmL0HUY+pdeKYYv\nJpzPdzjKdimGcN83E87nW32uO4yKwTZ8n59Ptx1HmT7zDPtdJo08SefyJNwrqhyia1RhMhEp5qCN\n7kkTSiGtIY436J1OPp+Cz7ySCB0x9C+9Ugwd4BBBuOpBYGO4fxa4O1bue8CLwOvA88CHwv1XAI8S\nhKt+E1jvc91hVAwuU4/rRc+TEM/VeBdJU50sU6Rn7Wr4I5t7FY3s/Hw+RRNXfpOT9nJTU8XqE19O\n0+Wcju63KyuszUQUf4Z8/AO+UVZKe+mJYmhKhlEx5G0Ao4bcd9hfx/oKSYVRRClk/XZXo1y1RPUY\nHe0Ot/U1PeX53XlGXL7rOi8spJfLWkfCVgfbWtBKe1HF0CB1hPLlHTFEDYLviMHHbJOHsrb/8XH/\nsFJbT7hOKToPwfc3p93PKmaYFzUDqfloMFDF0BBVh/JlDd+3bUt/YaMerW99ikYluepbRuI276zI\nn6LmmrISjRyqOp+I3QwXdTTyntO3A5DlOM5znM5xaC+qGBqiyp6Vz/Dd53pFo5LymgryOpldDV2y\nwcmTT6ifJbkUZ9Z9iiRtWdM8HYCqRgw6x6HdqGJoiCpD+XxexqLXS1MWrsbIJ41FlZOqkoqtqVFB\nE5Jn7er4MfPz3Qo0SsuR/L8XabjLjjzV5NQOVDE0RJUvhk+jX+R6WS+5a6ZyXIEkRyBVRQjB6jmr\nNNVU0QC3WcbG1oaopjXeRU09PsfpHId2o4qhIaocSmc1+rYok6zrZZ3X1cBPTdl/X1Ujhsi/UCbp\nW55r9TKyqSlJGz24KKo8dMTQblQxNEhVzre0BHWuiWu+DUDWrOIi9vxOpzo/QGSyasqvUCbZXJvF\nFfWUfO5sI6lkqK7PsepjaA+qGAaAhYW1jVT0cpfpmbUx/HNYGuempdPJ7rT4jPyylINGJbUTVQwD\ngKvxL2PLLZqiQqU5mZys53+W1pv3Md+Njvo9Z6og2oWvYhhBaRzbou/xRevjHDtmX2Tetj/O3Bzs\n27e6kH1eRIodBzA5GVxXBGZmip9n2HjtNdixo/j/zMapU7B7d/c+n2fo7Fn394uLsHMnrKwEqmRl\nJfgcPdtKu1HF0DCuF8jV+O/ZAxMT3fsnJoL9vrz+erE6v+99QaMeNe5TU37HdTpw8iS89BKcOwdH\nj6pyyMNXvlLPeZMdkLRnK8noqPv73bsDpRMnTQkp7UQVQ8O4XiBX4x/1+uMN9L59wf6i1/VleTlo\n1M+dC+ryxhvZx4yNBX+To6I8imzYOX0aTpyo/rxpHZDzz3cfc+219u8WF4MOThorKzpq6At87E1t\nk0HyMWT5CnzttHntuWXDQLPmPKxfv5rHScSYdevstu2m7ffDLnFHsq//KU8a9qRolFJzoM7n3lHG\nyVZF3HeREMGq8hmVOT7v+gcq9cj4+Gp6bt/U6LYgB9/nKmsCpjqt60EVQ48oG7ftWoDH9+VwJcCz\nHd+WyKRhyYE0aGJr2POso13H+6S4UcXQI6rq8ceVQNqaxa6Xw+dljPcK45PRoh7izEyQqVV77ypZ\nUmSp16TYVozTmdP10hPFAGwEDhCs4HYA2GAp913gVdYu7Xkf8BzweChX+ly3TYqhjtwweV+Osmah\n+Iuupp3+ldFRexr2Kq/h6r37jkRtisF1jAs1P/nhqxjKRiXtAg4ZY7YSLPG5y1Lui8AnLd/9e2PM\nlaE8XrI+PafMfAIbrvkLafiEF7pIhhFGEURKf3H2LBw6VN/5x8dh/3535FsULZcVzvryy+n7bce5\nzqdzJmrAR3vYBDgMbA63NwOHHWWvJX3EcH3e67ZpxJBlEy3SkymaMbVsb7BoniSV/pP16+1rQdtG\njMnFk1zPddao0/Ysu46p8n0ZVuiRKenV2LbEP6eUtSmGw8CTwJeA9Y7jdwJLwNL09HRtN64Itpek\nrtz3tutVuR6CyuCL7fl1HWPzgcV9WD4djLw+Clcjr6m+/alMMQAHgadTZHtSEQCvOM6Tphg2hwpl\nPbAf+COfSrdpxOCiTE+miLKx2XenptqRGE+lnRLPyNurVOe2Z7zK0GsdMaylVyOGUqakPN/HpYhi\naMI5VbYnk1ZnnzUabAolOnZkpPnGSKVdsm5db8yIUXbgrA5O9KzGo+Zckzs1xNWPXimGLwK7wu1d\nwB2OsqkjhvCvAH8KfMHnunkVQ1MPTtkRQ1qdbS9cXNnYemLDsCCNSrslGi34dHDyvLMaleRHrxRD\nhyAa6UhoctoY7p8F7o6V+x7wIvA68DzwoXD/w8BToWlqAZjyuW5exdDUUNPn4c7rL7DNTI2OTev1\njY/7z2hVUalTog5M1mhazUP10BPF0JTkVQxNOqdcPRmX4nDZedNGDpOT6kdQab9EDXvR5WXVoVwO\nX8UwFNlV65hr4Mvc3Gom0qNHu2PAXZlVbXWLsqgm8/K/9hqcOVNlzRWlek6eDOYXZKWNb/KdVYYk\n7XYVaxfUgWsi23XXrV0QJ55y23cNBEVpkpFEC3PiRDD5DNxp49v6zg4NPsOKtkm/RCVlYRtOT06u\nHUqLdKdH1rQVKv0sZUK2leKgpqRuXCYd29KadZPWKxobC8xCxnTvNwYefHD1sw6plX7GNlqO43pn\nlXoZGsVgo8k8K/FV2CDIB+PyE8RfJlt+pMj8NDMD27ZVV1dFqZK6OjZNdfIGDp9hRdukypnPbQiL\ny7NqVjIkNc2kNDFRf5ZNFZWiMjZWjVmobLr6YQRPU5IEZfuL2dlZs7S0VMm5RkaCRyiJSDCErYPF\nxSDy6NixoOd08qTfWr6Tk8H6ym++WU+9FKUXjI/DPfeUMw1FI/14VJ9I+rs8MxOYohQQkceMMbNZ\n5YbelNTrsLg005XvAu+vvaZKQel/Tp/uTvNehLRQb1sf18efoXQz9Iqh12FxaQ+0ovQTWWst+LCy\nUu74PI29BmrkZ+gVQ9wBnBZPXTXae1H6nbNnqzlPGQexrbG3zf1R8jH0igF6GxZne6AnJ9c+1Ioy\nyESm1CJRgLaR/i239K6TN8ioYugxtgf6y1+Gr361O3RVUYaB5NKyPthG+nfeqXMfqkAVQwZ1xEWf\nf/7qdqez2quJRi7GBE5mY9bmRKqKycn6zq0ML0VHvUVMrDoBrj5UMTioevJbdL54FNLLL8ONN9qV\njm/EUl5OnoS9e9MnySlKUYpGv6uDuF2oYnDgyn7qS3zEsWOHPcTOpnTqMClF5iqNkFLagIg6iNtG\nKcUgIhtF5ICIHAn/bkgpc6WIfF9EnhGRJ0Xk47HvLheRH4rIsoh8XUTGy9SnalzZT31Ijjiyojki\npRNXJlVFgETEozQ0QkppGpHAYexrBtKUFz3CZ3q0TYA76F7a8/aUMu8EtobbFwPHgQvDz98Abgi3\n7wLmfa5bZUoMF2XTZdiOzxKf9BhxGR/3X693cjIoK6IZWlV6K1HaiqIZU3Vt5/LQo6U9D7O6bvNm\n4LDHMU8AWwnWeX4JWBfuvwZ4yOe6vVIMZR/EIg2vzxKcY2Pd6zd3OtmrvqmoNCVVNd5tyGvW7/gq\nhrI+houMMcfD7Z8DF7kKi8jVwDjwLMF60a8aY6IkD88Dl5SsT6WUnfxmc6hFfoO0yThZpqOZGfi9\n3wteiYho8ZONG/3qpSh1Mj4eRLyVnUuQNBvZZkurSbQGsjQHcBB4OkW2EzTs8bKvOM6zmWCE8e7w\n8yZgOfb9ZcDTjuN3AkvA0vT0dK1atSqyRhxpC5G4zE8iQdZU26ii08lvhlJRqVriC0pV+e7YRsQ6\nYvCHNpmSgAuAHwPXx/a13pRUBb6rUMWVQlGTkMjatNwqKr2WeENdZBW2hQV75yft3YhMqUo2vVIM\nX6Tb+XxHSplx4BDwBynffZNu5/OtPtftJ8WQJO1F8V2PwfeFLOr0VlGpQkRWn/W0Xn/aiCJPx8i2\nBokqh2x6pRg6YaN/JDQ5bQz3zwJ3h9s3AmeAx2NyZfjdFcCjwHKoJNb7XLcfFIOvApiYqKaHH38x\nmm4YVFTA3sBHI9sio2RXuUE2KVW1/nVPFENT0nbFUKcCSJPR0W6/hUYnlZdPsGCeY8acRcxzzJhP\nsNB4nQZJpqbyP6c+I4lBpMowXVUMDVKVKWf9+uwyyQdEzUjl5RMsmJN0v4knmVDl0KD4hHEP6oih\nyjBdX8WgKTFqIG/4XKezNmfR2Fjw748jAtu2ucNnNXSvPH/CbibpzhUyySn+hJLLjimFmJiA/ftX\nU7nYygxqWo2yGRiKoIqhBmzzF9IUwMREkMwuOV/igguCJRDjGAPLy+6MknnnMugaEGuZJv2Ns+1X\nqid6LkdHV1PFXHddetLHeIbiQUyZ0evlhwEyhxRtlLabklw2QV8nUpaTLe34hYUgPUay/NhYMP8h\n7VznnafhrUl5jpnUL55jpvG6DYOMjgaRS2nvkCulxqCmzFAfg6e0XTEY46cAXGVsdsWkwog/ILYG\nvtNR30MeUR9DczI25p7oGT3Led6ZQfA9aFSSh/SDYsjCZ1Z0npmfCwvNv9SDJBqV1IxMTeV7luPv\njCs8VglQxdByfHo3yV6C6wXxidpQUekHyTvZM2tiZ/R9Vb3ufsZXMajzuSGKRBq4luKset0GRSmD\nCMzPFzs27+JR0TtjW099z5701Rhvvhk2bRosR3Vl+GiPtskgjxiiyWpppqSxsXTnsopKW6XKkazN\nh+aTm8nHx5bl3B4EUFNSu3HlRxobczuSNYpIpQ0SNaB5jxsbC6Lh8l6rTHRO0WwA4+ODpRx8FYOa\nkhoiWushbR7BmTPBGgtpvPwyTE3VWzdF8SGaT+OaeJZkZgbuvRdef91tGo0TmYPKrI9SNOb/9Gm4\n7bZix/YzqhgaZG4u6JfkYXpaZzcr7SCyyV93nd9EyZmZ7kmZts5PHBHYsWP1mLk59wRPG2VmRfvU\nc9BQxdBHjI0FD3itMx4VxZPduwPlsH+/XwdnZSVo6Net859xbww8+GC5ekKgQHxHKIoqhsbJ87Be\ncEHwgKdFXyhKr1lZCZRD3iiivBF0VYyQbRFHkYKamYHJyfQyw6hQVDE0zN69wRq5Prz8cvA3srVG\na0crShOI2Ndhrvo6ZUJKo1DVpEmo04GvfjUYlRw9Cl/+cjAqjzM2FryjQ4ePh9omwEbgAMFCPQeA\nDSllrgS+DzwDPAl8PPbdfcBzJBbwyZJBiEqKkwyx8wnLM8Y/0mJystnoFZXBlV5PrCySIyhPqgxb\nuGvW5Lh+mTxHj1Zwu4PupT1vTynzTmBruH0xcBy4MPx8H7F1oH2l7Yoh7zrPaQ+hT1ieb2y2hreq\nDJLkzX1UNlVGkfQ1bU3e1yvFcBjYHG5vBg57HPNETFEMnGLwfUh8HjafJHyu9AHR+rq6opvKIEne\n3Edlk+tlHd9Pyft6pRhejW1L/LOl/NXA3wEj4ef7QuXyJPAlBmDNZ9+HpKqHyZWJMjqfZlZVGSQZ\nHc1nsinbo88acfRT8r7KFANwEHg6RbYnFQHwiuM8m0Ml8O7EPgHWA/uBP3IcvxNYApamp6frvn+F\n8XlIXNkjbQ9T1ggia+H1sbHmX2gVlTzS6WQ/t75pLMr4AHTEkFN8TUnABcCPXWYj4FrgOz7X7ecR\nQ5b5x+YQS+ZISk7Vz8q9NDXV/IuuouIjNpOqzdHtWqOkCtTHkFOALyacz3eklBkHDgF/kPJdpFQE\n+FPgCz7XbbNiyHpIXGYd28Pkypvkum4kOlpQaZvMzKz29GG10S+6qmHa+at4lyOlFOUo06gkn4Oh\nEzb6R0KT08Zw/yxwd7h9I3AmFpL6/8NSgYeBp0LT1AIw5XPdNisGY9wPievhtj1Mrhcged284YOd\njmZsVSkuWY11Wm8+TwZTnxGD7bpl6KdRQB56ohiakrYrBhdF7JGuFyBJ3gik+XkdUajkl3gP2lUu\nqQRsazkXibpzSdkRQz/5DfLgqxh05nOPcS0mYsM2JT9tf548SiJBHpozZ/yPUZROJ8iOeuJE0Fza\nEIH3vKc76d2DD65NoXHqVJBaI4lvuo1k3qWs98mHIgtpDRKqGHpMMnVwpwPnnw+f/KR9yv/evf5T\n9ffsWVvWhjHD86Ar1XHihF+DbQzceGOwSlr0XOdpcH2fTWPSU3EvLgbvVDydRtq+iPh3I5aWcWgS\nWPoMK9om/WxKipPHjplnNrWvz0DXiVbplUTPdR4Tje/8G1skX/LdGh9fazaN6uVjtlIfQ8ulzYoh\nT3RCHXZM2zl19rNK0xJ1RNKexU7HLztAUmyNdZ5Jna5JoHkn07UdVQwNkDeSoY4Zky4FoDmTVNos\nttQxSee1T5K7PNcV6a/Zy2XwVQwSlO0vZmdnzdLSUtPVWMOWLelpiKOVq8qWL1sH6E2aZEUpSpFn\nP0qrHfd7iARNuw+dTrBcbtXvYhsRkceMMbNZ5dT5XCF5IxlsC+6srHQ77PLginrydebpOg9KFhMT\nsG1b9ectEgyRFr2UphTGx9Of7V/9KlieNG+04CCjiqFCbBELtv1RhFJa2OmJE3DTTdmRFLZzpkVp\n+EZUnHee/+JByvDR6QTrMC8v+5XP09EoEvXjUiadzup7cM89cOGFa8ucOROE0drem6HEx97UNhkU\nH0OEyyba6VQ3A3NhIZ8T+rzzVm22utiPCgQ5t6qI+BkbWxs9Fz2bVSW5i84VZ1h8CTZQ53MzFMmZ\nUiRiqGjkUtr6DK7rz8+7s8GqDJ/YGuJOx/7sp70X8fDVMonw8mQrHtQZzb6oYugjiqyXkKeHkxXZ\nkXUdjWZSiUvVve4qGmvf5XAHNQeSL76KQX0MLWDPnnSb/siIPR2Gry02ithYWQleg5UVuOuu4O/0\ndOB0c9mAjVm7iLoy3GzcmL6/6KzgKtJP7N3r5zx2+eCUGD7ao20yaCMGY4JefLK3Mz6eL+lYGrp6\nm0rVUqXfy/WMFl3NcJAmpFUNOmLoLx58cO2+06fLR0toLiSlCLaRKgQjyKxnMk8knS1s++TJfCHb\nc3PdCft0FFCcdU1XQAlwDafn5oo95IuLwYt59myxOq1bB299q5qShpGXXrJPlhSBv/1b+7HJCWcr\nK8FnSH+Oo3233db9rJ044T5OqRGfYUXbZBBNSVVHS5TJZR9d1ze5WFEZGdG1INookRM5T3hzfKnZ\nPM+yz0I8wxIx1AvoVVQSsBE4QLCK2wFgQ0qZGYI1nx8HngFuiX13FcEqbsvAn0GQpsMlg6gYqo6W\nKOpbyMpXoxlZB1/m51f/93mOi5aa9Y1a8u10DMscg17gqxiq8DHsAg4ZY7YSLPO5K6XMceAaY8yV\nwG8Bu0Tk4vC7vwB+H9gayocrqFPfUXW0RF7fgu81i5qllPYzOgrz83Dnnav7ohxbPkRmIN8MAL4L\n8QzNGggtogrFsB3YH27vBz6WLGCMOW2MeSP8uD66rohsBi4wxvwg1Gb3px0/LFTpPMvzMs3M2K+Z\nDHdVBpPtv0/hAAARY0lEQVSZGXjzzWDFtbjTOC2HUBa+qxT6dF6GOV9Ro/gMK1wCvBrblvjnRLnL\ngCeBU8Bnwn2zwMFYmfcC37EcvxNYApamp6drGGQNFr5pCLLMVRruOvjiSl0xMRGYlnwnOUYmx/ia\n0Lb02FlmydHRbrOWUh6q9DEAB4GnU2R7UhEAr2Sc62LgUeCiPIohLoPoY7BRJjbblYbA93y6wM/g\nSvIZcC1WU2T2e7LTUSSQIVJMOj+hGipVDM4TwGFgc7i9GTjsccw9wPVh+f8T2/8J4MtZxw+LYmjD\n9H0dMQyuJKmjExCPKMpaJc02giiTR0npxlcxVOFjeADYEW7vAL6dLCAil4rI+eH2BuC3QwVyHPiV\niLxbRAT4VNrxw0qac+7UqWB/r7BNPiqDpvRuHhG49dZuf4It1UUWLgd13I9gWyTq3LlVScOY7s+9\nfgeGkSoUwxeAD4jIEeD94WdEZFZE7g7L/CPghyLyBPA3wH8yxjwVfncrcDdBuOqzwF9VUKeBoEgO\nmTwzTn2IoqVs+ZRE8p/z9OmgfqogekPa/8iY1ZxZxgR/f/1rGBsrdt6snF6Li/ZnJSqTJ2BCZ/TX\njM+wom0yLKakvJPe6jQ9uWLTi6bljtuPmzarqATS6dhNOlFa7ej/Hv/OtR6D61mOnh/b82t77nTS\nWzHQXEn9j2/YX0Sdpqe8q9P5cOpUkAvq6FFYWMg3+li3zp3PRynGyy/D/v3pz93v/u7qZ2O6vz99\nGi64wD4Px9bDN2a1TNpcnltu0SU3G8FHe7RN2jhiqCuzY57zupyHZevmGo24Ila2bXNHosRntaYt\nImST0dH2ryrnk+6j01kbdZOWUbdqyeqJp63hkVUn1wzlMilfepk1ddAztKIL9fSOJqOHfOLCs6I6\nfF8GWzlXY+FjJrLFuUex8E038EVlZMT9fXz+gCusuNPJPlcehWBr6F3PrO//0fWcNh1hl0U/1LEs\nqhh6SFPLBfrEhfv0DMu+DFU0WK5r9nouhcjaiYB1SVqDPz6+OjmsSsUY5TKKPz9ZHYL48ptZ9yzr\nmWlrbzzrNw6SP0MVQw9paoHxrLhw18MevchVZLSsqvGyXbOXzulIQc3PV9dLb4skFUMc26glj0mr\nH/HtXA0Kqhh6SFMjBh+F5Fq43df2n0Ydpg7bNetM/R2X0dH6U403KXnu78REPoXfr73qsiayfkMV\nQw9pyjbpo5CKvvR57cXj4+VNPlnXjBRRXY1mVId+9msUub9lR2T9bIfPep76+beloYqhxzRhP/VV\nSGl1c70QTSXW65d1rJu+ftWNd15lG81naJuvoAhZvoV+/m1pqGIYEooqJJd/os7EerZjXfbvJPPz\nzTewbR1VrFuXvn/btvzPQpq5cdB60MMQiRRHFYPipMwLkachGRvrjrBJm3uQ90Vsqsfe6XSH1fZi\nWdKRkWoipKKOQ1oHwvUstDWSqEqG4TdGqGJQMin6QhRpSGwO3Xhj60uVfoY853LdvyrnGiQlSh1S\n9TnzzmUZpgZ0UFHFoNRK3kaiysitqkYM0UIwPhFIaTOC4xPw6p5rUYdTPM+9HzaTy6CiikEpTJU9\nw6zJQ2khlFnXz3Ke+0p07WRjb1vlrskw1mjeSZXXzxOf31RItlItvopBk+gpXSTXeF5ZCT4XSd8d\nP5eNZBK+tOvffDNs2rSaShyC78qSlgBwago+/en0ZHC+i9fXwfT02iRznc7a1OUTE7Bt22qa9NHR\n4DfZzulLkRTwSh/joz3aJoM+YmjSlttLk0+aKcLHTOSah+GbLyr63Om400XHqdtcZDt/vD5pye18\nfANlzUA6YhgM6IUpCdgIHACOhH83pJSZAX4MPA48A9wS++4RgqVBHw/l7T7XHWTF0LQtt8r0HlnZ\nXss0vrZQSltyuG3bshefz2rw6oyGSq5NEdU1y4Hv+2yU7Ww0/Vwq1dArxXAHsCvc3gXcnlJmHFgf\nbk8BR4GLzapimM173UFWDE33zPJcP6uxKfJbfBvfyOaelt8nPpqI0lrntc3bfB8+5xkZcSuh8XF3\nT992X5t+NjRyqf/plWI4DGwOtzcTrOPsKt8BjqlisNNUQr6IPLOps8oVmZmd5vzNo6jK5vzJamx9\no5KSGVKj7azG0vYbXOGqbUnypqOK9tMrxfBqbFvinxPlLgOeBE4Bn4ntfwR4KjQjfQ4Qn+sOsmJo\nuldojF+vz7eePhFGWZPifH0AVZl6Rkb8G/I898IH27myzHJtoA3PruKmMsUAHASeTpHtSUUAvJJx\nrouBR4GLws+XhH/fAvw18CnHsTuBJWBpenq65tvXHP3S66pqZOObCNDHPFGXczjr/vfKL2OTIpME\n66Dp0a6STStNSWG5e4DrU/b/a+DPfa47yCMGY/rDTltV77DKxiRPqo68UsQv0svJe23oPOiIof34\nKoay8xgeAHaE2zuAbycLiMilInJ+uL0B+G3gsIisE5FN4f4x4CPhSGTgWVwM4vGjuPzkHIG5OTh6\nFM6dC/5Gi6W3iT17qlmk3RZLb9vvune2Ou3dG8T/T07mq1scV7x+VffCdi6R7ONOnQrmWTRJlfdB\naRgf7WETAmfyIYJw1YPAxnD/LHB3uP0BAv/CE+HfneH+SeCxcN8zwF5g1Oe6/Txi6BdTkQ9VjGzy\n3A9fh7erTkVzDmX1euuYLe5an7mtJpt+GO0OM2hKjHaiw+21+DYmVd27Iqklmm7g4veoiuVYleHE\nVzFoSoweM0ypBbJMZhG+prOq7t3cHFxzTfe+9evt5TudfOY839+dh/g92r+/GZNNHb9LaSk+2qNt\noiOG9hJPmpd0LJc1mdnunc/iQnFs5qRt28qb+XplKuy1yWaQTKDDDGpKaieD/IL5mGjKKEDX+fPc\nQ5spJlIwZRrcQVX8g/q7hg1fxSBB2f5idnbWLC0tNV2NwiwuBhEkx44F0Td79rQz8igvW7a4M6lC\nEGFz7lzxaywuwo4dcPbs2u9mZgJzSxauKJ+yr8PISPo5yv7uphnU3zVsiMhjxpjZrHLqY2iAfghH\nLYKPrT9Pquc05ubsDZGvryFKSe27P8LHxp43/LZfaOvvUr9HPahiUCojq5GoykFappFaXITzz0//\nbudO93E+61QMaix/G39XlWuHKAl87E1tk372MQwyaT6AyAFdpYO0qJ/G5qMQCRzSLqrMOtuvtO13\nqd8jP6iPQWmCXvlPilzH5gPx8U2ojb196P8kP74+BlUMytBQpiEpo1SUetD/SX7U+awoCcr4Jtpo\nYx929H9SH6oYlKGhTEMyNxck4puZCUYYMzPB50GJKOtH9H9SH2pKUoaKQZ1Doig++JqS1vWiMorS\nFubmVBEoShZqSlIURVG6UMWgKIqidFFaMYjIRhE5ICJHwr8bHGUvEJHnReTPY/uuEpGnRGRZRP5M\nxGe9KkVRFKUuqhgx7AIOGWO2EqzmtstR9j8C/yux7y+A3we2hvLhCuqkKIqiFKQKxbAd2B9u7wc+\nllZIRK4CLgL+OrZvM3CBMeYH4XTt+23HK4qiKL2hCsVwkTHmeLj9c4LGvwsRGQH+M/CHia8uAZ6P\nfX4+3KcoiqI0hFe4qogcBH4j5avd8Q/GGCMiaRMjbgUeNMY8X9SFICI7gZ0A003n+lUURRlgvBSD\nMeb9tu9E5BcistkYczw0Df0ypdg1wHtF5FZgChgXkZPAXuDSWLlLgRcsddgH7INggptPvRVFUZT8\nVGFKegDYEW7vAL6dLGCMmTPGTBtjthCYk+43xuwKTVC/EpF3h9FIn0o7XlEURekdVSiGLwAfEJEj\nwPvDz4jIrIjc7XH8rcDdwDLwLPBXFdRJURRFKYjmSlIURRkSNO22oiiKUghVDIqiKEoXqhgUpSUs\nLgarko2MBH91UXulKTTttqK0gMVF2LkTTp0KPq+sBJ9B04QrvUdHDIrSAnbvXlUKEadOBfsVpdeo\nYlCUFnDsWL79ilInqhgUpQXYsrxo9helCVQxKEoL2LMHJia6901MBPsVpdeoYlCUFjA3B/v2wcwM\niAR/9+1Tx7PSDBqVpCgtYW5OFYHSDnTEoCiKonShikFRFEXpQhWDoiiK0oUqBkVRFKULVQyKoihK\nF325HoOIvAi8BrzUdF0sbKKddWtrvUDrVpS21q2t9YLhrtuMMeZtWYX6UjEAiMiSz4ITTdDWurW1\nXqB1K0pb69bWeoHWzQc1JSmKoihdqGJQFEVRuuhnxbCv6Qo4aGvd2lov0LoVpa11a2u9QOuWSd/6\nGBRFUZR66OcRg6IoilIDrVYMIrJRRA6IyJHw74aUMleKyPdF5BkReVJEPh777j4ReU5EHg/lyhbV\n7XIR+aGILIvI10VkvFf1Cst9V0ReFZHvJPY3es8y6lbLPctZtx1hmSMisiO2/xERORy7b28vWZ8P\nh+dbFpFdKd+vD+/BcnhPtsS++2y4/7CIfKhMPaqsm4hsEZHXY/forgbq9i9E5Mci8qaIXJ/4LvV/\n24J6nY3dsweqrJcVY0xrBbgD2BVu7wJuTynzTmBruH0xcBy4MPx8H3B9S+v2DeCGcPsuYL5X9Qq/\n2wZ8FPhOYn+j9yyjbrXcsxz/z43AT8O/G8LtDeF3jwCzFdVlFHgWuAIYB54A3pUocytwV7h9A/D1\ncPtdYfn1wOXheUYrvE9l6rYFeLqOZytH3bYA/wS4P/6cu/63TdYr/O5kXffMJq0eMQDbgf3h9n7g\nY8kCxpi/N8YcCbf/L/BLIHMCR5N1ExEB3gd8y3V8XfUK63MI+HVF1/SlcN1qvme+dfsQcMAY87Ix\n5hXgAPDhCusQcTWwbIz5qTHmNPC1sH62+n4L2Bbeo+3A14wxbxhjngOWw/O1oW51k1k3Y8xRY8yT\nwLnEsXX+b8vUqxHarhguMsYcD7d/DlzkKiwiVxNo5Gdju/eEZpwvicj6ltStA7xqjHkz/Pp54JIm\n6mWhFfcsQZ33zLdulwA/i31O1uHecLj/uZINYdZ1usqE9+QfCO6Rz7FlKFM3gMtF5H+LyN+IyHsr\nrJdv3eo4tu5znyciSyLyAxGpsjNkpfGFekTkIPAbKV/tjn8wxhgRsYZQichm4KvADmNMpHU/S/CS\njxOEgf0H4PNN161s56mqelloxT2rg5rrNmeMeUFE3gL8V+CTBGYBZZXjwLQx5oSIXAX8dxH5TWPM\nr5quWMuZCZ+tK4CHReQpY8yzmUeVoHHFYIx5v+07EfmFiGw2xhwPG9dfWspdAPwPYLcx5gexc0c9\nwDdE5F7gD1tStxPAhSKyLuxRXQq80Mt6Oc7d+D2zUOqeVVS3F4BrY58vJfAtYIx5Ifz7axH5SwLz\nQVHF8AJwWeI6yd8alXleRNYBbyW4Rz7HlqFw3UxgMH8DwBjzmIg8S+CHW+ph3VzHXps49pFKalXy\nfxJ7tn4qIo8A/5Ruq0jltN2U9AAQRQfsAL6dLCBBZMp/A+43xnwr8d3m8K8Q2IyfbkPdwhfkfwLX\nu46vq14umr5nNmq+Z751ewj4oIhskCBq6YPAQyKyTkQ2AYjIGPARyt23HwFbJYjCGidw4CajUeL1\nvR54OLxHDwA3hJFBlwNbgUdL1KWyuonI20RkFCDs/W4lcPL2sm42Uv+3TdcrrM/6cHsT8B7gJxXV\ny06vvd15hMAueQg4AhwENob7Z4G7w+0bgTPA4zG5MvzuYeApgpd0AZhqUd2uIHhhl4FvAut7Va/w\n8/eAF4HXCWyeH2rDPcuoWy33LGfdbg6vvwzcFO6bBB4DngSeAfZSMhIIuA74e4Ke4e5w3+eB3wm3\nzwvvwXJ4T66IHbs7PO4w8C9reC8L1Q34V+H9eRz4MfDRBur2z8Jn6jWCEdYzrv9t0/UC/nn4Pj4R\n/v101fcsTXTms6IoitJF201JiqIoSo9RxaAoiqJ0oYpBURRF6UIVg6IoitKFKgZFURSlC1UMiqIo\nSheqGBRFUZQuVDEoiqIoXfw/+DLFqmmRkU8AAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x12941b588>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"freq = 10\n",
"new_samples = []\n",
"for i in range(int(samples.shape[0] / freq))[100:]:#[400:]:\n",
" new_samples.append(samples[i * freq][None, :])\n",
"new_samples = np.vstack(new_samples)\n",
"plt.plot(new_samples[:, 0], new_samples[:, 1], 'bo')\n",
"plt.plot(mn[0] ,mn[1], 'ro')"
]
},
{
"cell_type": "code",
"execution_count": 1137,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x1295a0b38>]"
]
},
"execution_count": 1137,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1295a0ba8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"start_from=0\n",
"plus = 100\n",
"plt.plot(samples[start_from:start_from+plus, 0], samples[start_from:start_from+plus, 1], 'bo')\n",
"plt.plot(mn[0] ,mn[1], 'ro')"
]
}
],
"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.6.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment