{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# numpy" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\no2SmA6UrNKcAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "np.random.seed(0)\n", "\n", "x = np.arange(-5, 5, 0.1)\n", "y = np.arange(-5, 5, 0.1)\n", "xx, yy = np.meshgrid(x, y)#, sparse=True)\n", "z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)\n", "h = plt.contourf(x,y,z)\n", "plt.colorbar(h)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 100\n", " 0\n", "0 True\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456789...90919293949596979899
0-5.0-4.9-4.8-4.7-4.6-4.5-4.4-4.3-4.2-4.1...4.04.14.24.34.44.54.64.74.84.9
\n", "

1 rows × 100 columns

\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 8 9 ... 90 91 92 93 \\\n", "0 -5.0 -4.9 -4.8 -4.7 -4.6 -4.5 -4.4 -4.3 -4.2 -4.1 ... 4.0 4.1 4.2 4.3 \n", "\n", " 94 95 96 97 98 99 \n", "0 4.4 4.5 4.6 4.7 4.8 4.9 \n", "\n", "[1 rows x 100 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xx_df = pd.DataFrame(xx)\n", "yy_df = pd.DataFrame(yy)\n", "\n", "xx_df_drop_duplicated = xx_df.drop_duplicates()\n", "print(len(xx_df), len(yy_df))\n", "print((xx_df_drop_duplicated == yy_df.T.drop_duplicates()).T.drop_duplicates())\n", "xx_df_drop_duplicated" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "(0 100\n", " dtype: int64, 0 100\n", " dtype: int64)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xx_sp, yy_sp = np.meshgrid(x, y, sparse=True)\n", "pd.DataFrame(xx_sp == yy_sp.T).sum(axis=1), pd.DataFrame(xx_sp == x).sum(axis=1)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "\n", "Dimensions: 3 (items) x 16 (major_axis) x 2 (minor_axis)\n", "Items axis: 0 to 2\n", "Major_axis axis: 0 to 3\n", "Minor_axis axis: 0 to 1" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x, y = np.meshgrid([1,2,3,4], [5,6,7])\n", "x_sp, y_sp = np.meshgrid([1,2,3,4], [5,6,7], sparse=True)\n", "pd.concat(\n", " [pd.DataFrame(x), pd.DataFrame(y), pd.DataFrame(x + y)], axis=1)\n", "\n", "x, y, z = np.meshgrid([1,2,3,4], [5,6,7], [8, 9])\n", "x_sp, y_sp, z_sp = np.meshgrid([1,2,3,4], [5,6,7], [8,9], sparse=True)\n", "pd.concat(\n", " [pd.Panel(x), pd.Panel(y), pd.Panel(z), pd.Panel(x + y + z)], axis=1)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[ 0 1\n", " 0 5 5\n", " 1 5 5\n", " 2 5 5\n", " 3 5 5, 0 1\n", " 0 6 6\n", " 1 6 6\n", " 2 6 6\n", " 3 6 6, 0 1\n", " 0 7 7\n", " 1 7 7\n", " 2 7 7\n", " 3 7 7]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[(v) for l, v in pd.Panel(y).iteritems()]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "ename": "ValueError", "evalue": "Must pass 2-d input", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m pd.concat(\n\u001b[0;32m----> 2\u001b[0;31m [pd.DataFrame(x_sp), pd.DataFrame(y_sp.T), pd.DataFrame(x_sp + y_sp)])\n\u001b[0m", "\u001b[0;32m/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, data, index, columns, dtype, copy)\u001b[0m\n\u001b[1;32m 252\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 253\u001b[0m mgr = self._init_ndarray(data, index, columns, dtype=dtype,\n\u001b[0;32m--> 254\u001b[0;31m copy=copy)\n\u001b[0m\u001b[1;32m 255\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtypes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mGeneratorType\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 256\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtypes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mGeneratorType\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_init_ndarray\u001b[0;34m(self, values, index, columns, dtype, copy)\u001b[0m\n\u001b[1;32m 409\u001b[0m \u001b[0;31m# by definition an array here\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 410\u001b[0m \u001b[0;31m# the dtypes will be coerced to a single dtype\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 411\u001b[0;31m \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_prep_ndarray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 412\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 413\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdtype\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_prep_ndarray\u001b[0;34m(values, copy)\u001b[0m\n\u001b[1;32m 5332\u001b[0m \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5333\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 5334\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Must pass 2-d input'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5335\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5336\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mValueError\u001b[0m: Must pass 2-d input" ] } ], "source": [ "pd.concat(\n", " [pd.DataFrame(x_sp), pd.DataFrame(y_sp.T), pd.DataFrame(x_sp + y_sp)])" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[[1],\n", " [2],\n", " [3],\n", " [4]]])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x_sp" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[[5, 6, 7]]])" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_sp.T" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[[ 6],\n", " [ 7],\n", " [ 8],\n", " [ 9]],\n", "\n", " [[ 7],\n", " [ 8],\n", " [ 9],\n", " [10]],\n", "\n", " [[ 8],\n", " [ 9],\n", " [10],\n", " [11]]])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x_sp + y_sp" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "ename": "ValueError", "evalue": "Must pass 2-d input", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;34m[\u001b[0m\u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_sp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_sp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_sp\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0my_sp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, data, index, columns, dtype, copy)\u001b[0m\n\u001b[1;32m 252\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 253\u001b[0m mgr = self._init_ndarray(data, index, columns, dtype=dtype,\n\u001b[0;32m--> 254\u001b[0;31m copy=copy)\n\u001b[0m\u001b[1;32m 255\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtypes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mGeneratorType\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 256\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtypes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mGeneratorType\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_init_ndarray\u001b[0;34m(self, values, index, columns, dtype, copy)\u001b[0m\n\u001b[1;32m 409\u001b[0m \u001b[0;31m# by definition an array here\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 410\u001b[0m \u001b[0;31m# the dtypes will be coerced to a single dtype\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 411\u001b[0;31m \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_prep_ndarray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 412\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 413\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdtype\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_prep_ndarray\u001b[0;34m(values, copy)\u001b[0m\n\u001b[1;32m 5332\u001b[0m \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5333\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 5334\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Must pass 2-d input'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5335\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5336\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mValueError\u001b[0m: Must pass 2-d input" ] } ], "source": [ "[pd.DataFrame(x_sp), pd.DataFrame(y_sp.T), pd.DataFrame(x_sp + y_sp)]" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "ename": "TypeError", "evalue": "Input z must be a 2D array.", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mcontourf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontourf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolorbar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcontourf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/matplotlib/pyplot.py\u001b[0m in \u001b[0;36mcontourf\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 2781\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhold\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhold\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2782\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2783\u001b[0;31m \u001b[0mret\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontourf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2784\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2785\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhold\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwashold\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/matplotlib/__init__.py\u001b[0m in \u001b[0;36minner\u001b[0;34m(ax, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1810\u001b[0m warnings.warn(msg % (label_namer, func.__name__),\n\u001b[1;32m 1811\u001b[0m RuntimeWarning, stacklevel=2)\n\u001b[0;32m-> 1812\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1813\u001b[0m \u001b[0mpre_doc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minner\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__doc__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1814\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mpre_doc\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/matplotlib/axes/_axes.py\u001b[0m in \u001b[0;36mcontourf\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 5650\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcla\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5651\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'filled'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 5652\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mmcontour\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mQuadContourSet\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5653\u001b[0m \u001b[0mcontourf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__doc__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmcontour\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mQuadContourSet\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontour_doc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5654\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/matplotlib/contour.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, ax, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1422\u001b[0m \u001b[0mare\u001b[0m \u001b[0mdescribed\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mQuadContourSet\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontour_doc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1423\u001b[0m \"\"\"\n\u001b[0;32m-> 1424\u001b[0;31m \u001b[0mContourSet\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1425\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1426\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_process_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/matplotlib/contour.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, ax, *args, **kwargs)\u001b[0m\n\u001b[1;32m 861\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_transform\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'transform'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 862\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 863\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_process_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 864\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_process_levels\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 865\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/matplotlib/contour.py\u001b[0m in \u001b[0;36m_process_args\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1443\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_corner_mask\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmpl\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrcParams\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'contour.corner_mask'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1444\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1445\u001b[0;31m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mz\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_contour_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1446\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1447\u001b[0m \u001b[0m_mask\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgetmask\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mz\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/matplotlib/contour.py\u001b[0m in \u001b[0;36m_contour_args\u001b[0;34m(self, args, kwargs)\u001b[0m\n\u001b[1;32m 1526\u001b[0m \u001b[0margs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1527\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mNargs\u001b[0m \u001b[0;34m<=\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1528\u001b[0;31m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mz\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_check_xyz\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1529\u001b[0m \u001b[0margs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1530\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/matplotlib/contour.py\u001b[0m in \u001b[0;36m_check_xyz\u001b[0;34m(self, args, kwargs)\u001b[0m\n\u001b[1;32m 1560\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1561\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mz\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1562\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Input z must be a 2D array.\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1563\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1564\u001b[0m \u001b[0mNy\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mNx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mz\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: Input z must be a 2D array." ] }, { "data": { "image/png": "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\njY3FiRMn4vz58zE0NBSdnZ1TznR2dsZ7770XERGHDx+OhQsXxs0331yfiQFgjqn6znrevHkxMDAQ\nGzdujKIooq+vL9rb22Pfvn1RKpWiv78/7r///jh48GA8+OCDcf3118dLL73UiNkBYE4oFUVRzPYQ\nAMDl+QUzAEhOrAEgObEGgOTqHmv3Fa+/ajvev39/9PT0RE9PTzz22GPx+eefz8KUV7da/juO+M8d\n/+688844cOBAA6e7dtSy50OHDsW6detizZo1sX79+gZPePWrtuPvvvsunnzyyejt7Y21a9fG4ODg\nLEx5ddu6dWvce++9sXbt2sueueLuFXV08eLF4pe//GXxz3/+szh//nzR09NTHDt2bMqZv/71r8Xv\nfve7oiiK4vDhw8VvfvObeo50zallx//4xz+Kb7/9tiiKojh48KAdX6Fadvz/z/32t78tNm3aVPz5\nz3+ehUmvbrXs+dtvvy0eeuih4uTJk0VRFMW//vWv2Rj1qlXLjl977bXi97//fVEU/9nvz3/+8+LC\nhQuzMe5V629/+1tx5MiRYs2aNT/69el0r67vrN1XvP5q2fHdd98dzc3Nk392K9grU8uOIyLeeuut\n6OrqisWLF8/ClFe/Wva8f//+WLVq1eRNl+z6ytSy41KpFOfOnYuIiHPnzsWiRYuiqanq3/Llv6xY\nsSIWLlx42a9Pp3t1jbX7itdfLTv+b++8807cd999jRjtmlHLjiuVSnz44Yfx+OOPN3q8a0Ytez5+\n/HicOXMm1q9fHw8//PDkzZioTS07fuKJJ+LYsWOxcuXK6O3tja1btzZ6zGvedLrn5dIc8sknn8Tg\n4GC8/fbbsz3KNefFF1+MzZs3T14Xbl9QFxcvXowjR47EG2+8Ed9//308+uijcc8990RbW9tsj3bN\n+Oijj+KOO+6IN998M8bGxmLDhg3x/vvvxw033DDbo81pdY11Pe8rzn/UsuOIiKNHj8bzzz8fr7/+\netx4442NHPGqV8uOP/3003j22WejKIr4+uuvY2RkJJqamn5wa14ur5Y9l8vluOmmm2LBggWxYMGC\nWLFiRRw9elSsa1TLjgcHB2PTpk0REbF8+fK47bbb4ssvv4yOjo6Gznotm0736voxuPuK118tOx4f\nH49nnnkmXn755Vi+fPksTXr1qmXHw8PDMTw8HH/5y1+iu7s7tm3bJtRXqNb/X/z973+Pixcvxr//\n/e8YHR2N9vb2WZr46lPLjm+99db4+OOPIyLi9OnTcfz48Vi2bNlsjHtV+6lP16bTvbq+s3Zf8fqr\nZcevvvpqnDlzJl544YUoiiKampri3Xffne3Rrxq17Jj/XS17bm9vj5UrV0ZPT09cd9118cgjj8Tt\nt98+26NfNWrZ8VNPPRVbtmyZ/GtHmzdvjkWLFs3y5FeX5557Lg4dOhTffPNNPPDAA/H000/HhQsX\n/qfuuTc4ACTnDmYAkJxYA0ByYg0AyYk1ACQn1gCQnFgDQHJiDQDJiTUAJPd/S+KUsZS6akMAAAAA\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "contourf = plt.contourf(x, y, x + y)\n", "plt.colorbar(contourf)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[[1, 5],\n", " [3, 7]],\n", "\n", " [[2, 6],\n", " [4, 8]]])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ary = np.array([1,2,3,4,5,6,7,8]).reshape(2,2,2).T\n", "ary" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([1, 5, 3, 7, 2, 6, 4, 8])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ary.ravel()" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012345
0012123
1345456
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5\n", "0 0 1 2 1 2 3\n", "1 3 4 5 4 5 6" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.c_.html\n", "# http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.r_.html\n", "# http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.concatenate.html\n", "#\n", "ar1 = np.array(range(6)).reshape(2, 3)\n", "ar2 = np.array(range(1, 7)).reshape(2, 3)\n", "\n", "c_ = np.c_[ar1, ar2]\n", "r_ = np.r_[ar1, ar2]\n", "concat_r = np.concatenate([ar1, ar2])\n", "concat_c = np.concatenate([ar1, ar2], axis=1)\n", "\n", "pd.DataFrame(c_)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012
0012
1345
2123
3456
\n", "
" ], "text/plain": [ " 0 1 2\n", "0 0 1 2\n", "1 3 4 5\n", "2 1 2 3\n", "3 4 5 6" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(r_)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(pd.DataFrame(r_) == pd.DataFrame(concat_r)).all().sum()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(pd.DataFrame(c_) == pd.DataFrame(concat_c)).all().sum()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 1)", "output_type": "error", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m Function\tDescription\u001b[0m\n\u001b[0m \t ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "Function\tDescription\n", "diag\t対角要素を抜き出す\n", "dot\t内積\n", "trace\t対角要素の和\n", "det\t行列式\n", "eig\t固有値と固有ベクトルへ分解\n", "inv\t転置\n", "pinv\tムーア-ペンローズの擬似逆行列\n", "qr\tQR分解\n", "svd\tSVD分解\n", "solve\tAが正方行列のときAx=bのxを求める\n", "stsq\t最小二乗解を計算" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[1, 1],\n", " [2, 4]])" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([1, 4])" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.diag(a)" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([1, 4])" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a.diagonal()" ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 3, 5],\n", " [10, 18]])" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.dot(a, a)" ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 3, 5],\n", " [10, 18]])" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a.dot(a)" ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 3, 5],\n", " [10, 18]])" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a @ a" ] }, { "cell_type": "code", "execution_count": 88, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.trace(a)" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a.trace()" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "2.0" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.det(a)" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "(array([ 0.43844719, 4.56155281]), array([[-0.87192821, -0.27032301],\n", " [ 0.48963374, -0.96276969]]))" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.eig(a)" ] }, { "cell_type": "code", "execution_count": 100, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 2. , -0.5],\n", " [-1. , 0.5]])" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.inv(a)" ] }, { "cell_type": "code", "execution_count": 106, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 2. , -0.5],\n", " [-1. , 0.5]])" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.pinv(a)" ] }, { "cell_type": "code", "execution_count": 107, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(array([[-0.4472136 , -0.89442719],\n", " [-0.89442719, 0.4472136 ]]), array([[-2.23606798, -4.02492236],\n", " [ 0. , 0.89442719]]))" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.qr(a)" ] }, { "cell_type": "code", "execution_count": 109, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(array([[-0.28978415, -0.95709203],\n", " [-0.95709203, 0.28978415]]),\n", " array([ 4.6708301 , 0.42818941]),\n", " array([[-0.47185793, -0.8816746 ],\n", " [-0.8816746 , 0.47185793]]))" ] }, "execution_count": 109, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.svd(a)" ] }, { "cell_type": "code", "execution_count": 108, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 1., 0.],\n", " [-0., 1.]])" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.solve(a, a)" ] }, { "cell_type": "code", "execution_count": 112, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(array([[ 1.00000000e+00, 3.31004554e-16],\n", " [ 2.75837128e-16, 1.00000000e+00]]),\n", " array([], dtype=float64),\n", " 2,\n", " array([ 4.6708301 , 0.42818941]))" ] }, "execution_count": 112, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.lstsq(a, a)" ] }, { "cell_type": "code", "execution_count": 98, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[-2, -2],\n", " [-3, -5]])" ] }, "execution_count": 98, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.invert(a)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "\"\"\"\n", "x + y = 3\n", "2x + 4y = 10\n", "([[1, 1], ([[x], ([[3],\n", " * = \n", " [2, 4]]) [y]]) [10]])\n", "\"\"\"" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[0, 1],\n", " [2, 3]])" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.arange(4).reshape(2, 2)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1 1]\n", " [2 4]] \n", "\n", " [[ 3]\n", " [10]]\n" ] } ], "source": [ "a = np.array([[1, 1], [2, 4]])\n", "b = np.array([[3], [10]])\n", "print(a, \"\\n\"*2, b)" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [], "source": [ "type(a)\n", "?np.ndarray" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1.],\n", " [ 2.]])" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.solve(a, b)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1.],\n", " [ 2.]])" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.inv(a).dot(b)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 6. , -1.5],\n", " [-10. , 5. ]])" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# http://docs.scipy.org/doc/numpy/reference/generated/numpy.multiply.html\n", "np.multiply(np.linalg.inv(a), b)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 1.],\n", " [ 2.]])" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.inv(a) @ b" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "matrix([[ 1.],\n", " [ 2.]])" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.matrix(np.linalg.inv(a)) * b" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 3, 3],\n", " [20, 40]])" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a * b" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[13],\n", " [46]])" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a.dot(b)" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 9, 30],\n", " [ 30, 100]])" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b.dot(b.T)" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[109]])" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b.T.dot(b)" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 9, 30],\n", " [ 30, 100]])" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.inner(b, b)" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[109]])" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.inner(b.T, b.T)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "array([[ True, True],\n", " [ True, True],\n", " [ True, True],\n", " [ True, True]], dtype=bool)" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "outer_ab = np.outer(a, b)\n", "outer_ba = np.outer(b, a)\n", "outer_ab == outer_ba.T" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 3, 10],\n", " [ 3, 10],\n", " [ 6, 20],\n", " [12, 40]])" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "outer_ab" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[23],\n", " [43]])" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.dot(a.T, b)" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([['a', 'aa', 'aaa'],\n", " ['b', 'bb', 'bbb'],\n", " ['c', 'cc', 'ccc']], dtype=object)" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# ?np.outer\n", "np.outer(np.array(['a', 'b', 'c'], dtype=object), [1, 2, 3])" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[1, 2, 3],\n", " [2, 4, 6],\n", " [3, 6, 9]])" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.outer(np.array([1,2,3]), [1, 2, 3])" ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "array([[1],\n", " [2],\n", " [3]])" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.array([1,2,3]).reshape(3, 1)" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[1, 2, 3],\n", " [2, 4, 6],\n", " [3, 6, 9]])" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.array([1,2,3]).reshape(3, 1).dot(np.array([1,2,3]).reshape(1, 3))" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.plt.plot([0,1], [0,1]); sns.plt.title('tofu - 豆腐')" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.set(font='IPAexGothic')\n", "sns.plt.plot([0,1], [0,1]); sns.plt.title('tofu - 豆腐')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "hide_input": false, "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n", " warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n" ] }, { "data": { "text/plain": [ "['/Library/Fonts/Microsoft/Candara Italic.ttf',\n", " '/Library/Fonts/Farisi.ttf',\n", " '/Library/Fonts/Microsoft/MS Mincho.ttf',\n", " '/Library/Fonts/PCmyoungjo.ttf',\n", " '/System/Library/Fonts/Apple Braille Outline 8 Dot.ttf',\n", " '/Users/knt/Library/Fonts/Ricty-Bold.ttf',\n", " '/System/Library/Fonts/SFNSText-Bold.otf',\n", " '/Library/Fonts/Kokonor.ttf',\n", " '/Library/Fonts/Microsoft/Tw Cen MT Bold.ttf',\n", " '/System/Library/Fonts/SFNSDisplay-Light.otf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMBatnanBold.otf',\n", " '/Library/Fonts/Tahoma Bold.ttf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMMardinBold.otf',\n", " '/System/Library/Fonts/SFNSDisplay-Medium.otf',\n", " '/Library/Fonts/Silom.ttf',\n", " '/Library/Fonts/Microsoft/MS Reference Sans Serif.ttf',\n", " '/Library/Fonts/AppleMyungjo.ttf',\n", " '/Library/Fonts/Chalkduster.ttf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMAntioch.otf',\n", " '/Library/Fonts/Microsoft/Verdana Italic.ttf',\n", " '/Library/Fonts/Microsoft/Meiryo Bold.ttf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMMalankara.otf',\n", " '/Library/Fonts/Microsoft/Gulim.ttf',\n", " '/Library/Fonts/Mishafi.ttf',\n", " '/Library/Fonts/STIXIntDReg.otf',\n", " '/Library/Fonts/Microsoft/Bookshelf Symbol 7.ttf',\n", " '/Library/Fonts/Courier New Bold.ttf',\n", " '/usr/local/share/fonts/migu-1m-bold.ttf',\n", " '/Library/Fonts/Microsoft/Verdana Bold Italic.ttf',\n", " '/Library/Fonts/STIXIntUpDBol.otf',\n", " '/Library/Fonts/Microsoft/taile.ttf',\n", " '/Library/Fonts/Khmer Sangam MN.ttf',\n", " '/Library/Fonts/Microsoft/Perpetua Italic.ttf',\n", " '/Library/Fonts/Microsoft/Corbel Bold Italic.ttf',\n", " '/System/Library/Fonts/SFNSText-BoldG1.otf',\n", " '/Library/Fonts/Microsoft/Candara.ttf',\n", " '/Library/Fonts/STIXIntDBol.otf',\n", " '/usr/local/share/fonts/Ricty-Bold.ttf',\n", " '/Library/Fonts/InaiMathi.ttf',\n", " '/Library/Fonts/Microsoft/Batang.ttf',\n", " '/Library/Fonts/STIXIntSmReg.otf',\n", " '/Library/Fonts/Brush Script.ttf',\n", " '/System/Library/Fonts/SFNSText-BoldItalicG3.otf',\n", " '/System/Library/Fonts/SFNSText-RegularItalicG1.otf',\n", " '/Library/Fonts/Bodoni 72 Smallcaps Book.ttf',\n", " '/Library/Fonts/Microsoft/Perpetua Bold.ttf',\n", " '/Library/Fonts/Microsoft/Calibri Bold Italic.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/luximr.ttf',\n", " '/Library/Fonts/Microsoft/MS Reference Specialty.ttf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMJerusalemBold.otf',\n", " '/System/Library/Fonts/SFNSText-BoldItalicG1.otf',\n", " '/Library/Fonts/Microsoft/Candara Bold Italic.ttf',\n", " '/Library/Fonts/STIXIntUpSmBol.otf',\n", " '/Library/Fonts/Arial Narrow Italic.ttf',\n", " '/Library/Fonts/Microsoft/Meiryo.ttf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMMardin.otf',\n", " '/System/Library/Fonts/Apple Braille Outline 6 Dot.ttf',\n", " '/System/Library/Fonts/Symbol.ttf',\n", " '/Library/Fonts/Microsoft/Gill Sans MT Bold.ttf',\n", " '/Library/Fonts/Trebuchet MS Italic.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/VeraSeBd.ttf',\n", " '/Library/Fonts/Arial Black.ttf',\n", " '/System/Library/Fonts/SFNSText-BoldItalic.otf',\n", " '/Library/Fonts/Microsoft/Consolas Italic.ttf',\n", " '/Library/Fonts/Bradley Hand Bold.ttf',\n", " '/Library/Fonts/Microsoft/Arial Bold Italic.ttf',\n", " '/Library/Fonts/DIN Alternate Bold.ttf',\n", " '/System/Library/Fonts/SFNSText-Medium.otf',\n", " '/Library/Fonts/Microsoft/Candara Bold.ttf',\n", " '/Library/Fonts/Arial Unicode.ttf',\n", " '/Library/Fonts/Georgia Bold Italic.ttf',\n", " '/Library/Fonts/STIXNonUni.otf',\n", " '/Library/Fonts/STIXNonUniBol.otf',\n", " '/Library/Fonts/Microsoft/Cambria Bold Italic.ttf',\n", " '/Library/Fonts/STIXIntUpReg.otf',\n", " '/Users/knt/Library/Fonts/Ricty-Regular.ttf',\n", " '/Library/Fonts/Microsoft/Palatino Linotype Italic.ttf',\n", " '/Library/Fonts/Mishafi Gold.ttf',\n", " '/Library/Fonts/Yu Gothic Medium.otf',\n", " '/Library/Fonts/Verdana Bold Italic.ttf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMQenNeshrin.otf',\n", " '/Library/Fonts/Times New Roman Bold.ttf',\n", " '/Library/Fonts/Microsoft/Franklin Gothic Book Italic.ttf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMJerusalem.otf',\n", " '/Library/Fonts/Microsoft/MS PGothic.ttf',\n", " '/Library/Fonts/Microsoft/Calibri.ttf',\n", " '/Library/Fonts/Arial Rounded Bold.ttf',\n", " '/Library/Fonts/Microsoft/Franklin Gothic Medium Italic.ttf',\n", " '/Library/Fonts/儷宋 Pro.ttf',\n", " '/Library/Fonts/儷黑 Pro.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/GohaTibebZemen.ttf',\n", " '/Library/Fonts/Andale Mono.ttf',\n", " '/Library/Fonts/Impact.ttf',\n", " '/usr/local/share/fonts/Inconsolata.otf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMCtesiphon.otf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMEdessa.otf',\n", " '/Library/Fonts/Microsoft/SimSun.ttf',\n", " '/Library/Fonts/Microsoft/Times New Roman Bold.ttf',\n", " '/Library/Fonts/Times New Roman Italic.ttf',\n", " '/Library/Fonts/Ayuthaya.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/VeraMoIt.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/luximri.ttf',\n", " '/Library/Fonts/Microsoft/Gabriola.ttf',\n", " '/Library/Fonts/Microsoft/msyi.ttf',\n", " '/Library/Fonts/华文细黑.ttf',\n", " '/usr/local/share/fonts/RictyDiscord-Bold.ttf',\n", " '/Library/Fonts/STIXSizOneSymBol.otf',\n", " '/System/Library/Fonts/Apple Braille Pinpoint 8 Dot.ttf',\n", " '/Library/Fonts/Trebuchet MS.ttf',\n", " '/Library/Fonts/Microsoft/Consolas Bold.ttf',\n", " '/Library/Fonts/STIXIntUpDReg.otf',\n", " '/Library/Fonts/DIN Condensed Bold.ttf',\n", " '/Library/Fonts/Microsoft/Tw Cen MT Italic.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/luxirri.ttf',\n", " '/Library/Fonts/WeibeiSC-Bold.otf',\n", " '/Library/Fonts/PlantagenetCherokee.ttf',\n", " '/Library/Fonts/Arial.ttf',\n", " '/System/Library/Fonts/SFNSText-SemiboldItalic.otf',\n", " '/Library/Fonts/STIXGeneralBolIta.otf',\n", " '/System/Library/Fonts/SFNSText-RegularItalic.otf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMAdiabene.otf',\n", " '/Library/Fonts/Microsoft/HGRSMP.TTF',\n", " '/Library/Fonts/Sathu.ttf',\n", " '/Library/Fonts/Microsoft/Tw Cen MT Bold Italic.ttf',\n", " '/System/Library/Fonts/SFNSDisplay-Semibold.otf',\n", " '/Library/Fonts/Microsoft/Arial Bold.ttf',\n", " '/Library/Fonts/Microsoft/Times New Roman.ttf',\n", " '/System/Library/Fonts/SFNSDisplay-Heavy.otf',\n", " '/System/Library/Fonts/SFNSText-MediumItalic.otf',\n", " '/Library/Fonts/AppleGothic.ttf',\n", " '/Library/Fonts/Microsoft/Wingdings 3.ttf',\n", " '/System/Library/Fonts/SFNSDisplay-Black.otf',\n", " '/Library/Fonts/Microsoft/SimSun-ExtB.ttf',\n", " '/Library/Fonts/Apple Chancery.ttf',\n", " '/Library/Fonts/STIXSizThreeSymBol.otf',\n", " '/Library/Fonts/Gurmukhi.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/luxisri.ttf',\n", " '/Library/Fonts/YuppySC-Regular.otf',\n", " '/Library/Fonts/Osaka.ttf',\n", " '/Library/Fonts/Microsoft/Arial.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/VeraSe.ttf',\n", " '/Library/Fonts/Microsoft/Constantia.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/VeraIt.ttf',\n", " '/Library/Fonts/Microsoft/Verdana.ttf',\n", " '/Library/Fonts/Microsoft/Brush Script.ttf',\n", " '/Library/Fonts/Microsoft/Calibri Bold.ttf',\n", " '/System/Library/Fonts/SFNSText-HeavyItalic.otf',\n", " '/Library/Fonts/Arial Narrow.ttf',\n", " '/Library/Fonts/Verdana.ttf',\n", " '/Library/Fonts/STIXGeneralBol.otf',\n", " '/Library/Fonts/Georgia.ttf',\n", " '/Library/Fonts/Microsoft/Cambria Italic.ttf',\n", " '/Library/Fonts/SignPainter.otf',\n", " '/Library/Fonts/Times New Roman Bold Italic.ttf',\n", " '/Library/Fonts/Microsoft/Constantia Italic.ttf',\n", " '/Library/Fonts/Georgia Italic.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/luximbi.ttf',\n", " '/System/Library/Fonts/SFNSText-BoldItalicG2.otf',\n", " '/usr/X11/lib/X11/fonts/TTF/luxirbi.ttf',\n", " '/Library/Fonts/Hoefler Text Ornaments.ttf',\n", " '/Library/Fonts/Microsoft/MS Gothic.ttf',\n", " '/Library/Fonts/Microsoft/Verdana Bold.ttf',\n", " '/Library/Fonts/Microsoft/SimHei.ttf',\n", " '/Library/Fonts/STIXSizFiveSymReg.otf',\n", " '/Library/Fonts/Microsoft/mingliu_hkscs.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/luxisb.ttf',\n", " '/Library/Fonts/Microsoft/himalaya.ttf',\n", " '/System/Library/Fonts/Apple Braille.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/VeraMoBd.ttf',\n", " '/Library/Fonts/Microsoft/MingLiU-ExtB.ttf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMUrhoy.otf',\n", " '/Library/Fonts/Skia.ttf',\n", " '/Library/Fonts/Wingdings 3.ttf',\n", " '/Library/Fonts/STIXSizFourSymReg.otf',\n", " '/usr/X11/lib/X11/fonts/OTF/GohaTibebZemen.otf',\n", " '/Library/Fonts/Microsoft/Lucida Sans Unicode.ttf',\n", " '/System/Library/Fonts/SFNSText-Light.otf',\n", " '/Library/Fonts/Krungthep.ttf',\n", " '/Library/Fonts/Trattatello.ttf',\n", " '/Library/Fonts/Microsoft/Corbel.ttf',\n", " '/System/Library/Fonts/SFNSText-Regular.otf',\n", " '/Library/Fonts/Microsoft Sans Serif.ttf',\n", " '/Library/Fonts/Arial Bold.ttf',\n", " '/Library/Fonts/Microsoft/Franklin Gothic Medium.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/luxirr.ttf',\n", " '/Library/Fonts/Microsoft/Cambria.ttf',\n", " '/Library/Fonts/Webdings.ttf',\n", " '/Library/Fonts/NISC18030.ttf',\n", " '/System/Library/Fonts/Apple Braille Pinpoint 6 Dot.ttf',\n", " '/Library/Fonts/STIXVar.otf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMTalada.otf',\n", " '/Library/Fonts/Microsoft/Palatino Linotype.ttf',\n", " '/Library/Fonts/Courier New.ttf',\n", " '/Library/Fonts/STIXSizOneSymReg.otf',\n", " '/Library/Fonts/WawaTC-Regular.otf',\n", " '/Library/Fonts/Gungseouche.ttf',\n", " '/System/Library/Fonts/SFNSText-Heavy.otf',\n", " '/usr/local/share/fonts/Ricty-Regular.ttf',\n", " '/Library/Fonts/Comic Sans MS.ttf',\n", " '/Library/Fonts/Yu Gothic Bold.otf',\n", " '/Library/Fonts/Verdana Italic.ttf',\n", " '/Library/Fonts/Tahoma.ttf',\n", " '/Library/Fonts/Arial Narrow Bold.ttf',\n", " '/System/Library/Fonts/SFNSText-BoldG2.otf',\n", " '/Library/Fonts/Bodoni Ornaments.ttf',\n", " '/Library/Fonts/Microsoft/MS PMincho.ttf',\n", " '/Library/Fonts/STIXGeneral.otf',\n", " '/System/Library/Fonts/SFNSDisplay-Regular.otf',\n", " '/Library/Fonts/Microsoft/Times New Roman Bold Italic.ttf',\n", " '/System/Library/Fonts/SFNSText-RegularG3.otf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMKharput.otf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMUrhoyBold.otf',\n", " '/System/Library/Fonts/Keyboard.ttf',\n", " '/Library/Fonts/Microsoft/Palatino Linotype Bold Italic.ttf',\n", " '/Library/Fonts/Arial Italic.ttf',\n", " '/Library/Fonts/Courier New Italic.ttf',\n", " '/Library/Fonts/Times New Roman.ttf',\n", " '/Library/Fonts/Wingdings.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/Vera.ttf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMMidyat.otf',\n", " '/Library/Fonts/Herculanum.ttf',\n", " '/Library/Fonts/HeadlineA.ttf',\n", " '/System/Library/Fonts/SFNSDisplay-Thin.otf',\n", " '/usr/X11/lib/X11/fonts/TTF/luximb.ttf',\n", " '/Library/Fonts/Microsoft/Gill Sans MT.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/VeraMono.ttf',\n", " '/Library/Fonts/STIXIntSmBol.otf',\n", " '/System/Library/Fonts/SFNSText-RegularG2.otf',\n", " '/Library/Fonts/Microsoft/Calibri Italic.ttf',\n", " '/usr/local/share/fonts/RictyDiscord-Regular.ttf',\n", " '/System/Library/Fonts/SFNSText-Semibold.otf',\n", " '/Library/Fonts/Microsoft/Consolas.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/luxirb.ttf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMJerusalemItalic.otf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMBatnan.otf',\n", " '/Library/Fonts/Verdana Bold.ttf',\n", " '/Library/Fonts/BigCaslon.ttf',\n", " '/System/Library/Fonts/Apple Color Emoji.ttf',\n", " '/Library/Fonts/Microsoft/Meiryo Bold Italic.ttf',\n", " '/Library/Fonts/Microsoft/Corbel Bold.ttf',\n", " '/Library/Fonts/Comic Sans MS Bold.ttf',\n", " '/usr/local/share/fonts/migu-1m-regular.ttf',\n", " '/Library/Fonts/STIXSizThreeSymReg.otf',\n", " '/Library/Fonts/Microsoft/Gill Sans MT Bold Italic.ttf',\n", " '/Library/Fonts/Microsoft/MingLiU.ttf',\n", " '/System/Library/Fonts/SFNSDisplay-Ultralight.otf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMNisibinOutline.otf',\n", " '/Library/Fonts/Microsoft/Perpetua.ttf',\n", " '/Library/Fonts/Microsoft/Wingdings.ttf',\n", " '/Library/Fonts/Microsoft/Consolas Bold Italic.ttf',\n", " '/Library/Fonts/Georgia Bold.ttf',\n", " '/Library/Fonts/STIXNonUniIta.otf',\n", " '/Library/Fonts/Luminari.ttf',\n", " '/Library/Fonts/Microsoft/monbaiti.ttf',\n", " '/Library/Fonts/Microsoft/Gill Sans MT Italic.ttf',\n", " '/Library/Fonts/Microsoft/PMingLiU.ttf',\n", " '/Library/Fonts/Microsoft/Tw Cen MT.ttf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMTurAbdin.otf',\n", " '/Users/knt/Library/Fonts/RictyDiscord-Bold.ttf',\n", " '/Library/Fonts/Microsoft/Constantia Bold.ttf',\n", " '/Library/Fonts/Microsoft/Meiryo Italic.ttf',\n", " '/Library/Fonts/Microsoft/Palatino Linotype Bold.ttf',\n", " '/Library/Fonts/Microsoft/Wingdings 2.ttf',\n", " '/Library/Fonts/Microsoft/Cambria Bold.ttf',\n", " '/Library/Fonts/Arial Bold Italic.ttf',\n", " '/Library/Fonts/Microsoft/Times New Roman Italic.ttf',\n", " '/Library/Fonts/华文仿宋.ttf',\n", " '/Library/Fonts/Wingdings 2.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/luxisbi.ttf',\n", " '/Library/Fonts/Trebuchet MS Bold.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/luxisr.ttf',\n", " '/Library/Fonts/WawaSC-Regular.otf',\n", " '/Library/Fonts/STIXGeneralItalic.otf',\n", " '/Library/Fonts/STIXIntUpBol.otf',\n", " '/Users/knt/Library/Fonts/RictyDiscord-Regular.ttf',\n", " '/Library/Fonts/OsakaMono.ttf',\n", " '/System/Library/Fonts/SFNSText-BoldG3.otf',\n", " '/Library/Fonts/Diwan Thuluth.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/VeraMoBI.ttf',\n", " '/Library/Fonts/Lao Sangam MN.ttf',\n", " '/Library/Fonts/Microsoft/Marlett.ttf',\n", " '/Library/Fonts/Microsoft/Franklin Gothic Book.ttf',\n", " '/Library/Fonts/Microsoft/Perpetua Bold Italic.ttf',\n", " '/Library/Fonts/STIXNonUniBolIta.otf',\n", " '/Library/Fonts/Zapfino.ttf',\n", " '/Library/Fonts/Microsoft/Arial Italic.ttf',\n", " '/Library/Fonts/Arial Narrow Bold Italic.ttf',\n", " '/Library/Fonts/Pilgiche.ttf',\n", " '/System/Library/Fonts/SFNSText-RegularG1.otf',\n", " '/Library/Fonts/Microsoft/TaiLeb.ttf',\n", " '/System/Library/Fonts/LastResort.ttf',\n", " '/Library/Fonts/STIXSizTwoSymReg.otf',\n", " '/Library/Fonts/WeibeiTC-Bold.otf',\n", " '/Library/Fonts/STIXVarBol.otf',\n", " '/Library/Fonts/Microsoft/Corbel Italic.ttf',\n", " '/Library/Fonts/STIXSizTwoSymBol.otf',\n", " '/System/Library/Fonts/SFNSText-LightItalic.otf',\n", " '/System/Library/Fonts/SFNSText-RegularItalicG2.otf',\n", " '/Library/Fonts/Trebuchet MS Bold Italic.ttf',\n", " '/Library/Fonts/Microsoft/MingLiU_HKSCS-ExtB.ttf',\n", " '/System/Library/Fonts/SFNSDisplay-Bold.otf',\n", " '/System/Library/Fonts/SFNSText-RegularItalicG3.otf',\n", " '/Library/Fonts/Microsoft/PMingLiU-ExtB.ttf',\n", " '/Library/Fonts/Courier New Bold Italic.ttf',\n", " '/Library/Fonts/Microsoft/Lucida Console.ttf',\n", " '/Library/Fonts/STIXSizFourSymBol.otf',\n", " '/Library/Fonts/STIXIntUpSmReg.otf',\n", " '/Library/Fonts/Microsoft/Constantia Bold Italic.ttf',\n", " '/Library/Fonts/华文黑体.ttf',\n", " '/usr/X11/lib/X11/fonts/TTF/VeraBI.ttf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMNisibin.otf',\n", " '/System/Library/Fonts/ZapfDingbats.ttf',\n", " '/Library/Fonts/Microsoft/Cambria Math.ttf',\n", " '/usr/X11/lib/X11/fonts/OTF/SyrCOMJerusalemOutline.otf',\n", " '/usr/X11/lib/X11/fonts/TTF/VeraBd.ttf',\n", " '/Library/Fonts/YuppyTC-Regular.otf']" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import matplotlib.font_manager as fm\n", "import pandas as pd\n", "# フォントの一覧\n", "fonts = fm.findSystemFonts()\n", "fonts" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "ename": "RuntimeError", "evalue": "In FT2Font: Could not set the fontsize", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mf\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mfonts\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mfont\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mFontProperties\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0ml\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfont\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfont\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_family\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ml\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolumns\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'path'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'name'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'family'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;31m# IPAフォントが存在することの確認\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/knt/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/matplotlib/font_manager.py\u001b[0m in \u001b[0;36mget_name\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 735\u001b[0m \u001b[0mproperties\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 736\u001b[0m \"\"\"\n\u001b[0;32m--> 737\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mft2font\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mFT2Font\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfindfont\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfamily_name\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 738\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 739\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget_style\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mRuntimeError\u001b[0m: In FT2Font: Could not set the fontsize" ] } ], "source": [ "# len(fonts) => 100以上はあるはず\n", "# データフレームへの詰め込み\n", "l = []\n", "for f in fonts:\n", " font = fm.FontProperties(fname=f)\n", " l.append((f, font.get_name(), font.get_family()))\n", "df = pd.DataFrame(l, columns=['path', 'name', 'family'])\n", "# IPAフォントが存在することの確認\n", "df[df['path'].apply(lambda s: 'IPA' in s)]\n", "df" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(20, 100)\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nRsXFxdt87B/+8AedcMIJHXpergwBALHK5zZpWVmZli9frubmZm3evFn19fUqLy/Pedz69ev1pz/9\naZtz28KVIQAgVvm8MuzUqZNqampUXV2tbDarqqoqlZaWqq6uTqlUSmPGjJEkLViwQAMGDNCuu+7a\nsdeczWazeXvVAIDE+SitYXvNmDEjplfScVwZAgBiRW1SAAAKEFeGAIBYFeKVIYshACBWLIYAgMRj\nMQQAJB6LIQAg8VgMAQCJV4iLIakVAIDE48oQABCrQrwyZDEEAMSKxRAAkHgshgCAxGMxBAAkXiEu\nhtxNCgBIPK4MAQCxKsQrQxZDAECsWAwBAInHYggASDwWQwBA4hXiYsjdpACAxOPKEAAQq6KiwrvO\nKrxXDAD4h5ZKpXbov/Y0NjZq6NChqqio0PTp07f5mCeeeEInnniiTjjhBJ1++untPudOvTL88Y9/\nHI0rKiqCuf79+0fjF198MZj7/Oc/H40XL14czD311FPB8b/+679u8++TpNra2uD46KOPjsY9evQI\n5uwJzmazwdwhhxwSHA8ePDga9+nTJ5g766yzovHkyZODuWuuuSY4Puqoo6LxT3/602Dun//5n6Px\nKaecEsx169YtOP7DH/4QjT/3uc8Fc2eeeWY0Pu+884K53/3ud8HxYYcdFo0ff/zxYO5rX/taND7t\ntNOCuc985jPB8W9+85tofN999wVzhx9+eHB8/vnnR2P/Xl966aXRuK6uLph7/fXXg+P3338/Gv/H\nf/xHMLdixYpofNJJJwVzr732WnB87rnnRuOHHnoomKuqqorGL7/8cjC32267BccvvfRSNB4/fnww\n19TUFI2feeaZYO7RRx8Njm+++eZo7P/Nffv2bXXuzjvvDI533XXXaPz1r389mPvLX/4SHC9btiwa\nX3nllcFcc3Nzq3O//OUvg+ORI0dG48rKymDun/7pn6Lx008/Hcz59+R73/teNH777beDueuuuy4a\n2++eFL5f/vUdeuihwZy9sjnggAPafD1bt26NxvZ7IYWf9+uvvz6Ye+6554LjQYMGReMbbrghmLPn\nTpJuvPHGVh9rf36+8cYbwVxDQ0Nw3KlTJ+VDPmOGLS0tmjJlimpra1VcXKyqqiqVl5ertLQ0esz6\n9et1xRVX6JZbblE6ndaaNWvafV6uDAEAscrnlWFTU5N69+6tkpISdenSRZWVlTmL/Ny5c/WNb3xD\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Nx = 100\n", "Ny = 20\n", "\n", "a = np.random.rand(Ny, Nx)\n", "print(a.shape)\n", "x = range(Nx)\n", "y = range(Ny)\n", "X, Y = np.meshgrid(x, y)\n", "\n", "plt.pcolormesh(X, Y, a)\n", "plt.axis(\"image\")\n", "plt.colorbar()\n", "# plt.tight_layout()\n", "#plt" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(1.5, 4.900000000000003)" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn import linear_model, datasets\n", "\n", "# import some data to play with\n", "iris = datasets.load_iris()\n", "X = iris.data[:, :2] # we only take the first two features.\n", "Y = iris.target\n", "\n", "h = .02 # step size in the mesh\n", "\n", "# we create an instance of Neighbours Classifier and fit the data.\n", "logreg = linear_model.LogisticRegression(C=1e5).fit(X, Y)\n", "\n", "# Plot the decision boundary. For that, we will assign a color to each\n", "# point in the mesh [x_min, m_max]x[y_min, y_max].\n", "x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5\n", "y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5\n", "xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))\n", "Z = logreg.predict(np.c_[xx.ravel(), yy.ravel()])\n", "\n", "# Put the result into a color plot\n", "Z = Z.reshape(xx.shape)\n", "plt.figure(1, figsize=(4, 3))\n", "plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired)\n", "\n", "# Plot also the training points\n", "plt.scatter(X[:, 0], X[:, 1], c=Y, edgecolors='k', cmap=plt.cm.Paired)\n", "#plt.xlabel('Sepal length')\n", "#plt.ylabel('Sepal width')\n", "\n", "plt.xlim(xx.min(), xx.max())\n", "plt.ylim(yy.min(), yy.max())\n", "#plt.xticks(())\n", "#plt.yticks(())\n", "\n", "#plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "name\targuments\n", "beta\t(a, b[, size])\n", "binomial\t(n, p[, size])\n", "chisquare\t(df[, size])\n", "dirichlet\t(alpha[, size])\n", "exponential\t([scale, size])\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## beta\n", "https://ja.wikipedia.org/wiki/%E3%83%99%E3%83%BC%E3%82%BF%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 142, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.beta?" ] }, { "cell_type": "code", "execution_count": 122, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/latex": [ "$$\n", "f(x; a,b) = \\frac{1}{B(\\alpha, \\beta)} x^{\\alpha - 1}\n", " (1 - x)^{\\beta - 1}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "f(x; a,b) = \\frac{1}{B(\\alpha, \\beta)} x^{\\alpha - 1}\n", " (1 - x)^{\\beta - 1}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ベータ関数" ] }, { "cell_type": "code", "execution_count": 123, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "B(\\alpha, \\beta) = \\int_0^1 t^{\\alpha - 1}\n", " (1 - t)^{\\beta - 1} dt.\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "B(\\alpha, \\beta) = \\int_0^1 t^{\\alpha - 1}\n", " (1 - t)^{\\beta - 1} dt.\n", "$$" ] }, { "cell_type": "code", "execution_count": 171, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.28408624, 0.47506511])" ] }, "execution_count": 171, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.beta(a=1, b=1, size=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## binomial\n", "https://ja.wikipedia.org/wiki/%E4%BA%8C%E9%A0%85%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 130, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.binomial?" ] }, { "cell_type": "code", "execution_count": 128, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "P(N) = \\binom{n}{N}p^N(1-p)^{n-N},\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "P(N) = \\binom{n}{N}p^N(1-p)^{n-N},\n", "$$" ] }, { "cell_type": "code", "execution_count": 170, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([55, 49])" ] }, "execution_count": 170, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.binomial(n=100, p=0.5, size=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## chisquare\n", "https://ja.wikipedia.org/wiki/%E3%82%AB%E3%82%A4%E4%BA%8C%E4%B9%97%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 162, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.chisquare?" ] }, { "cell_type": "code", "execution_count": 166, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "Q = \\sum_{i=0}^{\\mathtt{df}} X^2_i\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "Q = \\sum_{i=0}^{\\mathtt{df}} X^2_i\n", "$$" ] }, { "cell_type": "code", "execution_count": 165, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/latex": [ "$$\n", "p(x) = \\frac{(1/2)^{k/2}}{\\Gamma(k/2)}\n", " x^{k/2 - 1} e^{-x/2},\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "p(x) = \\frac{(1/2)^{k/2}}{\\Gamma(k/2)}\n", " x^{k/2 - 1} e^{-x/2},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ガンマ関数" ] }, { "cell_type": "code", "execution_count": 164, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "\\Gamma(x) = \\int_0^{-\\infty} t^{x - 1} e^{-t} dt.\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "\\Gamma(x) = \\int_0^{-\\infty} t^{x - 1} e^{-t} dt.\n", "$$" ] }, { "cell_type": "code", "execution_count": 169, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 3.11450218, 2.90912819])" ] }, "execution_count": 169, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.chisquare(df=2, size=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## dirichlet\n", "https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%A3%E3%83%AA%E3%82%AF%E3%83%AC%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 172, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.dirichlet?" ] }, { "cell_type": "code", "execution_count": 173, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "X \\approx \\prod_{i=1}^{k}{x^{\\alpha_i-1}_i}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "X \\approx \\prod_{i=1}^{k}{x^{\\alpha_i-1}_i}\n", "$$" ] }, { "cell_type": "code", "execution_count": 174, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "X = \\frac{1}{\\sum_{i=1}^k{y_i}} (y_1, \\ldots, y_n)\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "X = \\frac{1}{\\sum_{i=1}^k{y_i}} (y_1, \\ldots, y_n)\n", "$$" ] }, { "cell_type": "code", "execution_count": 180, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0.58039523, 0.18049816, 0.23910661],\n", " [ 0.02770379, 0.64163565, 0.33066056]])" ] }, "execution_count": 180, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.dirichlet(alpha=[1,1,1], size=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## exponential\n", "https://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 181, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.exponential?" ] }, { "cell_type": "code", "execution_count": 183, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", " f(x; \\frac{1}{\\beta}) = \\frac{1}{\\beta} \\exp(-\\frac{x}{\\beta})\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", " f(x; \\frac{1}{\\beta}) = \\frac{1}{\\beta} \\exp(-\\frac{x}{\\beta})\n", "$$" ] }, { "cell_type": "code", "execution_count": 192, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "\\lambda = 1/\\beta\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "\\lambda = 1/\\beta\n", "$$" ] }, { "cell_type": "code", "execution_count": 191, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.38809756, 0.20912399])" ] }, "execution_count": 191, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.exponential(scale=1.0, size=2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## f\n", "https://ja.wikipedia.org/wiki/F%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 193, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.f?\n", "# dfnum` (degrees of freedom in numerator)` and \n", "# dfden` (degrees of freedom in denominator)`" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# expression not found" ] }, { "cell_type": "code", "execution_count": 194, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 4.5921271, 6.0671125])" ] }, "execution_count": 194, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.f(dfnum=2, dfden=3, size=2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## gamma\n", "https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%B3%E3%83%9E%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 195, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.gamma?" ] }, { "cell_type": "code", "execution_count": 196, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "p(x) = x^{k-1}\\frac{e^{-x/\\theta}}{\\theta^k\\Gamma(k)}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "p(x) = x^{k-1}\\frac{e^{-x/\\theta}}{\\theta^k\\Gamma(k)}\n", "$$" ] }, { "cell_type": "code", "execution_count": 202, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 6.56908872, 1.78703692])" ] }, "execution_count": 202, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# first argument is shape\n", "np.random.gamma(shape=1.0, scale=2.0, size=2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## geometric\n", "https://ja.wikipedia.org/wiki/%E5%B9%BE%E4%BD%95%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 203, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.geometric?" ] }, { "cell_type": "code", "execution_count": 204, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "f(k) = (1 - p)^{k - 1} p\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "f(k) = (1 - p)^{k - 1} p\n", "$$" ] }, { "cell_type": "code", "execution_count": 207, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1, 10, 2, 1, 2])" ] }, "execution_count": 207, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.geometric(p=0.25, size=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## gumbel\n", "https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%B3%E3%83%99%E3%83%AB%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 211, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.gumbel?\n", "# scipy.stats.gumbel_l\n", "# scipy.stats.gumbel_r\n", "# scipy.stats.genextreme\n", "# weibull" ] }, { "cell_type": "code", "execution_count": 212, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "p(x) = \\frac{e^{-(x - \\mu)/ \\beta}}{\\beta} e^{ -e^{-(x - \\mu)/\n", " \\beta}}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "p(x) = \\frac{e^{-(x - \\mu)/ \\beta}}{\\beta} e^{ -e^{-(x - \\mu)/\n", " \\beta}}\n", "$$" ] }, { "cell_type": "code", "execution_count": 209, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1.52374816, 1.21909239, -0.34864738, 1.30255025, -0.18242571])" ] }, "execution_count": 209, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.gumbel(loc=0.0, scale=1.0, size=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## hypergeometric\n", "https://ja.wikipedia.org/wiki/%E8%B6%85%E5%B9%BE%E4%BD%95%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 215, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.hypergeometric?" ] }, { "cell_type": "code", "execution_count": 253, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "P(x) = \\frac{\\binom{m}{n}\\binom{N-m}{n-x}}{\\binom{N}{n}}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "P(x) = \\frac{\\binom{m}{n}\\binom{N-m}{n-x}}{\\binom{N}{n}}\n", "$$" ] }, { "cell_type": "code", "execution_count": 241, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "0 \\le x \\le m\n", ",\n", "n+m-N \\le x \\le n\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "0 \\le x \\le m\n", ",\n", "n+m-N \\le x \\le n\n", "$$" ] }, { "cell_type": "code", "execution_count": 252, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([78, 78, 77, 76, 76])" ] }, "execution_count": 252, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.hypergeometric(ngood=150, nbad=50, nsample=100, size=5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## laplace\n", "https://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%97%E3%83%A9%E3%82%B9%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 254, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.laplace?" ] }, { "cell_type": "code", "execution_count": 256, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/latex": [ "$$\n", "f(x; \\mu, \\lambda) = \\frac{1}{2\\lambda}\n", " \\exp\\left(-\\frac{|x - \\mu|}{\\lambda}\\right)\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "f(x; \\mu, \\lambda) = \\frac{1}{2\\lambda}\n", " \\exp\\left(-\\frac{|x - \\mu|}{\\lambda}\\right)\n", "$$" ] }, { "cell_type": "code", "execution_count": 257, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.08519469, -0.14605399, 0.45948552, 0.58416639, -0.5740138 ])" ] }, "execution_count": 257, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.laplace(loc=0.0, scale=1.0, size=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## logistic\n", "https://ja.wikipedia.org/wiki/%E3%83%AD%E3%82%B8%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 258, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.logistic?" ] }, { "cell_type": "code", "execution_count": 260, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "P(x) = P(x) = \\frac{e^{-(x-\\mu)/s}}{s(1+e^{-(x-\\mu)/s})^2}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "P(x) = P(x) = \\frac{e^{-(x-\\mu)/s}}{s(1+e^{-(x-\\mu)/s})^2}\n", "$$" ] }, { "cell_type": "code", "execution_count": 261, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1.73006169, 0.07923837, 1.69364654, 2.61801514, -0.00910529])" ] }, "execution_count": 261, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.logistic(loc=0, scale=1, size=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## lognormal\n", "https://ja.wikipedia.org/wiki/%E5%AF%BE%E6%95%B0%E6%AD%A3%E8%A6%8F%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 262, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.lognormal?" ] }, { "cell_type": "code", "execution_count": 263, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "p(x) = \\frac{1}{\\sigma x \\sqrt{2\\pi}}\n", " e^{(-\\frac{(ln(x)-\\mu)^2}{2\\sigma^2})}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "p(x) = \\frac{1}{\\sigma x \\sqrt{2\\pi}}\n", " e^{(-\\frac{(ln(x)-\\mu)^2}{2\\sigma^2})}\n", "$$" ] }, { "cell_type": "code", "execution_count": 264, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.60342456, 1.32460941, 4.77135422, 0.1564132 , 0.25944637])" ] }, "execution_count": 264, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.lognormal(mean=0, sigma=1, size=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## logseries\n", "- https://en.wikipedia.org/wiki/Logarithmic_distribution\n", "- 日本語はない?" ] }, { "cell_type": "code", "execution_count": 277, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.logseries?" ] }, { "cell_type": "code", "execution_count": 278, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "P(k) = \\frac{-p^k}{k \\ln(1-p)}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "P(k) = \\frac{-p^k}{k \\ln(1-p)}\n", "$$" ] }, { "cell_type": "code", "execution_count": 279, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([1, 1, 3, 1, 2])" ] }, "execution_count": 279, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.logseries(p=0.5, size=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## multinomial\n", "https://ja.wikipedia.org/wiki/%E5%A4%9A%E9%A0%85%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 280, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.multinomial?" ] }, { "cell_type": "code", "execution_count": 283, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "f(x_1,\\ldots,x_k;n,p_1,\\ldots,p_k) = \n", "\\begin\n", "{cases}\n", "{n! \\over x_1!\\cdots x_k!}p_1^{x_1}\\cdots p_k^{x_k} \\quad & \n", "\\mbox{when } \\sum_{i=1}^k x_i=n \n", "\\\\\n", "0 & \n", "\\mbox{otherwise.}\n", "\\end\n", "{cases}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "f(x_1,\\ldots,x_k;n,p_1,\\ldots,p_k) = \n", "\\begin\n", "{cases}\n", "{n! \\over x_1!\\cdots x_k!}p_1^{x_1}\\cdots p_k^{x_k} \\quad & \n", "\\mbox{when } \\sum_{i=1}^k x_i=n \n", "\\\\\n", "0 & \n", "\\mbox{otherwise.}\n", "\\end\n", "{cases}\n", "$$" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.multinomial(n=, pvals=, size=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## multivariate_normal\n", "- https://en.wikipedia.org/wiki/Multivariate_normal_distribution\n", "- https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E5%88%86%E5%B8%83#.E5.A4.9A.E5.A4.89.E9.87.8F.E6.AD.A3.E8.A6.8F.E5.88.86.E5.B8.83\n", " " ] }, { "cell_type": "code", "execution_count": 284, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.multivariate_normal?" ] }, { "cell_type": "code", "execution_count": 304, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "???\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "???\n", "$$" ] }, { "cell_type": "code", "execution_count": 303, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[-0.47681492, 0.66149071],\n", " [ 0.02377642, 2.54830277],\n", " [-0.95989893, 1.90386633],\n", " [-0.94160488, -0.84989032],\n", " [-0.06047647, 0.29223881]])" ] }, "execution_count": 303, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.multivariate_normal(mean=[0, 1], cov=[[1, 0], [0, 1]], size=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## negative_binomial\n", "https://ja.wikipedia.org/wiki/%E8%B2%A0%E3%81%AE%E4%BA%8C%E9%A0%85%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 305, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.negative_binomial?" ] }, { "cell_type": "code", "execution_count": 306, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "P(N;n,p) = \\binom{N+n-1}{n-1}p^{n}(1-p)^{N}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "P(N;n,p) = \\binom{N+n-1}{n-1}p^{n}(1-p)^{N}\n", "$$" ] }, { "cell_type": "code", "execution_count": 315, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([4, 8, 4, 0, 6])" ] }, "execution_count": 315, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.negative_binomial(n=3, p=0.5, size=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## noncentral_chisquare\n", "- https://ja.wikipedia.org/wiki/%E9%9D%9E%E5%BF%83%E3%82%AB%E3%82%A4%E4%BA%8C%E4%B9%97%E5%88%86%E5%B8%83\n", "- 非心\n", "- https://en.wikipedia.org/wiki/Noncentral_chi-squared_distribution" ] }, { "cell_type": "code", "execution_count": 316, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.noncentral_chisquare?" ] }, { "cell_type": "code", "execution_count": 320, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "P(x;df,nonc) = \\sum^{\\infty}_{i=0}\n", " \\frac{e^{-nonc/2}(nonc/2)^{i}}{i!}\n", " \\P_{Y_{df+2i}}(x)\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "P(x;df,nonc) = \\sum^{\\infty}_{i=0}\n", " \\frac{e^{-nonc/2}(nonc/2)^{i}}{i!}\n", " \\P_{Y_{df+2i}}(x)\n", "$$" ] }, { "cell_type": "code", "execution_count": 321, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.7826903 , 0.39724018, 2.10628494, 3.15303285, 1.77351514])" ] }, "execution_count": 321, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.noncentral_chisquare(df=2, nonc=1, size=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## noncentral_f\n", "- https://en.wikipedia.org/wiki/Noncentral_F-distribution" ] }, { "cell_type": "code", "execution_count": 322, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.noncentral_f?" ] }, { "cell_type": "code", "execution_count": 324, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "???\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "???\n", "$$" ] }, { "cell_type": "code", "execution_count": 323, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1.19224776, 3.47312157, 5.24914716, 0.18250845, 0.74879712])" ] }, "execution_count": 323, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.noncentral_f(dfnum=2, dfden=2, nonc=1, size=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## normal\n", "https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 325, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.normal?" ] }, { "cell_type": "code", "execution_count": 327, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "p(x) = \\frac{1}{\\sqrt{ 2 \\pi \\sigma^2 }}\n", " e^{ - \\frac{ (x - \\mu)^2 } {2 \\sigma^2} }\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "p(x) = \\frac{1}{\\sqrt{ 2 \\pi \\sigma^2 }}\n", " e^{ - \\frac{ (x - \\mu)^2 } {2 \\sigma^2} }\n", "$$" ] }, { "cell_type": "code", "execution_count": 326, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1.72200361, 1.91580832, 0.15465406, 1.56988389, 1.42359534])" ] }, "execution_count": 326, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.normal(loc=0.0, scale=1.0, size=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## pareto\n", "https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%AC%E3%83%BC%E3%83%88%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 329, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.pareto?" ] }, { "cell_type": "code", "execution_count": 330, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "p(x) = \\frac{am^a}{x^{a+1}}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "p(x) = \\frac{am^a}{x^{a+1}}\n", "$$" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.pareto(a=, size=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## poisson\n", "https://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A2%E3%82%BD%E3%83%B3%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 331, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.poisson?" ] }, { "cell_type": "code", "execution_count": 357, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "f(k; \\lambda)=\\frac{\\lambda^k e^{-\\lambda}}{k!}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "f(k; \\lambda)=\\frac{\\lambda^k e^{-\\lambda}}{k!}\n", "$$" ] }, { "cell_type": "code", "execution_count": 356, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 2, 1, 2, 0, 3, 3, 2, 0])" ] }, "execution_count": 356, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.poisson(lam=2, size=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## power\n", "??" ] }, { "cell_type": "code", "execution_count": 358, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.power?" ] }, { "cell_type": "code", "execution_count": 360, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "P(x; a) = ax^{a-1}, 0 \\le x \\le 1, a>0\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "P(x; a) = ax^{a-1}, 0 \\le x \\le 1, a>0\n", "$$" ] }, { "cell_type": "code", "execution_count": 359, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.50392877, 0.04684049, 0.00144087, 0.37744684, 0.27361199])" ] }, "execution_count": 359, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.power(a=0.5, size=5)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## rayleigh\n", "https://ja.wikipedia.org/wiki/%E3%83%AC%E3%82%A4%E3%83%AA%E3%83%BC%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 364, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.rayleigh?" ] }, { "cell_type": "code", "execution_count": 366, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "P(x;scale) = \\frac{x}{scale^2}e^{\\frac{-x^2}{2 \\cdotp scale^2}}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "P(x;scale) = \\frac{x}{scale^2}e^{\\frac{-x^2}{2 \\cdotp scale^2}}\n", "$$" ] }, { "cell_type": "code", "execution_count": 365, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([ 2.70600975, 0.46129338, 1.05866746, 1.1758816 , 0.66072779])" ] }, "execution_count": 365, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.rayleigh(scale=1.0, size=5)" ] }, { "cell_type": "code", "execution_count": 378, "metadata": { "collapsed": true }, "outputs": [], "source": [ "plt.hist?" ] }, { "cell_type": "code", "execution_count": 382, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "''" ] }, "execution_count": 382, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(4)\n", "axes[0].hist(np.random.rayleigh(scale=1.0, size=500000), bins=200)\n", "axes[1].hist(np.random.rayleigh(scale=1.0, size=500000), bins=200, histtype=\"step\", color=\"red\")\n", "axes[2].hist(np.random.rayleigh(scale=1.0, size=500000), bins=200, histtype=\"stepfilled\", color=\"green\")\n", "axes[3].hist(np.random.rayleigh(scale=1.0, size=500000), bins=200, histtype=\"step\", color=\"red\", cumulative=True)\n", "\n", "\n", "\"\"" ] }, { "cell_type": "code", "execution_count": 414, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "(0.14177683769573535,\n", " 3.0348542587702925,\n", " array([ 0.14177684, 0.17099984, 0.20022285, 0.22944585, 0.25866885,\n", " 0.28789186, 0.31711486, 0.34633787, 0.37556087, 0.40478388,\n", " 0.43400688, 0.46322988, 0.49245289, 0.52167589, 0.5508989 ,\n", " 0.5801219 , 0.60934491, 0.63856791, 0.66779091, 0.69701392,\n", " 0.72623692, 0.75545993, 0.78468293, 0.81390594, 0.84312894,\n", " 0.87235194, 0.90157495, 0.93079795, 0.96002096, 0.98924396,\n", " 1.01846697, 1.04768997, 1.07691297, 1.10613598, 1.13535898,\n", " 1.16458199, 1.19380499, 1.223028 , 1.252251 , 1.281474 ,\n", " 1.31069701, 1.33992001, 1.36914302, 1.39836602, 1.42758902,\n", " 1.45681203, 1.48603503, 1.51525804, 1.54448104, 1.57370405,\n", " 1.60292705, 1.63215005, 1.66137306, 1.69059606, 1.71981907,\n", " 1.74904207, 1.77826508, 1.80748808, 1.83671108, 1.86593409,\n", " 1.89515709, 1.9243801 , 1.9536031 , 1.98282611, 2.01204911,\n", " 2.04127211, 2.07049512, 2.09971812, 2.12894113, 2.15816413,\n", " 2.18738714, 2.21661014, 2.24583314, 2.27505615, 2.30427915,\n", " 2.33350216, 2.36272516, 2.39194817, 2.42117117, 2.45039417,\n", " 2.47961718, 2.50884018, 2.53806319, 2.56728619, 2.59650919,\n", " 2.6257322 , 2.6549552 , 2.68417821, 2.71340121, 2.74262422,\n", " 2.77184722, 2.80107022, 2.83029323, 2.85951623, 2.88873924,\n", " 2.91796224, 2.94718525, 2.97640825, 3.00563125, 3.03485426]))" ] }, "execution_count": 414, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rayleigh.ppf(0.01), rayleigh.ppf(0.99), x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- http://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.stats.norm.html\n", "- http://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.stats.rv_continuous.html" ] }, { "cell_type": "code", "execution_count": 423, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(array([ 0.20597831, 0.53554361, 0.58961291, 0.49692268, 0.37848515,\n", " 0.19052994, 0.12101226, 0.03862093, 0.01287364, 0.00514946]),\n", " array([ 0.0145884 , 0.40297881, 0.79136921, 1.17975962, 1.56815003,\n", " 1.95654043, 2.34493084, 2.73332125, 3.12171165, 3.51010206,\n", " 3.89849247]),\n", " )" ] }, "execution_count": 423, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.stats import rayleigh\n", "\n", "fig, ax = plt.subplots(1, 1)\n", "\n", "# Alternatively, the distribution object can be called (as a function) to fix the shape, location and scale parameters. \n", "# This returns a “frozen” RV object holding the given parameters fixed.\n", "\n", "# Freeze the distribution and display the frozen pdf:\n", "rv = rayleigh()\n", "mean, var, skew, kurt = rayleigh.stats(moments='mvsk')\n", "x = np.linspace(rayleigh.ppf(0.01), rayleigh.ppf(0.99), 100)\n", "ax.plot(x, rayleigh.pdf(x), 'r--', lw=10, alpha=0.6, label='rayleigh pdf')\n", "ax.plot(x, rv.pdf(x), 'k^', lw=6, label='frozen pdf')\n", "ax.plot(x, rayleigh.cdf(x), 'b--', lw=3, alpha=0.6, label='rayleigh cdf')\n", "ax.plot(x, rayleigh.pdf(x), 'g.', lw=2, label='rayleigh pdf')\n", "# Check accuracy of cdf and ppf:\n", "\n", "vals = rayleigh.ppf([0.001, 0.5, 0.999])\n", "np.allclose([0.001, 0.5, 0.999], rayleigh.cdf(vals))\n", "# True\n", "\n", "# Generate random numbers: And compare the histogram:\n", "r = rayleigh.rvs(size=1000)\n", "n, bins, patches = ax.hist(r, normed=True, histtype='stepfilled', alpha=0.2)\n", "ax.legend(loc='best', frameon=False)\n", "n, bins, patches " ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## standard_cauchy\n", "- https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%82%B7%E3%83%BC%E5%88%86%E5%B8%83\n", "- x0 = 0、γ = 1" ] }, { "cell_type": "code", "execution_count": 424, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.standard_cauchy?" ] }, { "cell_type": "code", "execution_count": 426, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "P(x; x_0, \\gamma) = \\frac{1}{\\pi \\gamma \\bigl[ 1+\n", " (\\frac{x-x_0}{\\gamma})^2 \\bigr] }\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "P(x; x_0, \\gamma) = \\frac{1}{\\pi \\gamma \\bigl[ 1+\n", " (\\frac{x-x_0}{\\gamma})^2 \\bigr] }\n", "$$" ] }, { "cell_type": "code", "execution_count": 425, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([-2.40019962, -0.4644643 , 0.52742126, -0.45076806, 2.80696267])" ] }, "execution_count": 425, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.standard_cauchy(size=5)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## standard_exponential\n", "https://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 427, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.standard_exponential?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`standard_exponential` is identical to the exponential distribution\n", "with a scale parameter of 1." ] }, { "cell_type": "code", "execution_count": 428, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.60078119, 0.3681998 , 3.48541253, 1.60442092, 0.37735774])" ] }, "execution_count": 428, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.standard_exponential(size=5)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## standard_gamma\n", "https://en.wikipedia.org/wiki/Generalized_gamma_distribution ?" ] }, { "cell_type": "code", "execution_count": 431, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.standard_gamma?" ] }, { "cell_type": "code", "execution_count": 432, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "p(x) = x^{k-1}\\frac{e^{-x/\\theta}}{\\theta^k\\Gamma(k)}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "p(x) = x^{k-1}\\frac{e^{-x/\\theta}}{\\theta^k\\Gamma(k)}\n", "$$" ] }, { "cell_type": "code", "execution_count": 433, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 10.04271151, 12.83452788, 6.77340362, 3.43550584, 5.81463822])" ] }, "execution_count": 433, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# scale = 1 ?\n", "np.random.standard_gamma(shape=7.5, size=5)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## standard_normal\n", "https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E5%88%86%E5%B8%83#.E6.A8.99.E6.BA.96.E6.AD.A3.E8.A6.8F.E5.88.86.E5.B8.83" ] }, { "cell_type": "code", "execution_count": 434, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.standard_normal?" ] }, { "cell_type": "code", "execution_count": 435, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([-0.2389675 , 0.99376433, 0.23754419, 0.17881443, 0.31359466])" ] }, "execution_count": 435, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw samples from a standard Normal distribution (mean=0, stdev=1).\n", "np.random.standard_normal(size=5)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## standard_t\n", "https://ja.wikipedia.org/wiki/T%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 436, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.standard_t?" ] }, { "cell_type": "code", "execution_count": 437, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "P(x, df) = \\frac{\\Gamma(\\frac{df+1}{2})}{\\sqrt{\\pi df}\n", " \\Gamma(\\frac{df}{2})}\\Bigl( 1+\\frac{x^2}{df} \\Bigr)^{-(df+1)/2}\n", "\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "P(x, df) = \\frac{\\Gamma(\\frac{df+1}{2})}{\\sqrt{\\pi df}\n", " \\Gamma(\\frac{df}{2})}\\Bigl( 1+\\frac{x^2}{df} \\Bigr)^{-(df+1)/2}\n", "$$" ] }, { "cell_type": "code", "execution_count": 438, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.85404676, 2.16559892, -2.68894434, 2.27305289, -1.57081979])" ] }, "execution_count": 438, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.standard_t(df=2, size=5)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## triangular\n", "- https://ja.wikipedia.org/wiki/%E4%B8%89%E8%A7%92%E5%88%86%E5%B8%83\n", "- https://en.wikipedia.org/wiki/Triangular_distribution" ] }, { "cell_type": "code", "execution_count": 439, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.triangular?" ] }, { "cell_type": "code", "execution_count": 441, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "P(x;l, m, r) = \n", "\\begin{cases}\n", " \\frac{2(x-l)}{(r-l)(m-l)} & \\text{for $l \\leq x \\leq m$},\\\\\n", " \\frac{2(m-x)}{(r-l)(r-m)} & \\text{for $m \\leq x \\leq r$},\\\\\n", " 0 & \\text{otherwise}.\n", "\\end{cases}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "P(x;l, m, r) = \n", "\\begin{cases}\n", " \\frac{2(x-l)}{(r-l)(m-l)} & \\text{for $l \\leq x \\leq m$},\\\\\n", " \\frac{2(m-x)}{(r-l)(r-m)} & \\text{for $m \\leq x \\leq r$},\\\\\n", " 0 & \\text{otherwise}.\n", "\\end{cases}\n", "$$" ] }, { "cell_type": "code", "execution_count": 443, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 3.49152131, 3.0465073 , 2.97680472, 4.01562676, 4.2223051 ])" ] }, "execution_count": 443, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# `left <= mode <= right`\n", "np.random.triangular(left=2, mode=3, right=5, size=5)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## uniform\n", "- https://ja.wikipedia.org/wiki/%E9%80%A3%E7%B6%9A%E4%B8%80%E6%A7%98%E5%88%86%E5%B8%83\n", "- https://ja.wikipedia.org/wiki/%E9%9B%A2%E6%95%A3%E4%B8%80%E6%A7%98%E5%88%86%E5%B8%83" ] }, { "cell_type": "code", "execution_count": 445, "metadata": { "collapsed": false }, "outputs": [], "source": [ "np.random.uniform?" ] }, { "cell_type": "code", "execution_count": 447, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "p(x) = \\frac{1}{b - a}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "p(x) = \\frac{1}{b - a}\n", "$$" ] }, { "cell_type": "code", "execution_count": 446, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.46382253, 0.98243351, 0.71326653, 0.9396711 , 1.96862686])" ] }, "execution_count": 446, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.uniform(low=0.0, high=2.0, size=5)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## vonmises\n", "- https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A9%E3%83%B3%E3%83%BB%E3%83%9F%E3%83%BC%E3%82%BC%E3%82%B9%E5%88%86%E5%B8%83\n", "- フォン・ミーゼス\n", "- https://en.wikipedia.org/wiki/Von_Mises_distribution" ] }, { "cell_type": "code", "execution_count": 450, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.vonmises?" ] }, { "cell_type": "code", "execution_count": 449, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "p(x) = \\frac{e^{\\kappa cos(x-\\mu)}}{2\\pi I_0(\\kappa)}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "p(x) = \\frac{e^{\\kappa cos(x-\\mu)}}{2\\pi I_0(\\kappa)}\n", "$$" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# mu: Mode (\"center\") of the distribution.\n", "np.random.vonmises(mu=, kappa=, size=5)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## wald\n", "- https://ja.wikipedia.org/wiki/%E9%80%86%E3%82%AC%E3%82%A6%E3%82%B9%E5%88%86%E5%B8%83\n", "- ワルド(逆ガウス)分布\n", "- https://en.wikipedia.org/wiki/Inverse_Gaussian_distribution" ] }, { "cell_type": "code", "execution_count": 451, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.wald?" ] }, { "cell_type": "code", "execution_count": 452, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "P(x;mean,scale) = \\sqrt{\\frac{scale}{2\\pi x^3}}e^\n", " \\frac{-scale(x-mean)^2}{2\\cdotp mean^2x}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "P(x;mean,scale) = \\sqrt{\\frac{scale}{2\\pi x^3}}e^\n", " \\frac{-scale(x-mean)^2}{2\\cdotp mean^2x}\n", "$$" ] }, { "cell_type": "code", "execution_count": 454, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.57783556, 0.79730746, 0.56055645, 4.75489764, 0.73628504])" ] }, "execution_count": 454, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.wald(mean=1, scale=1, size=5)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## weibull\n", "- https://ja.wikipedia.org/wiki/%E3%83%AF%E3%82%A4%E3%83%96%E3%83%AB%E5%88%86%E5%B8%83\n", "- https://en.wikipedia.org/wiki/Weibull_distribution\n", "- のrelated distribution ?" ] }, { "cell_type": "code", "execution_count": 455, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.weibull?" ] }, { "cell_type": "code", "execution_count": 457, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "p(x) = \\frac{a}\n", " {\\lambda}(\\frac{x}{\\lambda})^{a-1}e^{-(x/\\lambda)^a},\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "p(x) = \\frac{a}\n", " {\\lambda}(\\frac{x}{\\lambda})^{a-1}e^{-(x/\\lambda)^a},\n", "$$" ] }, { "cell_type": "code", "execution_count": 456, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/latex": [ "$$\n", "X = (-ln(U))^{1/a}\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "X = (-ln(U))^{1/a}\n", "$$" ] }, { "cell_type": "code", "execution_count": 458, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.58002483, 0.6534011 , 0.09482982, 0.54980911, 1.50052021])" ] }, "execution_count": 458, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.weibull(a=1, size=5)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## zipf\n", "- https://ja.wikipedia.org/wiki/%E3%82%B8%E3%83%83%E3%83%97%E3%81%AE%E6%B3%95%E5%89%87\n", "- https://en.wikipedia.org/wiki/Zipf%27s_law" ] }, { "cell_type": "code", "execution_count": 459, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.zipf?" ] }, { "cell_type": "code", "execution_count": 460, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\n", "p(x) = \\frac{x^{-a}}{\\zeta(a)},\n", "$$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%latex\n", "$$\n", "p(x) = \\frac{x^{-a}}{\\zeta(a)},\n", "$$" ] }, { "cell_type": "code", "execution_count": 462, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 5, 1, 1])" ] }, "execution_count": 462, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.zipf(a=2, size=5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "name\targuments\n", "beta\t(a, b[, size])\n", "binomial\t(n, p[, size])\n", "chisquare\t(df[, size])\n", "dirichlet\t(alpha[, size])\n", "exponential\t([scale, size])\n", "f\t(dfnum, dfden[, size])\n", "gamma\t(shape[, scale, size])\n", "geometric\t(p[, size])\n", "gumbel\t([loc, scale, size])\n", "hypergeometric\t(ngood, nbad, nsample[, size])\n", "laplace\t([loc, scale, size])\n", "logistic\t([loc, scale, size])\n", "lognormal\t([mean, sigma, size])\n", "logseries\t(p[, size])\n", "multinomial\t(n, pvals[, size])\n", "multivariate_normal\t(mean, cov[, size])\n", "negative_binomial\t(n, p[, size])\n", "noncentral_chisquare\t(df, nonc[, size])\n", "noncentral_f\t(dfnum, dfden, nonc[, size])\n", "normal\t([loc, scale, size])\n", "pareto\t(a[, size])\n", "poisson\t([lam, size])\n", "power\t(a[, size])\n", "rayleigh\t([scale, size])\n", "standard_cauchy\t([size])\n", "standard_exponential\t([size])\n", "standard_gamma\t(shape[, size])\n", "standard_normal\t([size])\n", "standard_t\t(df[, size])\n", "triangular\t(left, mode, right[, size])\n", "uniform\t([low, high, size])\n", "vonmises\t(mu, kappa[, size])\n", "wald\t(mean, scale[, size])\n", "weibull\t(a[, size])\n", "zipf\t(a[, size])" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "hide_input": false, "kernelspec": { "display_name": "Python [default]", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" }, "toc": { "toc_cell": false, "toc_number_sections": true, "toc_threshold": 6, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 0 }