Skip to content

Instantly share code, notes, and snippets.

@shotahorii
Created April 23, 2019 17:10
Show Gist options
  • Save shotahorii/68e523d2afa6f4ddb19581ae990c1ec9 to your computer and use it in GitHub Desktop.
Save shotahorii/68e523d2afa6f4ddb19581ae990c1ec9 to your computer and use it in GitHub Desktop.
Eigen Vector
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Eigen Vector and Eigen Value\n",
"**固有ベクトルと固有値の定義**"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"任意の行列$${\\bf A}$$に対して以下が成り立つ$${\\bf 0}$$でないベクトル$${\\bf u}$$を行列$${\\bf A}$$\n",
"の固有ベクトル、$$\\lambda$$をその固有値と呼ぶ。\n",
"<br><br>\n",
"$${\\bf A}{\\bf u} = \\lambda {\\bf u}$$"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"任意の行列$${\\bf A}$$に対して以下が成り立つ$${\\bf 0}$$でないベクトル$${\\bf u}$$を行列$${\\bf A}$$\n",
"の固有ベクトル、$$\\lambda$$をその固有値と呼ぶ。\n",
"<br><br>\n",
"$${\\bf A}{\\bf u} = \\lambda {\\bf u}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**行列Aが対称行列の場合**"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"特に、行列$${\\bf A}$$が$$n × n$$対称行列のとき、$${\\bf A}$$は$$n$$個の実数の固有値$$\\lambda_1, \n",
"\\lambda_2,...,\\lambda_n$$を持ち、対応する固有ベクトル$${\\bf u}_1,{\\bf u}_2,...,{\\bf u}_n$$\n",
"は要素が全て実数の互いに直交する単位ベクトルとなるように選べる。\n",
"(すなわち、対応する実数の固有ベクトルからなる正規直交系$$\\{{\\bf u}_1,{\\bf u}_2,...,{\\bf u}_n\\}$$\n",
"が存在する。)\n",
"<br><br>\n",
"-----<br>\n",
"ベクトル$${\\bf u}_1,{\\bf u}_2,...,{\\bf u}_n$$が互いに直交する単位ベクトルであることを式で表すと以下。\n",
"<br><br>\n",
"$$({\\bf u}_i,{\\bf u}_j) = \\delta_{ij}$$\n",
"<br><br>\n",
"ここで、$$\\delta_{ij}$$はクロネッカのデルタと呼ばれ$$i=j$$のとき$$1$$,$$i \\neq j$$のとき$$0$$である。\n",
"<br>-----"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"特に、行列$${\\bf A}$$が$$n × n$$対称行列のとき、$${\\bf A}$$は$$n$$個の実数の固有値$$\\lambda_1, \n",
"\\lambda_2,...,\\lambda_n$$を持ち、対応する固有ベクトル$${\\bf u}_1,{\\bf u}_2,...,{\\bf u}_n$$\n",
"は要素が全て実数の互いに直交する単位ベクトルとなるように選べる。\n",
"(すなわち、対応する実数の固有ベクトルからなる正規直交系$$\\{{\\bf u}_1,{\\bf u}_2,...,{\\bf u}_n\\}$$\n",
"が存在する。)\n",
"<br><br>\n",
"-----<br>\n",
"ベクトル$${\\bf u}_1,{\\bf u}_2,...,{\\bf u}_n$$が互いに直交する単位ベクトルであることを式で表すと以下。\n",
"<br><br>\n",
"$$({\\bf u}_i,{\\bf u}_j) = \\delta_{ij}$$\n",
"<br><br>\n",
"ここで、$$\\delta_{ij}$$はクロネッカのデルタと呼ばれ$$i=j$$のとき$$1$$,$$i \\neq j$$のとき$$0$$である。\n",
"<br>-----"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"上の固有ベクトル(と固有値)の定義式は以下のように書き換えられる。\n",
"<br><br>\n",
"$$(\\lambda {\\bf I} - {\\bf A}){\\bf u} = {\\bf 0}$$\n",
"<br><br>\n",
"ベクトル$${\\bf u}$$を未知数とする連立一次方程式は明らかに$${\\bf u} = {\\bf 0}$$を解にもつが、\n",
"定義より固有ベクトルは零ベクトルではないので、固有ベクトルが存在するためには係数行列の行列式が0でなければならない。\n",
"つまり以下である。\n",
"<br><br>\n",
"$$|\\lambda {\\bf I} - {\\bf A}|=0$$\n",
"<br><br>\n",
"これは$$\\lambda$$のn次方程式であり、これを固有方程式(あるいは特性方程式)と呼ぶ。\n",
"これを解くことでn個の固有値$$\\lambda_1,\\lambda_2,...,\\lambda_n$$が得られ(いくつかの重解が含まれる場合もある)\n",
"、各$$\\lambda_i$$を上の連立一次方程式に代入して解けばn個の固有ベクトル$${\\bf u}_1,{\\bf u}_2,...,{\\bf u}_n$$\n",
"が得られる。"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"上の固有ベクトル(と固有値)の定義式は以下のように書き換えられる。\n",
"<br><br>\n",
"$$(\\lambda {\\bf I} - {\\bf A}){\\bf u} = {\\bf 0}$$\n",
"<br><br>\n",
"ベクトル$${\\bf u}$$を未知数とする連立一次方程式は明らかに$${\\bf u} = {\\bf 0}$$を解にもつが、\n",
"定義より固有ベクトルは零ベクトルではないので、固有ベクトルが存在するためには係数行列の行列式が0でなければならない。\n",
"つまり以下である。\n",
"<br><br>\n",
"$$|\\lambda {\\bf I} - {\\bf A}|=0$$\n",
"<br><br>\n",
"これは$$\\lambda$$のn次方程式であり、これを固有方程式(あるいは特性方程式)と呼ぶ。\n",
"これを解くことでn個の固有値$$\\lambda_1,\\lambda_2,...,\\lambda_n$$が得られ(いくつかの重解が含まれる場合もある)\n",
"、各$$\\lambda_i$$を上の連立一次方程式に代入して解けばn個の固有ベクトル$${\\bf u}_1,{\\bf u}_2,...,{\\bf u}_n$$\n",
"が得られる。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**直交化** \n",
"対称行列の異なる固有値に対応する固有ベクトルは必ず直交する。このため、対称行列において固有方程式の解に重解がなくn個の異なる固有値が得られた場合、単純に各固有値を連立一次方程式に代入して解けば直交系が得られる。 \n",
"しかし、重解がある場合にはある一つの固有値の値を代入した連立一次方程式から、複数の直交する固有ベクトルを選び出す必要がある。 \n",
"この時、直交する複数のベクトルを得るために**グラムシュミットの直交化**という手法を用いる。このやり方を「これなら分かる最適化数学」p26の例題1.24を噛み砕いて記す。"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"以下の行列の固有値と単位固有ベクトルを求めたい。\n",
"<br><br>\n",
"$$\n",
"{\\bf A} = \n",
" \\left(\n",
" \\begin{array}{ccc}\n",
" 4 & -1 & 1 \\\\\n",
" -1 & 4 & -1\\\\\n",
" 1 & -1 & 4\\\\\n",
" \\end{array}\n",
" \\right)\n",
"$$\n",
"<br><br>\n",
"定義より、以下の固有方程式を解く。\n",
"<br><br>\n",
"$$|\\lambda {\\bf I} - {\\bf A}|=0$$\n",
"<br><br>\n",
"ここの計算はただの行列式の計算($$\\lambda$$の三次式の計算)なので省略するが、解$$\\lambda = 6,3,3$$(3は重解)を得る。"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"以下の行列の固有値と単位固有ベクトルを求めたい。\n",
"<br><br>\n",
"$$\n",
"{\\bf A} = \n",
" \\left(\n",
" \\begin{array}{ccc}\n",
" 4 & -1 & 1 \\\\\n",
" -1 & 4 & -1\\\\\n",
" 1 & -1 & 4\\\\\n",
" \\end{array}\n",
" \\right)\n",
"$$\n",
"<br><br>\n",
"定義より、以下の固有方程式を解く。\n",
"<br><br>\n",
"$$|\\lambda {\\bf I} - {\\bf A}|=0$$\n",
"<br><br>\n",
"ここの計算はただの行列式の計算($$\\lambda$$の三次式の計算)なので省略するが、解$$\\lambda = 6,3,3$$(3は重解)を得る。"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"この固有値$$\\lambda_1=6,\\lambda_2=3,\\lambda_3=3$$を用いて固有ベクトル$${\\bf u}_1,{\\bf u}_2,{\\bf u}_3\n",
"$$を求めていく。\n",
"<br><br>\n",
"まず、$$\\lambda=6$$の場合は簡単。定義より、以下の式に$$\\lambda=6$$を代入して連立方程式を解けばよい。\n",
"<br><br>\n",
"$$(\\lambda {\\bf I} - {\\bf A}){\\bf u} = {\\bf 0}$$\n",
"<br><br>\n",
"得られたベクトルを正規化(単位ベクトルに変換)し、以下を得る。\n",
"<br><br>\n",
"$${\\bf u}_1 = (\\frac{1}{\\sqrt{3}},-\\frac{1}{\\sqrt{3}},\\frac{1}{\\sqrt{3}})^T$$"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"この固有値$$\\lambda_1=6,\\lambda_2=3,\\lambda_3=3$$を用いて固有ベクトル$${\\bf u}_1,{\\bf u}_2,{\\bf u}_3\n",
"$$を求めていく。\n",
"<br><br>\n",
"まず、$$\\lambda=6$$の場合は簡単。定義より、以下の式に$$\\lambda=6$$を代入して連立方程式を解けばよい。\n",
"<br><br>\n",
"$$(\\lambda {\\bf I} - {\\bf A}){\\bf u} = {\\bf 0}$$\n",
"<br><br>\n",
"得られたベクトルを正規化(単位ベクトルに変換)し、以下を得る。\n",
"<br><br>\n",
"$${\\bf u}_1 = (\\frac{1}{\\sqrt{3}},-\\frac{1}{\\sqrt{3}},\\frac{1}{\\sqrt{3}})^T$$"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"次が問題である。$$\\lambda=3$$の場合。ここから二つの直交する固有ベクトル$${\\bf u}_2,{\\bf u}_3$$を得たい。\n",
"<br><br>\n",
"まず、定義より連立方程式$$(\\lambda {\\bf I} - {\\bf A}){\\bf u} = {\\bf 0}$$に$$\\lambda=3\n",
"$$を代入する。$${\\bf u} = (u_1,u_2,u_3)^T$$とすると、以下の方程式が得られる。\n",
"<br><br>\n",
"$$u_1-u_2+u_3=0$$\n",
"<br><br>\n",
"まずは、これに適当な値を入れて一つ目の固有ベクトルを算出する。例えば、$$u_3=0,u_1=1$$とすると$$u_2=1\n",
"$$となり以下が得られる。\n",
"<br><br>\n",
"$${\\bf u} = (1,1,0)^T$$\n",
"<br><br>\n",
"-----<br>\n",
"ここで、「対称行列の異なる固有値に対応する固有ベクトルは必ず直交する」ので、この得られた$${\\bf u}$$と上で得た$${\\bf u}_1\n",
"$$が直交することはわかっている。(試しに内積を計算すると0になる。)\n",
"<br>-----\n",
"<br><br>\n",
"次に、また別の適当な値を方程式に入れて次の固有ベクトルを算出する。例えば$$u_3=1,u_2=0$$とすると$$u_1=-1\n",
"$$となり以下が得られる。\n",
"<br><br>\n",
"$${\\bf u}' = (-1,0,1)^T$$\n",
"<br><br>\n",
"このベクトルも、$${\\bf u}_1$$と直交することはわかっている、が、すぐ上で求めた$${\\bf u} = (1,1,0)^T\n",
"$$と直交するとは限らない。実際に、内積を計算してみると-1となり、直交しないことがわかる。"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"次が問題である。$$\\lambda=3$$の場合。ここから二つの直交する固有ベクトル$${\\bf u}_2,{\\bf u}_3$$を得たい。\n",
"<br><br>\n",
"まず、定義より連立方程式$$(\\lambda {\\bf I} - {\\bf A}){\\bf u} = {\\bf 0}$$に$$\\lambda=3\n",
"$$を代入する。$${\\bf u} = (u_1,u_2,u_3)^T$$とすると、以下の方程式が得られる。\n",
"<br><br>\n",
"$$u_1-u_2+u_3=0$$\n",
"<br><br>\n",
"まずは、これに適当な値を入れて一つ目の固有ベクトルを算出する。例えば、$$u_3=0,u_1=1$$とすると$$u_2=1\n",
"$$となり以下が得られる。\n",
"<br><br>\n",
"$${\\bf u} = (1,1,0)^T$$\n",
"<br><br>\n",
"-----<br>\n",
"ここで、「対称行列の異なる固有値に対応する固有ベクトルは必ず直交する」ので、この得られた$${\\bf u}$$と上で得た$${\\bf u}_1\n",
"$$が直交することはわかっている。(試しに内積を計算すると0になる。)\n",
"<br>-----\n",
"<br><br>\n",
"次に、また別の適当な値を方程式に入れて次の固有ベクトルを算出する。例えば$$u_3=1,u_2=0$$とすると$$u_1=-1\n",
"$$となり以下が得られる。\n",
"<br><br>\n",
"$${\\bf u}' = (-1,0,1)^T$$\n",
"<br><br>\n",
"このベクトルも、$${\\bf u}_1$$と直交することはわかっている、が、すぐ上で求めた$${\\bf u} = (1,1,0)^T\n",
"$$と直交するとは限らない。実際に、内積を計算してみると-1となり、直交しないことがわかる。"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"さて、ここからがグラムシュミットの直交化の出番である。<br>\n",
"ここまでの状況を整理する。今手元にあるのは、二つの固有ベクトル$${\\bf u},{\\bf u}'\n",
"$$で、これらは直交してはいないが線形独立ではある。<br>\n",
"で、ここから何を得たいか。<br>\n",
"一つ目の固有ベクトル$${\\bf u}$$はこのまま使うとして、今手元にあるものを用いてこれと直交する固有ベクトル$${\\bf u}''\n",
"$$を得たい。<br><br>\n",
"では、このベクトル$${\\bf u}''$$はどんなベクトルでなければならないか。まず、大前提として$${\\bf A}\n",
"$$の固有ベクトルである必要があるので、$$(\\lambda {\\bf I} - {\\bf A}){\\bf u}'' = {\\bf 0}\n",
"$$は満たさなければならない。(<b>要件1</b>)<br>\n",
"また、$${\\bf u}''$$は$${\\bf u}$$と直交していなければならない。すなわち$$({\\bf u},{\\bf u}'')=0\n",
"$$(<b>要件2</b>)\n",
"<br><br>\n",
"まず、要件1を満たすため、$${\\bf u}''$$を$${\\bf u}$$と$${\\bf u}'$$の線形結合で表すことにする。<br>\n",
"そうすれば$${\\bf u}''$$は必ず$$(\\lambda {\\bf I} - {\\bf A}){\\bf u}'' = {\\bf 0}\n",
"$$を満たすからである。理由は以下。\n",
"<br><br>\n",
"-----<br>\n",
"$$(\\lambda {\\bf I} - {\\bf A}){\\bf u}'' = {\\bf 0}$$<br>\n",
"$$(\\lambda {\\bf I} - {\\bf A})(c_1{\\bf u}' + c_2{\\bf u}) = {\\bf 0}$$<br>\n",
"ここで、$$c_1,c_2$$は任意の定数。<br>\n",
"$$c_1(\\lambda {\\bf I} - {\\bf A}){\\bf u}' + c_2(\\lambda {\\bf I} - {\\bf A}){\\bf u} = {\\bf 0}$$<br>\n",
"$$c_1{\\bf 0}+c_2{\\bf 0} = {\\bf 0}$$<br>\n",
"となり、必ず$$(\\lambda {\\bf I} - {\\bf A}){\\bf u}'' = {\\bf 0}$$を満たすことが分かる。\n",
"<br>-----\n",
"<br><br>\n",
"ここでは以下とする。<br><br>\n",
"$${\\bf u}'' = {\\bf u}' - c{\\bf u}$$"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"さて、ここからがグラムシュミットの直交化の出番である。<br>\n",
"ここまでの状況を整理する。今手元にあるのは、二つの固有ベクトル$${\\bf u},{\\bf u}'\n",
"$$で、これらは直交してはいないが線形独立ではある。<br>\n",
"で、ここから何を得たいか。<br>\n",
"一つ目の固有ベクトル$${\\bf u}$$はこのまま使うとして、今手元にあるものを用いてこれと直交する固有ベクトル$${\\bf u}''\n",
"$$を得たい。<br><br>\n",
"では、このベクトル$${\\bf u}''$$はどんなベクトルでなければならないか。まず、大前提として$${\\bf A}\n",
"$$の固有ベクトルである必要があるので、$$(\\lambda {\\bf I} - {\\bf A}){\\bf u}'' = {\\bf 0}\n",
"$$は満たさなければならない。(<b>要件1</b>)<br>\n",
"また、$${\\bf u}''$$は$${\\bf u}$$と直交していなければならない。すなわち$$({\\bf u},{\\bf u}'')=0\n",
"$$(<b>要件2</b>)\n",
"<br><br>\n",
"まず、要件1を満たすため、$${\\bf u}''$$を$${\\bf u}$$と$${\\bf u}'$$の線形結合で表すことにする。<br>\n",
"そうすれば$${\\bf u}''$$は必ず$$(\\lambda {\\bf I} - {\\bf A}){\\bf u}'' = {\\bf 0}\n",
"$$を満たすからである。理由は以下。\n",
"<br><br>\n",
"-----<br>\n",
"$$(\\lambda {\\bf I} - {\\bf A}){\\bf u}'' = {\\bf 0}$$<br>\n",
"$$(\\lambda {\\bf I} - {\\bf A})(c_1{\\bf u}' + c_2{\\bf u}) = {\\bf 0}$$<br>\n",
"ここで、$$c_1,c_2$$は任意の定数。<br>\n",
"$$c_1(\\lambda {\\bf I} - {\\bf A}){\\bf u}' + c_2(\\lambda {\\bf I} - {\\bf A}){\\bf u} = {\\bf 0}$$<br>\n",
"$$c_1{\\bf 0}+c_2{\\bf 0} = {\\bf 0}$$<br>\n",
"となり、必ず$$(\\lambda {\\bf I} - {\\bf A}){\\bf u}'' = {\\bf 0}$$を満たすことが分かる。\n",
"<br>-----\n",
"<br><br>\n",
"ここでは以下とする。<br><br>\n",
"$${\\bf u}'' = {\\bf u}' - c{\\bf u}$$"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"次に、要件2を満たすため、$$({\\bf u},{\\bf u}'')=0$$を満たすような$$c$$を算出する。すなわち\n",
"<br><br>\n",
"$$({\\bf u},{\\bf u}'') = ({\\bf u},{\\bf u}'-c{\\bf u}) = ({\\bf u},{\\bf u}') - c({\\bf u},{\\bf u})=0$$\n",
"<br><br>\n",
"計算して、以下を得る。\n",
"<br><br>\n",
"$$-1-2c=0$$<br>\n",
"$$c=-\\frac{1}{2}$$\n",
"<br><br>\n",
"これを$${\\bf u}'' = {\\bf u}' - c{\\bf u}$$に代入して$${\\bf u}''$$を得る。\n",
"<br><br>\n",
"$${\\bf u}'' = (-\\frac{1}{2},\\frac{1}{2},1)^T$$\n",
"<br><br>\n",
"最後に、$${\\bf u}, {\\bf u}''$$をそれぞれ正規化して以下の単位固有ベクトルを得る。\n",
"<br><br>\n",
"$${\\bf u}_2 = (\\frac{1}{\\sqrt{2}},\\frac{1}{\\sqrt{2}},0)^T$$<br>\n",
"$${\\bf u}_3 = (-\\frac{1}{\\sqrt{6}},\\frac{1}{\\sqrt{6}},\\frac{2}{\\sqrt{6}})^T$$\n",
"<br><br>\n",
"これで、三つの直交する単位固有ベクトル$${\\bf u}_1,{\\bf u}_2,{\\bf u}_3$$が求まった。"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"次に、要件2を満たすため、$$({\\bf u},{\\bf u}'')=0$$を満たすような$$c$$を算出する。すなわち\n",
"<br><br>\n",
"$$({\\bf u},{\\bf u}'') = ({\\bf u},{\\bf u}'-c{\\bf u}) = ({\\bf u},{\\bf u}') - c({\\bf u},{\\bf u})=0$$\n",
"<br><br>\n",
"計算して、以下を得る。\n",
"<br><br>\n",
"$$-1-2c=0$$<br>\n",
"$$c=-\\frac{1}{2}$$\n",
"<br><br>\n",
"これを$${\\bf u}'' = {\\bf u}' - c{\\bf u}$$に代入して$${\\bf u}''$$を得る。\n",
"<br><br>\n",
"$${\\bf u}'' = (-\\frac{1}{2},\\frac{1}{2},1)^T$$\n",
"<br><br>\n",
"最後に、$${\\bf u}, {\\bf u}''$$をそれぞれ正規化して以下の単位固有ベクトルを得る。\n",
"<br><br>\n",
"$${\\bf u}_2 = (\\frac{1}{\\sqrt{2}},\\frac{1}{\\sqrt{2}},0)^T$$<br>\n",
"$${\\bf u}_3 = (-\\frac{1}{\\sqrt{6}},\\frac{1}{\\sqrt{6}},\\frac{2}{\\sqrt{6}})^T$$\n",
"<br><br>\n",
"これで、三つの直交する単位固有ベクトル$${\\bf u}_1,{\\bf u}_2,{\\bf u}_3$$が求まった。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"上で行ったように、線形独立な複数のベクトルから直交する複数のベクトルを得る方法をグラムシュミットの直交化というが、一般化した説明は別の記事で詳しく記すことにする。"
]
}
],
"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"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment