Skip to content

Instantly share code, notes, and snippets.

@kiwamizamurai
Created December 9, 2018 11:24
Show Gist options
  • Save kiwamizamurai/1949208e53ab8cbbbb76a17b47b86e99 to your computer and use it in GitHub Desktop.
Save kiwamizamurai/1949208e53ab8cbbbb76a17b47b86e99 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 基底と座標と対角化"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"import seaborn as sns\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/Jin/anaconda/envs/py35/lib/python3.5/site-packages/ipykernel/__main__.py:4: RuntimeWarning: covariance is not positive-semidefinite.\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mu = [8, -7]\n",
"cov = [[3,2.3], [1.8,3]]\n",
" \n",
"x, y = np.random.multivariate_normal(mu, cov, 5000).T\n",
"\n",
"fig = plt.figure(figsize=(12,6))\n",
"ax = fig.add_subplot(1,1,1,xticks=[], yticks=[])\n",
"ax.scatter(x, y, c=\"black\", s=10, label=\"data\")\n",
"ax.set_xlabel(\"x-Axis\")\n",
"ax.set_ylabel(\"y-Axis\")\n",
"ax.set_ylim(-20, 20)\n",
"ax.set_xlim(-20, 20)\n",
"ax.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 共分散行列計算"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[2.859762 2.0870635 ]\n",
" [2.0870635 3.24389528]]\n"
]
}
],
"source": [
"S = np.cov(x-np.mean(x), y-np.mean(y))\n",
"print(S)\n",
"la, v = np.linalg.eig(S)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 共分散行列の固有ベクトルは直行する"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-0.73879631 -0.67392879]\n",
" [ 0.67392879 -0.73879631]]\n"
]
},
{
"data": {
"text/plain": [
"0.0"
]
},
"execution_count": 109,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(v)\n",
"np.dot(v[0,:].T, v[1,:])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# センタリングする"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(12,6))\n",
"ax = fig.add_subplot(1,1,1,xticks=[], yticks=[])\n",
"ax.scatter(x-np.mean(x), y-np.mean(y), c=\"black\", s=10, label=\"data\")\n",
"ax.quiver(0,0, 5*v[0,0], 5*v[0,1], angles='xy', scale_units='xy',scale=1, color=\"red\")\n",
"ax.quiver(0,0, 5*v[1,0], 5*v[1,1], angles='xy', scale_units='xy',scale=1, color=\"red\")\n",
"ax.set_xlabel(\"x-Axis\")\n",
"ax.set_ylabel(\"y-Axis\")\n",
"ax.set_ylim(-20, 20)\n",
"ax.set_xlim(-20, 20)\n",
"ax.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(5000, 2)"
]
},
"execution_count": 111,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X = np.concatenate([[x-np.mean(x)],[y-np.mean(y)]], axis=0).T\n",
"X.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 標準基底から基底vへの変換はvをかけるだけ"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAr0AAAFmCAYAAABgNSKpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3X90nNV97/vPlsYjMwbGGDs2gWJcrxvsYoqC3LolTY5blCFrnEz5YTnRIbkn7V0c9VwprW5D8D12SnLIEo0pnLognXTi1eq2aaLEMj88qXWwYq+aUwoxWGACSUi4xtjHuQfH/BpMBJJH2veP0fPwzO+RPSPNPHq/1tKy55nnx575w3zY+u7vNtZaAQAAAH7WMNsDAAAAAKqN0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfC1TjposXL7ZXXHFFNW4NAAAAuEZGRl6z1i4pdV5VQu8VV1yhQ4cOVePWAAAAgMsYc6yc8yhvAAAAgO8RegEAAOB7hF4AAAD4XlVqegEAADAzzpw5oxMnTui9996b7aFU1fz583XZZZdp3rx5Z3U9oRcAAKCOnThxQhdccIGuuOIKGWNmezhVYa3V66+/rhMnTmjFihVndQ/KGwAAAOrYe++9p4svvti3gVeSjDG6+OKLz2k2m9ALAABQ5/wceB3n+hkJvQAAAKior371q7r33nsLvv/II4/oJz/5yQyOiNALAACAGUboBQAAQF3q6enRlVdeqdbWVv3sZz+TJO3YsUO/9Vu/pWuuuUa33HKLRkdH9cQTTyiRSOhLX/qSmpubdeTIkbznVRqhFwAAYI5JJBLq6upSIpGoyP1GRkb03e9+V88++6weeughPf3005Kkm2++WU8//bSee+45rV69Wn/3d3+n6667TrFYTH/1V3+lw4cPa+XKlXnPqzRalgEAAMwhiURC7e3tGh0dVX9/vwYGBhSLxc7pnv/6r/+qm266SaFQSJLc+73wwgv68pe/rLfeekvvvPOObrjhhrzXl3veuWCmFwAAYA4ZHh52ywdGR0c1PDxckfvm667w+c9/Xr29vXr++ef1la98pWDLsXLPOxeEXgAAgDkkEom4M7KhUEiRSOSc7/mxj31MDz/8sN59912dPn1a3//+9yVJp0+f1iWXXKIzZ87o29/+tnv+BRdcoNOnT7uvC51XSZQ3AAAAzCGxWEwDAwMaHh5WJBI559IGSbr22mv16U9/Ws3NzVq+fLk++tGPSpK+9rWvad26dVq+fLmuvvpqN+h+5jOf0W233ab7779fu3btKnheJRlrbcVvunbtWnvo0KGK3xcAAACZfvrTn2r16tWzPYwZke+zGmNGrLVrS11LeQMAAAB8j9ALAAAA3yP0AgAAwPcIvQAAAHWuGmu0as25fkZCLwAAQB2bP3++Xn/9dV8HX2utXn/9dc2fP/+s70HLMgAAgDp22WWX6cSJEzp16tRsD6Wq5s+fr8suu+ysryf0AgAA1LF58+ZpxYoVsz2Mmkd5AwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCAADA9wi9AAAA8D1CLwAAAHyP0AsAAADfI/QCQB1IJBLq6upSIpGY7aEAQF0i9AJAjUskEmpvb1dfX5/a29sJvgBwFgi9AFDjhoeHNTo6KkkaHR3V8PDwLI8IAOoPoRcAalwkElEoFJIkhUIhRSKRWR4RANSfwGwPAABQXCwW08DAgIaHhxWJRBSLxWZ7SABQd4y1tuI3Xbt2rT106FDF7wsAAAB4GWNGrLVrS51HeQMAAAB8j9ALAKIlGAD4HaEXwJxHSzAA8D9CL4A5j5ZgAOB/hF4Ac16ttwSj9AIAzh3dGwBA6WBZiy3BnNKL0dFRhUIhDQwM1NT4AGC20b0BAKYhFoupt7e3YoGyUrOzlF4AQGUQegGgwiq5MK7WSy8AoF4QegGgwio5O+vsxtbZ2amBgQFJor4XAM4CoRcAKuxsZ2cLlUQ4pReSaK0GAGeJ0AsAFZY9O1tOnXA5JRHU9wLA2SP0AkAVTHdhXDmBtpwZZNqbAUB+hF4AqAHhcFiNjY2S3g+02QG2VH0vO8sBQGGEXgCYZYlEQtu3b9fExIQCgYC6u7sl5a/fLVbfS/kDABRG6AWALDNdIuANq6lUSslkMm+A9Y4r3/u0NwOAwgi9AOAxGyUC+cJq9rFwOJwxrnA4nHPN2SygA4C5IjDbAwCAWpJvBrXa4dEJq9nbIHuPZY8rmUzmvSYWixF2ASAPQi8AeEQiEfX392t0dHTaPXazA+h0r8m+LvtY9rjKDbhnMzYA8Btjra34TdeuXWsPHTpU8fsCwEyYbkh0SiKcQFpOacHZXnM2wXq6zwGAemKMGbHWri11HjO9AJBluiUC5ZZEeENr9jXxeLxkoC01rnyheDbKNQCgFrGQDQCmIZFIaMOGDdqwYYO7yC0cDmeck/3auc5ZiHbLLbfo5MmT7kK0YDCo/fv3n9PiOe/9b775Zm3dutUdSyCQnt9gQwsAcxkzvQBQpkQioba2No2Pj0uS9u/fr507dyqZTGacl/1akuLxeEZbsocfflibN29WMpnU0aNHNTQ0JOnsZ2O9M7oTExO655579POf/1wPP/ywJiYm1NjYqO7u7oz7JhIJxeNx7du3T+Pj4+rv76f8AYBvMdMLAGUaHh52A68kjY2NldUfN5FIaN++fRnHJiYmlEwm3XObmpoKXl+OSCTi7ugmpYP1gw8+qImJiYznecfU3t6uoaEh9zM5ZRbM+gLwI2Z6AaAEp1Y2HA4rGAy6IbGpqSmjP26hmtzssCxl9t4dHR1VIBDQ8uXLdeutt57VTGssFtPmzZt1zz33KJVKKRAIKJVKue83NjYqHA6rq6srp6bY4ZRZjI2NMesLwHcIvQBQRHb3g9tvv13f+9739Itf/EKXXnqpe06xRWhOXW0qlVIwGFRra6s6OjpydmI7duyYtm/frnXr1hVdCBcOh91ZYu95PT09WrdunXvO9u3b3UB94403uq/7+/vV3d2tUCik0dFRNTU16frrr5ekcy6zAIBaRegFgCKyux/s3btXR44ckSQdOXJEf/iHf+gGWmd21LnOKVPYvn27UqmUGhoadPXVV6ujo8MNk07vXUehsOkN344dO3ZocHAw41ynw0MikdD69eslKSdgF9rcIpFI6MCBA9PuUQwA9YA+vQBQRPZM74IFC3Tq1KmC50ejUTc4BoNBXXLJJTp27FjGOd5+uW1tbfrnf/5nvffee+77Gzdu1NKlSzNmdOPxuDsL63X55ZfrgQceyFmglt2bV1JZ/XrZyAJAvSm3Ty+hF8CcVW7A85YVODWz+YRCIa1evVojIyMln71kyRK99957On36dM572fW4DQ0NamhoKPpcb4jt6upSX1+f+340GtWePXsItAB8qdzQS/cGAHOSt69tqd64sVhMvb29SiaTeYNnIBBQNBpVd3e3nnvuubKef+rUqbyBt7GxMecZk5OTBQOv9H5JhCMSibjdICTp0UcfVVtbmxvch4eH6c4AYM4h9AKYk/LtVFaKtzVZ9vE9e/Zo7969ecOpt5VYMYsXL9bmzZvdzSS8PprnfGOMpNw2Z7FYTGvWrHFfT05OateuXerr69Pdd9+tvr4+bdq0KWODDQDwO0IvgDmpVG/dfJzWZNFoVMFg0L22o6NDiURCzz77bN7rnF65xRhj9Nu//dtat26dLrroooz3lkr6ep5rrLVqaGhQNBp1Z2+dHeMOHz5c9HljY2MaGho66x3gAKDeUNMLYM462xpXZyczSW4nhg0bNuRdaDZdDQ0NmpyczDjWN2+eNp05oyUlrilV+1tIZ2enent7z3LEADC7yq3ppWUZgDnLae/lVSwIZ2/bGwgE1NzcLCm9JXElZAfeyyT9H2fOqElSk6SxItdMTk7mXJ8tEAjommuu0fPPP6/x8XFakwGYM5jpBTCnlAq1hdp6bd26tWDnhpaWlrwdG+bPn5/RiixbvlndbHFJ/3Hq778u6WjRs8vT2dnp7srm/R5KzXzT/QFALaJ7AwBkSSQSamtrU19fn9ra2nJqWQstbtu6davuvvvugmUDIyMjeRefFQu8Uuas7nXXXaeFCxdmvL9S0h97Xl9a9G7lCQaDCofDisfjOnr0/Qjt7WZxyy23aOvWrRnXTafbBQDUIkIvgDkjHo9rfHxckjQ+Pu7W5UrpUHf06FG31VcoFFI4HNaGDRv0l3/5lyXv7dTUnq2XXnpJyWQy49hXlFmD9sFp3nPZsmU5x86cOaOvf/3rGhoa0tDQkDZt2uTO4Hq3RN62bVtGsD2bbhcAUEsK/gttjLnaGPNDY8z/NMZ80xhzkee9p2ZmeABQfc4s5tDQkKy1amlp0erVq3Xvvfe6x0opp562mFOnTmU85zck3Zp1znRneq+99lq3y4TDWpsxzrGxMbdkwTtbPTExkdP7d7rdLgCglhSblviGpK9KulrSzyU9boxZOfXevCqPCwAqJpFIqKurS83Nze5MblNTkzo6OiRlzmKOj4/r8OHDGhkZcWeFZ8Ndyv0HupzQ6/QEdlqptba2Fj0/EAi4G1bceOONGdeHw2F1dXUpkUi47do6OzsLbmEMALWsWPeG8621j079/V5jzIikR40xn5NU+dVvAFAF2YvTvvjFLyqZTGYsxopEIurv79fo6KgaGhpy+upmbwtcbddKuiXP8XJC70033aSlS5e6n+/gwYMlW6ndd999GhsbUygU0ubNm5VMJhUOh7V9+3aNjo6qv79f3d3d7nFnBrhU8GXhG4BaUiz0GmNM2FqblCRr7b8YY26R9KCkRTMyOgA4R9m1qMlk0u1J64SykydPasGCBVqwYIEuvPBCHTlyxL3+8ssv1wMPPKCDBw/q7rvvnpExf63A8XJCr/NZHaU2qUilUm6g934/XV1dGd9bdueK/v7+ojO+3v/ZKHUuAMyEYuUN2ySt9h6w1v5I0vWSHqrmoACgUgrVonq7EezatUunTp3SqVOndPToUbe2NRgM6oEHHlAsFstZZFYt10mKFnivnNC7d+9etwPD2rVr9fjjjxc9PxgMZizec74f7/eWb8OLUovZWPgGoNYUnOm11n6nwPHjkm6r2ogAoIKcWtTsX7N7Q5nX5OSkPvGJT2jFihU5JRDf+MY3zmmxWjl6irxXTvcGpzQjlUrl7R3stWbNGvX0pJ/ofD+StGHDBklSd3e3Dh8+rOHh4ZzPXWoxm7dkhIVvAGoBO7IB8L18O695Q5lXQ0ODmpub3TDoVe3Ae72k9UXeny/pYkmvV+h5TU1NOnjwoFvjLEltbW3uAr69e/equbk5Y5Z35cqV+sQnPlGyTrfQ/2wAwGxhRzYAvrR161a360C+ACtl1vQ+9thjeu2112StVTAYVGtrqzo6OhSLxdTW1qaHHnqo6qH3h5LWlTjnGkk/qsKzQ6GQ1q9fn3fRm3fnuGAwqMHBQUIsgJpR7o5sRWd6jTGNkv7UWvvXFRsZAFSZs4OaJL3wwguSlDf4emeAu7q61NfXJyndtmxoaEgHDhxQc3OznnjiiaqP+VMqHXildIlDNUKvM+MdDAZzWrV5w76zqQczuADqTdHtg6y1E5L+cIbGAgAVkb1FbrEtc50evidPnnR71DpGR0f11FPV34vHqHDHhmyV2Io4n2AwqI6ODg0ODqqlpaXgeYFAQPv27WM7YgB1p5ya3n8zxvRK+p6kXzkHrbXPVG1UAHAOYrGYO8PrvPbyljU88sgjBXvwhkIhXXjhhXr11VerOt42pcsWylGt0Nva2up+T7FYTB/5yEfyznB/8IMf1PHjxyW935WB2V4A9aCc0Hvd1J93eY5ZSX9Q+eEAQC4npIbD4ZyNJfJxShny1fR6+8eWEgwGdemll1Y19DYq8x/XUqoRep1ZXin9/cTjcT355JM554VCIX32s591N62gKwOAelIy9Fprf38mBgIA+eQLqeVsdtDT05O3jrdQq7J83nrrrZJtv87V5yRdOY3zKxF6zzvvPL377rvua2er4g0bNmj//v0aGxvLuaalpUV33nmnYrGY1q1bR00vgLpTtKZXkowxYWPMfzXGHJr6uc8YE56JwQFAvpDq3ezAqcktt7bUu+nCbJsn6SvTvKYSodcbeKX0DG57e7uGhobyBl4pvSDw4MGD6urqkpT+HoeHh6npBVA3SrYsM8Y8KOkFSf8wdehzkq6x1t5c6BpalgGolHwzvaFQSAMDA5LkvuccK2fmcevWrbr//vv1zjvvVG3c5fhPkv6b5/V7SvfiLeaUpA9UeBznn39+Wd9FY2OjJiYm1NTUJGutxsfHp/W9A0A1VKRl2ZSV1tpbPK//izGm+GbuAFAh3k0Osmt6u7q68m51m/2rd6cm2Kk/ve+++wrOaEq5v/6vhvMkfVnS/yvpv0/9vCzpxazzJpReROH8Y71EUlDSuCqn3PDv7Pbm/e5YzAagXpQTet81xvyetfZxSTLGfERSdf9rAAAe+XZUk3K3ug2Hw+7Mr1P3Kynj2OrVq4sGXkkKh8NVD71hSf9O6dDr+FSe856T9GdKt89xtiG+RNKxqo4uv0AgoFQqlTPTy2I2APWgnND7J5L+0VPH+6ak/1C9IQFAebK3uvXW/3pnfr3HnnmmdLfFarcok6R8T2jOc+ywpMen3vuOpFal63pnI/RKUjQadTs9sJgNQD0pJ/S+ba29xhhzoSRZa982xqyo8rgAoCzZs8DemV9nBtI55t1OtxRjjKqxTXsxH85zzKklOyXpBkl3Kj3TW0nlfi9OP2NvP18AqBflhN4HJV1rrX3bc2yXpMJb9gDALMie+XVCWXd3txKJhN59910dOXKkrHvNdOCVCs/0OiYlfVXprg+VlC/wOkG4UCD21kkTfgHUg4LdG4wxqyRdJekeSV/yvHWhpC9Za68qdFO6NwCoFYlEQm1tbRofH1cgkP7//EI7sM2msKS3Chx/O8/xmbBy5Up9+tOf1r333qvx8XEFg0ENDg5KKt41g0AMYCZVonvDlZI+KWmhMtdXnJZ027kNDwAqq1DQisfjGh9P9zpIpVJqaWnR7/zO7ygcDuvw4cPat2+f+/5syjfLe0SzF3glubPit99+u7797W9r8eLFkpS3dtrbKSN7MSHBF0AtKBh6rbW7Je02xvyutTZ3P0oAqBHTCVpLly5Vb29vxrXDw8N69NFHyy59qIZSpQ0zYcmSJTp16lTGsX/6p3/SyZMnNTY2pmPHjqmtrU233367QqFQ3q2IiwViAJhNJXdkk/QnxpiFzgtjzEXGmL+v4pgAIO2dd6R/+RepxCKreDyet2uDJDU3Z8bJ7NexWCwjBM+WfIvYnp3hMbzxxhs5x+bNm5fR4m18fFzJZFIDAwPq7OzM+R8M7453tDMDUEvKWcj2m9Zat9TMWvumMSbfv88AcG5+9SvpiSekAwfSYffpp6XOTun3f7/gJYlEQvv373dfB4PBjKCVTCYzzve+dmZ5T548OauzvFJtzPQ6m094XXnllTpx4oQbfLO/32yFFhMCwGwrJ/Q2GGMusta+KUnGmEVlXgcAxY2OSk8+mQ64Bw5ITz0lnTnz/vsLF0p/8RdFbzE8PJwxE9na2poz85ivjZl3gdtsC0r6jTzHZ3vry4aGBr3wwgv61Kc+5c6kd3R06ODBg7rnnnuUSqXylpMU2kwEAGZTOeUN90l6whjzNWPMXZKeULqjAwBMz7vvpgPunXdKH/uYdNFFUmur1NMj/du/ZQZeSfryl6WLLy56y+xfpzsbJzicmcdoNKr169e7x++6666aCLxSuk1OdhuyU5J+MQtj8ZqcnNTx48e1a9cuNTc3a8+ePZKkbdu2uR0wsstJAKBWlZyxtdb+ozHmkKQ/kGQk3Wyt/UnVRwag/r33nnTw4PszuT/8oVRiC2DXr/+61NVV8rRyfp1+8OBBDQ8PK5VK6cCBA4pGo2XtzDZTaqG0oZREIqF169Zp69atGWUQgUCAul0AdaHcMoVFkn5lre03xiwxxqyw1h6t5sAA1KGxsXSJghNyn3wyHXzPxhVXSH/zN9KCBemf8893/3zs0CE9NjKi37n+ekVuvlmxaLTgr9MTiYS2bdvmBrXR0VE9+OCDs7L5RCHFdmKrFRdeeKHbIcPR2NioO+64g1IGAHWh4OYU7gnGfEXSWklXWms/ZIz5oKRBa+1HCl3D5hTAHDE+nl5s5oTcJ55IlzDMhqYmjQeDesdazVu4UBdccom0YIGef+UV/fiVV/QrSe9IGlW62bjzutSfM1EA8T8kfTTr2L+XNDADzy7EGCNjjLsbW/bObGvWrFFPTw+BF8Csq8TmFI6blJ6IeEaSrLX/nzHmgnMcHwA/MEY6fVp66aV0GcNsBV5JGhtTcGxMi6R0q7MTJyRJV0/9nK2Uyg/Ixf7MPvauJKt0zdg1eZ47mzO9DQ0N+vCHP6yRkRH3WPZWxCxWA1Bvygm949Zaa4yxkmSMWVDlMQGoF/PmSZ/4RPrnb/9W2rNH+s530n/WyCKxcxVQeivgcBXu/Y6k95Te293rXUk/r8LzpmPFihV65plnCpaBHD5cawUYAFBcOd0bdhpj4pIWGmNuk7RP0o7qDgtA3TnvPGnjRumhh6STJ6W//3vp4x+XGsr5Z2ZuOl/S4jzHfyQpt2PuzJmcnKy5umcAOFfldG+41xjzcaW3gL9S0p3W2h9UfWQA6tfChdIf/VH659VXpcHB9AzwD39Y/j0++1lp0aL0hhXvvJP5569+pdFTpzR5+rTOm5hQY3arszp1WOn2ZbUwh1os8DY1NeW0hgOAWlcy9Bpj/i+lF64RdAFM37Jl0he+kP45elT67nfTAfiFF4pft3ix9Nd/XfDtkPdFKuWGYScYP/7oo9r2la+o6cwZLQwE9Kd//Mc69NhjOvGzn2mBpAVKz7SW+nOmvKv04ong1LNr1fLly3XVVVdV9RnOTnns6Aagksrt3rBJ0huSvitpl7X2ZLFr6N4AoKTnn5cGBtI/r7yS+/7556cXo4XPrpp2w4YNGhoacl+3tLRoxYoV2rVrV9n3MJLOU24YLjcwF/sze8bhlKQPTPMzzoRLL71UJ0+eVCqVUjAYlDFGY2NjCoVC6u7uVjKZrGg4TSQSbmu0UCiUs9sbAGQrt3tDydDrueFvSvq0pFsknbDWthY6l9ALoGzWpsseBgak731P+uUv33/v3nulL36x4KXFZgSzQ292C67ZFlRmEJ6ndC1vLdqyZYuSyaSOHj2a8Z02NjZqYmKiouG0q6tLfX197uvOzk719vae830B+Fe5oXc6K0x+KelVSa+rNickANQjY6Tf/V3p/vulX/xCGh6WPv956cIL08emtrvN5swI9vX1qb29XYlEwj3e1dWl5uZmNXgW0VlraybwSun+v29I+p+SfqraDbySlEwm1dvbq+bmZgUC6TnqQCCQseFHpbYizt5Wmt3eAFRKOTW9/0npGd4lknZJuo1tiAFURSCQ7vjw8Y9L3/iGNDQkHTsmrVyZc+rw8LC7O5g3dHl/NX7zzTfr4Ycf1sTEhJqamjSWtQWyMYYOBSUEg0FFIhElEglt375dqVRKjY2NuvHGGzU0NOR+15UKp+VsKw0AZ6OcPr3LJXVba2thQTGAuWL+fOnmmwu+HYlE1N/fnxG6soPw0qVL9dBDDykej0uSXn75Zb344ovuPQi8xRljdPvttysWi6mrq8v9bicmJjQ6Oqr169dLkjo6OioaTtn4AkA1lNOy7P+eiYEAwHTlC13ZQViSDhw4oNHRURljZmuodclaq7179yqZTCocDisUCml0dFTBYFD79+93F7TRvgxAPShnphcAakr2Cn8ndOX71bh3hpKZ3ekbGRnRyMhIRrcG74I2p7SEmVkAtY6tkgDUnUL1vFI6+Pb29ioWiymRSOjo0aMZC9pKWbZsWcXH6wejo6PugraOjg4WmwGoO8z0Aqg7+ep5pcwWZtL7i9q8GhoaFAgEND4+nnF8yZIluu2225RMJjNaZuF94ameySw2A1CPyunecLOkbUq3KTNTP9Zae2GVxwYAeeULXYlEQm1tbRofH9eOHTvU2tqaE3i912dvUnHeeefpwIED+tGParl52Ozavn271q1bl7HQzJllJ/gCqHXlzPTeI+lT1tqfVnswAFCu7BX+8Xjcnb0dHx/XyZMn3YVXXpOTkxkdHBzHjx/X8ePHqzvoOuet3/XWVff397NzGoCaV06h20kCL4B6s3TpUg0MDKizs1MbN25UY2OjpHQNaiwWUzAYnOUR1qeTJ9O70BerqwaAWlRyG2JjzN9IWibpEUluZ3dr7UOFrmEbYgAzLZFIaNOmTRobG1NTU5N27tyZMfPo1PuGw2G3BdfevXv1zDPP0NUhj4ULFyoQCOj111/P+X42btyoz33ucxkdNJjpBTBbyt2GuJzyhgsljUryLs+1kgqGXgCoJu+CNSdoxWIx7dy5s+DiKue1N6itX7+ewFvAW2+9pcbGxrzfz65du/ShD32IxWwA6krJmd6zwUwvgGrJ7tE7nRnGrq6ujM4M0WjU3bgC07NmzRo9//zzsz0MACh7prdkTa8x5kNzV1kLAAAUTUlEQVTGmP3GmBemXv+mMebLlRgkAEzXudSSRiKRjP6yzc3NWr9+vRYvXlyVsfoZM7sA6k05C9l2SPrPks5IkrX2R5I+U81BAUAh3uDa1NSko0ePKpFIlHWt0+qss7NT3d3d2r59u4aGhvTmm29Wc8i+sHz5cneTj0AgoHXr1imRSKirq6vs7x8AZlM5oTdkrX0q61iqGoMBgFKc4BqNRmWt1dDQkNrb2zOCV7Ew5uzYlkwm3RnjiYmJGRt/PQqFQrrqqqs0OTkpSUqlUorH42pvb1dfX1/O9w8Ataic0PuaMWal0ovXZIzZKOl/VXVUAJDFG2RjsZhWrFjh9uX1ljk4Nb+lwph3xhiFrVmzRgMDAzlbD0uiZRmAulJO94ZOSd+UtMoY8wtJRyV9tqqjAgCPfBshFNqKuFDNb75uD073gW9961t6++23Z+fD1bBAIKCenh73O/N2a5DkLgL0fv8AUKtKhl5r7cuSWo0xCyQ1WGtPV39YAPC+fEG2t7c3b8us7DAcDoczAnM0GtWLL76oVatWaenSpYpEIgqHw7r77rtzntvY2DhnSh+MMTntyZwg29XV5X7H3gVstCwDUE/K2Zziz/McTkoasdYezncNLcsAVNJ025R5+/gODw9ntCnL5tzvW9/6lnbt2uUeb2ho0Ac+8AG9+uqrFf0s9eS6667TU089pVQqxQYUAGpWJTenWDv18/2p1xskPS3pT4wxg9bae85+mABQmrcUoZxZxewZSWfmNx9n5jj7/cnJSb3xxhu+n+2dN2+ezpw5k/e9J554wv278z0RegHUq3IWsl0s6Vpr7RettV9UOgAvkfQxSZ+v4tgAwOV0XZhu6IrFYuru7lYgkP//8YvVo46Pj+uGG27Q8uXLpz3eelEo8GYLBALU7QKoa+WE3ssljXten5G03Fr7rqSxqowKACoomUwqlXq/0+KiRYu0ceNGdXZ2ur+y7+joUFNTU8Z1oVBIHR0duuqqq2Z6yFXT0NDg9tt1NDY2Skr3Pd6yZYvWrFmTc92NN97ILC+AulZOecN3JP3QGLN76vWnJA1MLWz7SdVGBgAVkr24rb+/3w1wTiu0SCSinTt3anh4WOFwWMlkMqOUYv/+/Robq+//z1+2bJni8bgOHjyobdu2aWJiQqFQSN3d3Tmf94UXXsi4lq2aAdS7kgvZJMkY0yLp9yQZSY9ba4uuUmMhG4Ba4yxu8wZaSWUvkEskEvrzP/9zHTlyZCaHXXGrVq1SIBDI6F6R/Zm7urpyFv9Fo1Ht2bNnJocKAGU554VsxpgLrbVvG2MWKd2b96jnvUXW2jcqM1QAqD4n2Hnbl61fvz6nFZo3AHq7QEjSyy+/PPMDr7AXX3xRUnomd8uWLXlDfiQS0Y4dO9zNPwKBgDo6OmZ0nABQacXKG74j6ZOSRpTejc1k/fnrVR8dAJTBG06L1Z1m9/uV0nW7+TZYyN4QY/369Tl9bOvdjh071NPTk3M8FotpcHBQ8XhcktTR0UE9L4C6V1Z5w3RR3gBgpkynh2++c6Xc3dqk3F/xR6NRDQ8PZyyIq3fGGD3yyCMEWgB1rWJ9eo0xRtKtklZYa79mjLlc0jJr7VMVGCcAnJN8u7UVKlEo1O833/nhcFjBYFDj4+MKBoNqbm7Wj3/8Yx07dmxmP2AVWWsL9t4td/YcAOpFOTuyfUPSpKQ/sNauNsZcJGnYWvtbha5hphfATCk20+t9r7GxUZs3b87763zvvTZt2qSxsTEFAgFNTk5qcnJSDQ0NmjdvXt13b8jW1NSknTt35oRa7/cWDAbV2tpKiQOAmlXuTG85fXrXWWs7Jb0nSdbaNyUFz3F8AFARzuytt+euwzsLPDExoXvuuUeJRCLnHk7bsrvuussNtqlUSpOTk5LSu7NVM/AuXLiwavcuxunH29XVlfG9eL+38fFxDQ0Nqb29Pe93BwD1opzQe8YY06j04jUZY5YoPfMLADWh0G5tkUjE3XhBSgfZeDyeEfKcWc2+vj49++yzZT1v0aJFJc9pbGzUqlWrtGjRIi1YsKDgeS0tLVq5cmVZzz1X559/fs4x57N7Q20kElEoFMo4zykdAYB6VU7ovV/Sw5I+YIzpkfS4pLurOioAqIBYLKbNmze7WxAHg0Ht378/I+R5ZzWdUoZS3nijdMfGiYkJvfjii3rjjTd05syZjPDtdeedd+qtt96axqcqrNTYL7vsMvccY4yOHz+eUQ8dj8e1YcMGxeNxdXd3KxqNurvUFduuGQDqQbmbU6ySdL3S7cr2W2t/Wux8anoB1BIn3B49elRDQ0Pu8c7OTkUikYya4O7ubh0+fLjinRqi0ah+8IMf6MyZMxnHt2zZom9+85t67bXXzun+gUBA11xzjUZGRgqeY4wp2HatqalJExMT7md26n2l/N0tAKBWVLKmV9baF621fdba3lKBFwBqjVP+0NHR4f7a3pm5zK4J7unp0Z49e3THHXco3bwmrbGxUZdffrk2btyY86v/UkKhkJqbmzUxMZHzXm9vb87McTmzzdlSqZSWLl3qzszmU2yS47LLLssI+WNjY5QzAPCV6f/LCgB1qtCit3w1wclkMiMkTkxMaM2aNRocHNTAwIC7CKyUJUuWaGBgQMlk0l0Y5/X222/nHM93niQtW7as6LOam5u1c+dORaNRtbS0ZATgVatWFQ3rr7zySsbrpqYmhcPhvDW/AFCPCL0A5pRCi96yRSIRBYOZjWr27dunrVu3anh4WKtWrSr5LGOMbrvtNsVisbz3m65iC+KkdFCPxWLq6OjQ2NhYRseJl156Sd3d3ers7NSWLVvU0tLizig3NjZmzEIvX75cO3fuVDKZzOmBDAD1ih3ZAKCARCKhL3zhCzp+/Lh7LBAIKJVKuX+W4t35LR6P6+TJk3rppZf09ttvT3s82eE0W0tLi2644QZt377dDatenZ2d6u3tdV97N+JwrnHqmpPJZM7xYrvdAcBsKbeml9ALAEVkb3BRLHQWEo1GdeDAgYxQuW3bNvdeDQ0N+rVf+zUFAgEdOXKk6L1KjaHQ+8FgUIODgwV3X4vH45LSJRJO0G1sbNRNN92kpUuXspANQM2q2DbEADDXrV+/XlI6EN57770aHx9XQ0NDwdpbL6dVmbdM4PDhw7rhhhvcThKTk5M6duyYAoFA0fsGg0HFYjE9+OCDBRelFQrEra2tBQOvt3uFd6wTExN65JFH9OCDDxJ4AdQ9anoBoABnW+KhoSE9+uij+vnPf+52dGhoaCirRnfz5s3q6OjIWFS2b98+NTc35ywsc3aBa2hoyOin6/x9cnJSTz31VN7A6/Qi9nKuC4VC6ujoyDs+b59i509v94hUKkUtLwBfIPQCQAHxeNxdDDY5Oaldu3ZlbFPc2tqaszubE4obGxu1ZcsW9fT0KBaL6frrr3fPGR8fVzKZ1MDAQMYGEI7JyUl3ttda6/49lUpl1Bd7RSIRRaNRN4g3NTXpwx/+sKLRaE4trrPtciKRyNh9zWmt5g29TU1NBTel8N4HAGodoRcApsEpV3AC4ooVKzLev+WWW9TZ2amHHnpIPT09bjD0zux6ewTv2bPHbTPmBNZgMOgGYe/fC3Fmcvfs2aPBwUFFo1FZazUyMqIDBw5knOvddrm9vV2SMtq4JZPJjAV6119/fdGyCNqZAagX1PQCQAEdHR05O7NZaxWNRhUKhdzFaIFAQJdeeqluvfVW9fT0uOdm18s6XRGyF4XFYjHFYjG3m4Izs+pdXFZol7g1a9a4s8nOvYaHhzU+Pi7p/VZjzvvZ5QzDw8M5Ldz6+/vdMZdbFuF9BgDUImZ6AcwJZ/OreGfR2OLFi91jk5OT+tnPfqZHHnnEXTSWSqX0yU9+MiPwSrnBMJlMui3DyhnLgQMHNDQ0pO3bt6ujoyOnzKCxsdF9pvd+2SUL3uuKved85nwbeGQrdR8AqDnW2or/tLS0WACoFbt377ahUMhKsoFAwG7ZsmVa10ejUSvJ/THGZLxubGy0u3fvLvrcUChkd+/enfdYvnNbWloyntHZ2Zn3cxS7X2dnp92yZYt7rXdc2cfORqXuAwDnQtIhW0Y+JfQC8L3Ozs6yQmohu3fvtg0NDTn3yA7R+UJg9rHssXR2duY97n1eU1NTTpgtdT/n3HyBuNBYAaAeEXoBYMru3bttIBAoGA7LsWXLFvceoVAoZwa1WMDMHkupmd7ssUaj0aKfrdBzCwXicscKAPWg3NDLQjYAvheLxXTHHXe4C8/Opga1p6dH69atcxeaZde6lruwy6mZzb6P93j29r+FFpMVu5+Urrv1LkpzPjOL0ADMRWxDDGDO8HZHqHTIy+7UUGwRWLn3yx7r2Yy/0H0qOVYAmE3lbkNM6AWACqn3UA0A9ajc0Et5AwBUiNNvtxoqXZJQzbECQC2iTy8AVEklt+mdbl9ctggGgEyUNwBAFVSjbrbckoTpPptSBwD1rNzyBmZ6AaAK8pUj5DOdGdlYLJazZfC5PNt5fnt7u/r6+tTe3s7MMADfIvQCQBWUU46QSCS0adMm9fX1adOmTRULnNMphZhOQAaAekboBYAqcPrndnZ2FiwviMfjGhsbkySNjY0pHo/P2LMd060VBoB6RfcGAKiQ7NrY2eyQUO6zi21uAQB+wkI2AKiAs1m4lkgk1NbWpvHxcQWDQQ0ODhI6AWCaWMgGADPobGpjY7GYBgcH1dnZSeAFgCqjvAEAKiASiai/v9+d6S23NpZNIgBgZhB6AaACqI0FgNpGTS8AAADqFjW9AAAAwBRCLwDUqens5gYAcx2hFwDqENsHA8D0EHoBoA6xfTAATA+hFwDqENsHA8D00LIMAOoQLdIAYHpoWQYAAIC6RcsyAAAAYAqhFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5H6AUAAIDvEXoBAADge4ReAAAA+B6hFwAAAL5nrLWVv6kxpyQdq/iNAQAAgEzLrbVLSp1UldALAAAA1BLKGwAAAOB7hF4AAAD4HqEXAPIwxgwZYxbO9jhKMcbcaIz5jXO8xypjzJPGmDFjzO2VGhsA1BJCLwDkYa2NWmvfmu1xlOFGSdMKvcaYQNahNyT9qaR7KzUoAKg1hF4Ac5ox5rPGmKeMMYeNMXFjTOPU8VeMMYun/v4XxpgXjTE/MMYMOLOhxpiVxphHjTEjxph/Ncasmjr+/xhj7jfGPGGMedkYszHPc7cZY/5Pz+uvGmO+OPX3LxljnjbG/MgY81885/zvU8eeM8Z8yxhznaSYpL+aGv9KY0yzMeaHU+c9bIy5aOraA8aYu40xj0n6M+9YrLW/tNY+LelMZb9dAKgdhF4Ac5YxZrWkT0v6iLW2WdKEpFuzzlkr6RZJH5Z0s6S1nre/KekL1toWSbdL+m+e9y6R9HuSPinp63ke/92pZzs2SRo0xkQk/W+SfltSs6QWY8zHjDFXSdoq6Q+stddI+jNr7ROSEpK+ZK1tttYekfSPkjZba39T0vOSvuJ5xkJr7b+z1t5X3jcEAP6R/SsuAJhLrpfUIulpY4wknSfpl1nn/J6k3dbadyXJGPP9qT/Pl3Sd0kHVObfJc90j1tpJST8xxizNfrC19lljzAeMMR+UtETSm9ba48aYP5UUkfTs1KnnKx2Cr5G0y1r72tT1b2Tf0xgTVjrYPjZ16B8kDXpO+V6J7wMAfIvQC2AuM5L+wVr7n0uck0+DpLemZojzGSvjHrskbZS0TOmZX+fcv7TWxjMGkQ7D59pY/VfneD0A1C3KGwDMZfslbTTGfECSjDGLjDHLs855XNKnjDHzp2Z3N0iStfZtSUeNMW1T1xpjzDXTfP53JX1G6eC7a+rYXkl/PPUsGWMunRrffkmbjDEXO2OdOv+0pAumxpSU9KYx5qNT731OkjPrCwBzGjO9AOYsa+1PjDFfljRsjGlQeiFXpzzbqFtrnzbGJCQ9N3X8kKTk1Nu3SvrG1D3mKR1in5vG839sjLlA0i+stf9r6tjwVK3xk1NlE+9I+uzUuT2SHjPGTChd/vD5qWfumJoJ3ijpP0j6W2NMSNLLkv6o1DiMMcumPteFkiaNMd2SfmMq2AOAL7ANMQCUYIw531r7zlSQ/B+S/qO19pnZHhcAoHzM9AJAad+c2gBivtI1wAReAKgzzPQCAADA91jIBgAAAN8j9AIAAMD3CL0AAADwPUIvAAAAfI/QCwAAAN8j9AIAAMD3/n8xKPFahKrCfQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(12,6))\n",
"ax = fig.add_subplot(1,1,1,xticks=[], yticks=[])\n",
"X = np.dot(X,v)\n",
"v = np.dot(v,v)\n",
"ax.scatter(X[:,0], X[:,1], c=\"black\", s=10, label=\"data\")\n",
"ax.quiver(0,0, 5*v[0,0], 5*v[0,1], angles='xy', scale_units='xy',scale=1, color=\"red\")\n",
"ax.quiver(0,0, 5*v[1,0], 5*v[1,1], angles='xy', scale_units='xy',scale=1, color=\"red\")\n",
"ax.set_xlabel(\"eigen vector 1\")\n",
"ax.set_ylabel(\"eigen vector 2\")\n",
"ax.set_ylim(-20, 20)\n",
"ax.set_xlim(-20, 20)\n",
"ax.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:py35]",
"language": "python",
"name": "conda-env-py35-py"
},
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment