Skip to content

Instantly share code, notes, and snippets.

@haltingstate
Created February 26, 2014 03:14
Show Gist options
  • Save haltingstate/9222863 to your computer and use it in GitHub Desktop.
Save haltingstate/9222863 to your computer and use it in GitHub Desktop.
{
"metadata": {
"name": "ltc_btc_rbf"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": "%matplotlib inline\n%load_ext gist",
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "ImportError",
"evalue": "No module named gist",
"output_type": "pyerr",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mImportError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-22-65df69fab6a2>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mu'matplotlib inline'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mget_ipython\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mu'load_ext gist'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.pyc\u001b[0m in \u001b[0;36mmagic\u001b[1;34m(self, arg_s)\u001b[0m\n\u001b[0;32m 2163\u001b[0m \u001b[0mmagic_name\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmagic_arg_s\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0marg_s\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpartition\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m' '\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2164\u001b[0m \u001b[0mmagic_name\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmagic_name\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlstrip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mprefilter\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mESC_MAGIC\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2165\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun_line_magic\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmagic_name\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmagic_arg_s\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2166\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2167\u001b[0m \u001b[1;31m#-------------------------------------------------------------------------\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.pyc\u001b[0m in \u001b[0;36mrun_line_magic\u001b[1;34m(self, magic_name, line)\u001b[0m\n\u001b[0;32m 2084\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'local_ns'\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msys\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_getframe\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstack_depth\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mf_locals\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2085\u001b[0m \u001b[1;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbuiltin_trap\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2086\u001b[1;33m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2087\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2088\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/usr/local/lib/python2.7/dist-packages/IPython/core/magics/extension.pyc\u001b[0m in \u001b[0;36mload_ext\u001b[1;34m(self, module_str)\u001b[0m\n",
"\u001b[1;32m/usr/local/lib/python2.7/dist-packages/IPython/core/magic.pyc\u001b[0m in \u001b[0;36m<lambda>\u001b[1;34m(f, *a, **k)\u001b[0m\n\u001b[0;32m 189\u001b[0m \u001b[1;31m# but it's overkill for just that one bit of state.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 190\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mmagic_deco\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 191\u001b[1;33m \u001b[0mcall\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mlambda\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 192\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 193\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mcallable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/usr/local/lib/python2.7/dist-packages/IPython/core/magics/extension.pyc\u001b[0m in \u001b[0;36mload_ext\u001b[1;34m(self, module_str)\u001b[0m\n\u001b[0;32m 60\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mmodule_str\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 61\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mUsageError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'Missing module name.'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 62\u001b[1;33m \u001b[0mres\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshell\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mextension_manager\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mload_extension\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmodule_str\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 63\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 64\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mres\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m'already loaded'\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/usr/local/lib/python2.7/dist-packages/IPython/core/extensions.pyc\u001b[0m in \u001b[0;36mload_extension\u001b[1;34m(self, module_str)\u001b[0m\n\u001b[0;32m 96\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mmodule_str\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[0msys\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmodules\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 97\u001b[0m \u001b[1;32mwith\u001b[0m \u001b[0mprepended_to_syspath\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mipython_extension_dir\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 98\u001b[1;33m \u001b[0m__import__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmodule_str\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 99\u001b[0m \u001b[0mmod\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msys\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmodules\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mmodule_str\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 100\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_call_load_ipython_extension\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmod\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mImportError\u001b[0m: No module named gist"
]
}
],
"prompt_number": 22
},
{
"cell_type": "code",
"collapsed": false,
"input": "from pandas import *\nimport pandas as pd\n\nimport matplotlib.pyplot as plt\n\n# read data from data file into a pandas DataFrame \n'''\ndata = read_csv(\"https://dl.dropboxusercontent.com/u/21517274/img/bitcoin.csv\", # name of the data file\n sep=\"\\t\", # what character separates each column?\n na_values=[\"\", \" \"]) # what values should be considered \"blank\" values?\n'''\n\ndata = read_csv(\"/home/atomos/test/litecoin_rbf/litecoin.csv\", # name of the data file\n sep=\",\", # what character separates each column?\n na_values=[\"\", \" \"]) # what values should be considered \"blank\" values?\n\n\n\ndf = data\ndf.replace([np.inf, -np.inf], np.nan)\n#df.replace([np.inf, -np.inf], np.nan).dropna(subset=[\"Open\", \"WeightedPrice\"], how=\"all\")\ndata = df\n\nprint \"done\"",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "done\n"
},
{
"output_type": "stream",
"stream": "stderr",
"text": "/home/atomos/.virtualenvs/py27/lib/python2.7/site-packages/pytz/__init__.py:29: UserWarning: Module zmq was already imported from /usr/local/lib/python2.7/dist-packages/zmq/__init__.pyc, but /home/atomos/.virtualenvs/py27/lib/python2.7/site-packages is being added to sys.path\n from pkg_resources import resource_stream\n/home/atomos/.virtualenvs/py27/lib/python2.7/site-packages/pytz/__init__.py:29: UserWarning: Module tornado was already imported from /usr/local/lib/python2.7/dist-packages/tornado/__init__.pyc, but /home/atomos/.virtualenvs/py27/lib/python2.7/site-packages is being added to sys.path\n from pkg_resources import resource_stream\n"
}
],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": "data",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<pre>\n&lt;class 'pandas.core.frame.DataFrame'&gt;\nInt64Index: 589 entries, 0 to 588\nData columns (total 6 columns):\ndate 589 non-null values\nLow (BTC) 589 non-null values\nHigh (BTC) 589 non-null values\nopen 589 non-null values\nclose 589 non-null values\nvolume (LTC) 589 non-null values\ndtypes: float64(5), object(1)\n</pre>",
"metadata": {},
"output_type": "pyout",
"prompt_number": 9,
"text": "<class 'pandas.core.frame.DataFrame'>\nInt64Index: 589 entries, 0 to 588\nData columns (total 6 columns):\ndate 589 non-null values\nLow (BTC) 589 non-null values\nHigh (BTC) 589 non-null values\nopen 589 non-null values\nclose 589 non-null values\nvolume (LTC) 589 non-null values\ndtypes: float64(5), object(1)"
}
],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": "data[\"date\"]\n",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 11,
"text": "0 2012-07-15\n1 2012-07-16\n2 2012-07-17\n3 2012-07-18\n4 2012-07-19\n5 2012-07-20\n6 2012-07-21\n7 2012-07-22\n8 2012-07-23\n9 2012-07-24\n10 2012-07-25\n11 2012-07-26\n12 2012-07-27\n13 2012-07-28\n14 2012-07-29\n...\n574 2014-02-11\n575 2014-02-12\n576 2014-02-13\n577 2014-02-14\n578 2014-02-15\n579 2014-02-16\n580 2014-02-17\n581 2014-02-18\n582 2014-02-19\n583 2014-02-20\n584 2014-02-21\n585 2014-02-22\n586 2014-02-23\n587 2014-02-24\n588 2014-02-25\nName: date, Length: 589, dtype: object"
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": "data.plot(y=\"open\")\nplt.show()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nm/fC4QAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x334bb50>"
}
],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": "ltc_histt = data[\"open\"]\nltc_histt\n\nltc_hist = []\nfor i in range(0, len(ltc_histt)):\n ltc_hist.append(ltc_histt[i])\n \n#ltc_hist",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": "#time lagged n tuple\ndef tup(din, degree):\n l = []\n for i in range (0, len(din)-degree):\n lt = []\n for j in range(0,degree+1):\n lt.append(din[i+j])\n l.append(lt)\n return l\n\nl = [0,1,2,3,4,5,6,7,8]\ntup(l, 3)\n\n\ndef dtup(din):\n l = []\n degree = len(din[0])\n for i in range(0, degree):\n l.append([])\n for i in range(0, degree): \n for e in din:\n l[i].append(float(e[i]))\n return l\n",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": "tup(l,6)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 78,
"text": "[[0, 1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7], [2, 3, 4, 5, 6, 7, 8]]"
}
],
"prompt_number": 78
},
{
"cell_type": "code",
"collapsed": false,
"input": "dtup(tup(l,6))",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 79,
"text": "[[0.0, 1.0, 2.0],\n [1.0, 2.0, 3.0],\n [2.0, 3.0, 4.0],\n [3.0, 4.0, 5.0],\n [4.0, 5.0, 6.0],\n [5.0, 6.0, 7.0],\n [6.0, 7.0, 8.0]]"
}
],
"prompt_number": 79
},
{
"cell_type": "code",
"collapsed": false,
"input": "import scipy.interpolate\nimport numpy\n\nltc_tup1 = tup(ltc_hist, 4)\nltc_tup2 = dtup(ltc_tup1)\n\nargs = ltc_tup2\n\n#args = [x, y, z, d]\n#rbfi = Rbf(*args)\nrbfi = scipy.interpolate.Rbf(*args)\n\n#mean squared error\ndef mse_calc(din, rbfi):\n err = 0.0\n degree = len(din)\n #print din\n for e in din:\n args = e[:-1]\n v = rbfi(*args) #value\n v = numpy.float(v)\n #print v\n t = e[-1] #target value\n #print type(v), type(t)\n err += (v-t)*(v-t) # mean squared error\n #print v,t,(v-t)*(v-t)\n return err\n\n#mse(lct_tup1, rbfi)\n\n\n\n\n#data.plot(y=\"open\")\n#plt.show()\n\n\n\n#for dim in range(2,5):\nimport copy\n\ndef calc_mse(din, dim):\n din0 = copy.deepcopy(din)\n din1 = tup(din0, dim)\n din2 = dtup(din1)\n args = din2\n rbfi = scipy.interpolate.Rbf(*args)\n msev = mse_calc(din1, rbfi) #mean squared error\n #print type(msev)\n #print dim, msev\n return msev\n\n#for dim in range (2, 16):\n# print dim, calc_mse(ltc_hist,dim)\n\ndef mse_graph(din, rbfi):\n l = [[],[],[]]\n degree = len(din)\n #print din\n for i in range(0, len(din)):\n \n e = din[i]\n args = e[:-1]\n v = rbfi(*args) #predicted\n v = numpy.float(v) \n #print v\n t = e[-1] #target value\n #print type(v), type(t)\n #err += (v-t)*(v-t) # mean squared error\n #print v,t,(v-t)*(v-t)\n \n #l.append([i,t,v])\n l[0].append(i)\n l[1].append(t)\n l[2].append(v)\n return l\n\n\ndef plot_mse(din, dim):\n din0 = copy.deepcopy(din)\n din1 = tup(din0, dim)\n din2 = dtup(din1)\n args = din2\n rbfi = scipy.interpolate.Rbf(*args)\n dp = mse_graph(din1, rbfi) #data points\n #print type(msev)\n #print dim, msev\n \n #data.plot(dp[1])\n plt.plot(dp[0], dp[1], linewidth=1)\n #plt.hold(True)\n \n plt.plot(dp[0], dp[2], \"r\",linewidth=1)\n #data.plot(dp[2])\n plt.show()\n\n #return msev\n\nplot_mse(ltc_hist,6)\n ",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nAElFTkSuQmCC\n",
"text": "<matplotlib.figure.Figure at 0x43e6810>"
}
],
"prompt_number": 141
},
{
"cell_type": "code",
"collapsed": false,
"input": "import peach as p\n\nparam1 = 4 #number of clusters?\ndegree = 4 \nkm = p.KMeans(tup(ltc_hist, degree), param1)\n#print km\n\nprint len(km.c)\nx = p.nn.rbfn.RBFN(c=km.c)\n\ndef tup2(din, degree):\n l = []\n for i in range (0, len(din)-degree):\n lt = []\n for j in range(degree+1):\n lt.append(din[i+j])\n l.append((lt,[din[i+degree]]))\n return l\n\n#print tup2(ltc_hist, degree)\nt = tup2(ltc_hist, degree)\n\n#print t[0][0], t[0][1]\nx.feed(t[0][0], t[0][1])\n\n#x.learn(t[0][0], t[0][1])\n\n#x.feed(t[0][0], t[0][1])\n\n#x.train(tup2(ltc_hist, degree))\n",
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "ValueError",
"evalue": "total size of new array must be unchanged",
"output_type": "pyerr",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-180-9d28c6a58a83>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 28\u001b[0m \u001b[1;31m#x.feed(t[0][0], t[0][1])\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 29\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 30\u001b[1;33m \u001b[0mx\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtrain\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtup2\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mltc_hist\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdegree\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m/home/atomos/.virtualenvs/py27/lib/python2.7/site-packages/peach/nn/rbfn.pyc\u001b[0m in \u001b[0;36mtrain\u001b[1;34m(self, train_set, imax, emax, randomize)\u001b[0m\n\u001b[0;32m 277\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 278\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0md\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtrain_set\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m%\u001b[0m\u001b[0ms\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 279\u001b[1;33m \u001b[0merror\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfeed\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0md\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 280\u001b[0m \u001b[0mi\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mi\u001b[0m\u001b[1;33m+\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 281\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0merror\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/atomos/.virtualenvs/py27/lib/python2.7/site-packages/peach/nn/rbfn.pyc\u001b[0m in \u001b[0;36mfeed\u001b[1;34m(self, x, d)\u001b[0m\n\u001b[0;32m 236\u001b[0m '''\n\u001b[0;32m 237\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__phi\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m-\u001b[0m\u001b[0mci\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m/\u001b[0m\u001b[0mwi\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mci\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mwi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__c\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__w\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 238\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__l\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfeed\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0md\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 239\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 240\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/atomos/.virtualenvs/py27/lib/python2.7/site-packages/peach/nn/nnet.pyc\u001b[0m in \u001b[0;36mfeed\u001b[1;34m(self, x, d)\u001b[0m\n\u001b[0;32m 224\u001b[0m \u001b[0mThe\u001b[0m \u001b[0merror\u001b[0m \u001b[0mobtained\u001b[0m \u001b[0mby\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mnetwork\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 225\u001b[0m '''\n\u001b[1;32m--> 226\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 227\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlearn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0md\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 228\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/atomos/.virtualenvs/py27/lib/python2.7/site-packages/peach/nn/nnet.pyc\u001b[0m in \u001b[0;36m__call__\u001b[1;34m(self, x)\u001b[0m\n\u001b[0;32m 155\u001b[0m '''\n\u001b[0;32m 156\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mw\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 157\u001b[1;33m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mw\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 158\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 159\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/atomos/.virtualenvs/py27/lib/python2.7/site-packages/peach/nn/base.pyc\u001b[0m in \u001b[0;36m__call__\u001b[1;34m(self, x)\u001b[0m\n\u001b[0;32m 230\u001b[0m \u001b[1;31m# Adjusts the input vector in case the neuron is biased. Also, the\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 231\u001b[0m \u001b[1;31m# input vector is reshaped as a column-vector.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 232\u001b[1;33m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mreshape\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minputs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 233\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__bias\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 234\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mvstack\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_BIAS\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/atomos/.virtualenvs/py27/lib/python2.7/site-packages/numpy/core/fromnumeric.pyc\u001b[0m in \u001b[0;36mreshape\u001b[1;34m(a, newshape, order)\u001b[0m\n\u001b[0;32m 216\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mAttributeError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 217\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0m_wrapit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'reshape'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnewshape\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0morder\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0morder\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 218\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mreshape\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnewshape\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0morder\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0morder\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 219\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 220\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mValueError\u001b[0m: total size of new array must be unchanged"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": "4\n"
}
],
"prompt_number": 180
},
{
"cell_type": "code",
"collapsed": false,
"input": "def tup2(din, degree):\n l = []\n for i in range (0, len(din)-degree):\n lt = []\n for j in range(degree):\n lt.append(din[i+j])\n l.append((lt,[din[i+degree]]))\n return l\n\ndegree = 8\ndata = tup2(ltc_hist, degree)\n\nfrom pybrain.structure import FeedForwardNetwork\nn = FeedForwardNetwork()\n\nfrom pybrain.structure import LinearLayer, SigmoidLayer\ninLayer = LinearLayer(degree)\nhiddenLayer = SigmoidLayer(3)\noutLayer = LinearLayer(1) #LinearLayer(2, name=\"foo\")\n\nn.addInputModule(inLayer)\nn.addModule(hiddenLayer)\nn.addOutputModule(outLayer)\n\nfrom pybrain.structure import FullConnection\nin_to_hidden = FullConnection(inLayer, hiddenLayer)\nhidden_to_out = FullConnection(hiddenLayer, outLayer)\n\nn.addConnection(in_to_hidden)\nn.addConnection(hidden_to_out)\n\nn.sortModules()\n\n#n.activate(data[0][0])\n#in_to_hidden.params\n#hidden_to_out.params\n#n.params\n#n.reset()\n\nfrom pybrain.supervised.trainers import BackpropTrainer\n\n#setup dataset\nfrom pybrain.datasets import SupervisedDataSet\ndata_set = SupervisedDataSet(degree, 1) #inputs, outputs\nfor e in data:\n data_set.addSample(e[0],e[1])\n \ntrainer = BackpropTrainer(n, data_set)\n\n# ds['input']\n# ds['target']\n\nfor i in range(16):\n print i,trainer.train()\n",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "0 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.0282852063528\n1 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.000117170515172\n2 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.000112925120862\n3 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.000112509522619\n4 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.00011222528673\n5 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.000111862553763\n6 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.000111576182576\n7 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.00011109849931\n8 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.00011088262984\n9 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.000110659443523\n10 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.000110030408013\n11 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.000110142262504\n12 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.000109732055491\n13 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.000109332698272\n14 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.000108839900558\n15 "
},
{
"output_type": "stream",
"stream": "stdout",
"text": "0.000108730701869\n"
}
],
"prompt_number": 16
},
{
"cell_type": "code",
"collapsed": false,
"input": "def plot_data(dp):\n plt.plot(dp[0], dp[1], linewidth=1)\n #plt.hold(True)\n plt.plot(dp[0], dp[2], \"r\",linewidth=1)\n plt.show()\n \nli = []\nfor i,e in enumerate(data):\n #print e\n t = e[1] #target\n p = n.activate(e[0]) #predicted\n li.append((i,t,p))\n \nplot_data(li)",
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "ValueError",
"evalue": "setting an array element with a sequence.",
"output_type": "pyerr",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-21-71d290be3806>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 12\u001b[0m \u001b[0mli\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mt\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 14\u001b[1;33m \u001b[0mplot_data\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mli\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m<ipython-input-21-71d290be3806>\u001b[0m in \u001b[0;36mplot_data\u001b[1;34m(dp)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mplot_data\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdp\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdp\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdp\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlinewidth\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[1;31m#plt.hold(True)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdp\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdp\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"r\"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mlinewidth\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/atomos/.virtualenvs/py27/lib/python2.7/site-packages/matplotlib/pyplot.pyc\u001b[0m in \u001b[0;36mplot\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 2985\u001b[0m \u001b[0max\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhold\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mhold\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2986\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2987\u001b[1;33m \u001b[0mret\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0max\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2988\u001b[0m \u001b[0mdraw_if_interactive\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2989\u001b[0m \u001b[1;32mfinally\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/atomos/.virtualenvs/py27/lib/python2.7/site-packages/matplotlib/axes.pyc\u001b[0m in \u001b[0;36mplot\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 4135\u001b[0m \u001b[0mlines\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4136\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 4137\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0mline\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_get_lines\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4138\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0madd_line\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mline\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4139\u001b[0m \u001b[0mlines\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mline\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/atomos/.virtualenvs/py27/lib/python2.7/site-packages/matplotlib/axes.pyc\u001b[0m in \u001b[0;36m_grab_next_args\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 315\u001b[0m \u001b[1;32mreturn\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 316\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mremaining\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m<=\u001b[0m \u001b[1;36m3\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 317\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0mseg\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_plot_args\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mremaining\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 318\u001b[0m \u001b[1;32myield\u001b[0m \u001b[0mseg\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 319\u001b[0m \u001b[1;32mreturn\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/atomos/.virtualenvs/py27/lib/python2.7/site-packages/matplotlib/axes.pyc\u001b[0m in \u001b[0;36m_plot_args\u001b[1;34m(self, tup, kwargs)\u001b[0m\n\u001b[0;32m 286\u001b[0m \u001b[0mkw\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mv\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 287\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 288\u001b[1;33m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0matleast_1d\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtup\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 289\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 290\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtup\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;36m2\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/atomos/.virtualenvs/py27/lib/python2.7/site-packages/numpy/core/shape_base.pyc\u001b[0m in \u001b[0;36matleast_1d\u001b[1;34m(*arys)\u001b[0m\n\u001b[0;32m 47\u001b[0m \u001b[0mres\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 48\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mary\u001b[0m \u001b[1;32min\u001b[0m \u001b[0marys\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 49\u001b[1;33m \u001b[0mary\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0masanyarray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mary\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 50\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mary\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;36m0\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 51\u001b[0m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mary\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/atomos/.virtualenvs/py27/lib/python2.7/site-packages/numpy/core/numeric.pyc\u001b[0m in \u001b[0;36masanyarray\u001b[1;34m(a, dtype, order)\u001b[0m\n\u001b[0;32m 510\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 511\u001b[0m \"\"\"\n\u001b[1;32m--> 512\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mFalse\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0morder\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0morder\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msubok\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 513\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 514\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mascontiguousarray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mValueError\u001b[0m: setting an array element with a sequence."
]
}
],
"prompt_number": 21
},
{
"cell_type": "code",
"collapsed": false,
"input": "",
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment