{ "metadata": { "name": "", "signature": "sha256:2ef06e8a67476d47608de842bdd8dce2a0dc0a38c75f6c5a61d9b81554acd13c" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 4. NumPy \uae30\ubcf8: \ubc30\uc5f4\uacfc \ubca1\ud130 \uacc4\uc0b0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**N**umerical **P**ython\uc758 \uc904\uc784\ub9d0
\n", "\n", "1. \ube60\ub974\uace0 \uba54\ubaa8\ub9ac\ub97c \ud6a8\uc728\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\uba70 \ubca1\ud130 \uc0b0\uc220\uc5f0\uc0b0\uacfc \uc138\ub828\ub41c \ube0c\ub85c\ub4dc\uce90\uc2a4\ud305 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \ub2e4\ucc28\uc6d0 \ubc30\uc5f4\uc778 ndarray\n", "2. \ubc18\ubcf5\ubb38\uc744 \uc791\uc131\ud560 \ud544\uc694\uc5c6\uc774 \uc804\uccb4 \ub370\uc774\ud130 \ubc30\uc5f4\uc5d0 \ub300\ud574 \ube60\ub978 \uc5f0\uc0b0\uc744 \uc81c\uacf5\ud558\ub294 \ud45c\uc900 \uc218\ud559 \ud568\uc218\n", "3. \ubc30\uc5f4 \ub370\uc774\ud130\ub97c \ub514\uc2a4\ud06c\uc5d0 \uc4f0\uac70\ub098 \uc77d\uc744 \uc218 \uc788\ub294 \ub3c4\uad6c\uc640 \uba54\ubaa8\ub9ac\uc5d0 \uc62c\ub824\uc9c4 \ud30c\uc77c\uc744 \uc0ac\uc6a9\ud558\ub294 \ub3c4\uad6c\n", "4. \uc120\ud615\ub300\uc218, \ub09c\uc218 \ubc1c\uc0dd\uae30, \ud478\ub9ac\uc5d0 \ubcc0\ud658 \uae30\ub2a5\n", "5. C, C++, \ud3ec\ud2b8\ub780\uc73c\ub85c \uc4f0\uc5ec\uc9c4 \ucf54\ub4dc\ub97c \ud1b5\ud569\ud558\ub294 \ub3c4\uad6c" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "\ub300\ubd80\ubd84\uc758 \ub370\uc774\ud130 \ubd84\uc11d \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uc911\uc694\ud558\uac8c \uc0ac\uc6a9\ud558\ub294 \uae30\ub2a5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. \ubca1\ud130 \ubc30\uc5f4\uc0c1\uc5d0\uc11c \ub370\uc774\ud130 \uac1c\uc870, \uc815\uc81c, \ubd80\ubd84 \uc9d1\ud569, \ud544\ud130\ub9c1 \ubcc0\ud615, \ub2e4\ub978 \uc885\ub958 \uc5f0\uc0b0\uc758 \ube60\ub978 \uc218\ud589\n", "2. \uc815\ub82c, \uc720\uc77c \uc6d0\uc18c \ucc3e\uae30, \uc9d1\ud569\uc5f0\uc0b0 \uac19\uc740 \uc77c\ubc18\uc801\uc778 \ubc30\uc5f4 \ucc98\ub9ac \uc54c\uace0\ub9ac\uc998\n", "3. \ud1b5\uacc4\uc758 \ud6a8\uacfc\uc801\uc778 \ud45c\ud604\uacfc \ub370\uc774\ud130\uc758 \uc218\uc9d1/\uc694\uc57d\n", "4. \ub2e4\ub978 \uc885\ub958\uc758 \ub370\uc774\ud130 \ubb36\uc74c\uc744 \ubcd1\ud569\ud558\uace0 \uc5ee\uae30 \uc704\ud55c \ub370\uc774\ud130 \uc815\ub82c\uacfc \ub370\uc774\ud130 \uac04\uc758 \uad00\uacc4 \uc870\uc791\n", "5. if-elif-else\ub97c \ud3ec\ud568\ud558\ub294 \ubc18\ubcf5\ubb38 \ub300\uc2e0 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc870\uac74\uc808\uc744 \ud45c\ud604\ud560 \uc218 \uc788\ub294 \ubc30\uc5f4 \ud45c\ud604\n", "6. \ub370\uc774\ud130 \uadf8\ub8f9 \uc804\uccb4\uc5d0 \uc801\uc6a9\ud560 \uc218 \uc788\ub294 \uc218\uc9d1, \ubcc0\ud615, \ud568\uc218 \uc801\uc6a9\uac19\uc740 \ub370\uc774\ud130 \ucc98\ub9ac\n", "\n", "#### \uc774 \ucc45\uc5d0\uc11c \ud45c\uc900 NumPy\uc758 \ucee8\ubca4\uc158\uc744 import numpy as np\ub85c \uc0ac\uc6a9\n", "#### \ubb3c\ub860, from numpy import *\ub97c \uc0ac\uc6a9\ud574\uc11c np.\uc744 \uc0dd\ub7b5\ud574\ub3c4 \uad1c\ucc2e\ub2e4. \ud558\uc9c0\ub9cc \uc88b\uc740 \ucf54\ub529 \uc2b5\uad00\uc740 \uc544\ub2c8\ub2e4." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "4.1 NumPy ndarray: \ub2e4\ucc28\uc6d0 \ubc30\uc5f4 \uac1d\uccb4" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "\uc77c\ubc18\uc801\uc778 \ub9ac\uc2a4\ud2b8 \uc0ac\uc6a9" ] }, { "cell_type": "code", "collapsed": false, "input": [ "data = [[0.9526, -0.246, -0.8856],\n", " [0.5639, 0.2379, 0.9104]]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 45 }, { "cell_type": "code", "collapsed": false, "input": [ "data * 10" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 46, "text": [ "[[0.9526, -0.246, -0.8856],\n", " [0.5639, 0.2379, 0.9104],\n", " [0.9526, -0.246, -0.8856],\n", " [0.5639, 0.2379, 0.9104],\n", " [0.9526, -0.246, -0.8856],\n", " [0.5639, 0.2379, 0.9104],\n", " [0.9526, -0.246, -0.8856],\n", " [0.5639, 0.2379, 0.9104],\n", " [0.9526, -0.246, -0.8856],\n", " [0.5639, 0.2379, 0.9104],\n", " [0.9526, -0.246, -0.8856],\n", " [0.5639, 0.2379, 0.9104],\n", " [0.9526, -0.246, -0.8856],\n", " [0.5639, 0.2379, 0.9104],\n", " [0.9526, -0.246, -0.8856],\n", " [0.5639, 0.2379, 0.9104],\n", " [0.9526, -0.246, -0.8856],\n", " [0.5639, 0.2379, 0.9104],\n", " [0.9526, -0.246, -0.8856],\n", " [0.5639, 0.2379, 0.9104]]" ] } ], "prompt_number": 46 }, { "cell_type": "code", "collapsed": false, "input": [ "data + data" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 47, "text": [ "[[0.9526, -0.246, -0.8856],\n", " [0.5639, 0.2379, 0.9104],\n", " [0.9526, -0.246, -0.8856],\n", " [0.5639, 0.2379, 0.9104]]" ] } ], "prompt_number": 47 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "ndarray \uc0ac\uc6a9" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 48 }, { "cell_type": "code", "collapsed": false, "input": [ "data = [[0.9526, -0.246, -0.8856],\n", " [0.5639, 0.2379, 0.9104]]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 49 }, { "cell_type": "code", "collapsed": false, "input": [ "nd_data = np.array(data)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 50 }, { "cell_type": "code", "collapsed": false, "input": [ "nd_data" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 51, "text": [ "array([[ 0.9526, -0.246 , -0.8856],\n", " [ 0.5639, 0.2379, 0.9104]])" ] } ], "prompt_number": 51 }, { "cell_type": "code", "collapsed": false, "input": [ "nd_data * 10" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 52, "text": [ "array([[ 9.526, -2.46 , -8.856],\n", " [ 5.639, 2.379, 9.104]])" ] } ], "prompt_number": 52 }, { "cell_type": "code", "collapsed": false, "input": [ "nd_data + nd_data" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 53, "text": [ "array([[ 1.9052, -0.492 , -1.7712],\n", " [ 1.1278, 0.4758, 1.8208]])" ] } ], "prompt_number": 53 }, { "cell_type": "code", "collapsed": false, "input": [ "nd_data.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 54, "text": [ "(2, 3)" ] } ], "prompt_number": 54 }, { "cell_type": "code", "collapsed": false, "input": [ "nd_data.dtype" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 55, "text": [ "dtype('float64')" ] } ], "prompt_number": 55 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### \ud30c\uc774\uc36c\uc744 \uc774\uc6a9\ud55c \uacfc\ud559\uacc4\uc0b0\uc758 \uace0\uc218\uac00 \ub418\ub294 \uc9c0\ub984\uae38\n", "\n", "- **\ubc30\uc5f4 \uc704\uc8fc\uc758 \ud504\ub85c\uadf8\ub798\ubc0d**\uacfc **\uc0dd\uac01\ud558\ub294 \ubc29\ubc95**\uc5d0 \ub2a5\uc219\ud574\uc9c0\ub294 \uac83\n", "- '\ubc30\uc5f4', 'NumPy \ubc30\uc5f4', 'ndarray'\ub294 \uc544\uc8fc \uadf9\uc18c\uc218\uc758 \uc608\uc678\ub97c \uc81c\uc678\ud558\uba74 \ubaa8\ub450 ndarray \uac1d\uccb4\ub97c \uc774\ub974\ub294 \ub9d0" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "4.1.1 ndarray \uc0dd\uc131" ] }, { "cell_type": "code", "collapsed": false, "input": [ "data1 = [6, 7.5, 8, 0, 1]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 56 }, { "cell_type": "code", "collapsed": false, "input": [ "arr1 = np.array(data1)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 57 }, { "cell_type": "code", "collapsed": false, "input": [ "arr1" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 58, "text": [ "array([ 6. , 7.5, 8. , 0. , 1. ])" ] } ], "prompt_number": 58 }, { "cell_type": "code", "collapsed": false, "input": [ "data2 = [[1,2,3,4], [5,6,7,8]]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 59 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2 = np.array(data2)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 60 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 61, "text": [ "array([[1, 2, 3, 4],\n", " [5, 6, 7, 8]])" ] } ], "prompt_number": 61 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2.ndim?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 62 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2.ndim" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 63, "text": [ "2" ] } ], "prompt_number": 63 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2.nbytes" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 64, "text": [ "64" ] } ], "prompt_number": 64 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 65, "text": [ "(2, 4)" ] } ], "prompt_number": 65 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "nd.array\ub294 \uc0dd\uc131\ub420 \ub54c \uc801\uc808\ud55c \uc790\ub8cc\ud615\uc744 \ucd94\uc815\ud55c\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr1.dtype" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 66, "text": [ "dtype('float64')" ] } ], "prompt_number": 66 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2.dtype" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 67, "text": [ "dtype('int64')" ] } ], "prompt_number": 67 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "zeros - \uc8fc\uc5b4\uc9c4 \uae38\uc774\ub098 \ubaa8\uc591\uc5d0 \uac01\uac01 0\uc774 \ub4e4\uc5b4\uc788\ub294 \ubc30\uc5f4 \uc0dd\uc131
\n", "ones - \uc8fc\uc5b4\uc9c4 \uae38\uc774\ub098 \ubaa8\uc591\uc5d0 \uac01\uac01 1\uc774 \ub4e4\uc5b4\uc788\ub294 \ubc30\uc5f4 \uc0dd\uc131
\n", "(3, 6) - \uc55e\uc740 \ud589, \ub4a4\ub294 \uc5f4" ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.zeros(10)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 68, "text": [ "array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])" ] } ], "prompt_number": 68 }, { "cell_type": "code", "collapsed": false, "input": [ "np.zeros((3,6))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 69, "text": [ "array([[ 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 0., 0., 0.]])" ] } ], "prompt_number": 69 }, { "cell_type": "code", "collapsed": false, "input": [ "np.empty((2,3))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 70, "text": [ "array([[ 2.31584178e+077, 2.31584178e+077, 2.18830816e-314],\n", " [ 1.47267102e-212, 2.31584178e+077, 2.31584178e+077]])" ] } ], "prompt_number": 70 }, { "cell_type": "code", "collapsed": false, "input": [ "np.empty((2,3,4))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 71, "text": [ "array([[[ 2.31584178e+077, 1.49166824e-154, 5.92878775e-323,\n", " 0.00000000e+000],\n", " [ 2.31584178e+077, 2.14027814e+161, 5.04621383e+180,\n", " 4.50618615e-144],\n", " [ 1.16071308e-028, 2.01069581e-052, 1.07949264e-061,\n", " 4.43900471e-052]],\n", "\n", " [[ 2.36230891e-047, 3.83819517e+151, 1.47721841e+179,\n", " 8.37404147e+242],\n", " [ 4.31999013e-096, 9.08366793e+223, 3.21133546e+030,\n", " 3.86586411e-057],\n", " [ 1.81195722e-042, 6.75655658e-067, -2.00023867e+000,\n", " 1.66880553e-308]]])" ] } ], "prompt_number": 71 }, { "cell_type": "code", "collapsed": false, "input": [ "np.empty((3,2))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 72, "text": [ "array([[ 2.31584178e+077, 1.36673907e-315],\n", " [ 4.22764845e-307, 2.13686428e-314],\n", " [ 2.31584178e+077, 2.31584178e+077]])" ] } ], "prompt_number": 72 }, { "cell_type": "code", "collapsed": false, "input": [ "np.empty((1,2,3))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 73, "text": [ "array([[[ 2.31584178e+077, 1.72723382e-077, 2.12358237e-314],\n", " [ 2.12358407e-314, 2.12358405e-314, 4.44480170e-309]]])" ] } ], "prompt_number": 73 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- np.empty\ub294 0\uc73c\ub85c \ucd08\uae30\ud654\ub41c \ubc30\uc5f4\uc744 \ubc18\ud658\ud558\uc9c0 \uc54a\ub294\ub2e4. \uc55e\uc5d0\uc11c \uc0b4\ud3b4\ubcf8 \ubc14\uc640 \uac19\uc774 \ub300\ubd80\ubd84\uc758 \uacbd\uc6b0 empty\ub294 \ucd08\uae30\ud654\ub418\uc9c0 \uc54a\uc740 \uac12\uc73c\ub85c \ucc44\uc6cc\uc9c4 \ubc30\uc5f4\uc744 \ubc18\ud658" ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.arange(15)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 74, "text": [ "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])" ] } ], "prompt_number": 74 }, { "cell_type": "code", "collapsed": false, "input": [ "type(np.arange(15))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 75, "text": [ "numpy.ndarray" ] } ], "prompt_number": 75 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Colons can be used to align columns.\n", "\n", "| Tables | Are | Cool |\n", "| ------------- |:-------------:| -----:|\n", "| col 3 is | right-aligned | $1600 |\n", "| col 2 is | centered | $12 |\n", "| zebra stripes | are neat | $1 |\n", "\n", "The outer pipes (|) are optional, and you don't need to make the raw Markdown line up prettily. You can also use inline Markdown.\n", "\n", "Markdown | Less | Pretty\n", "--- | --- | ---\n", "*Still* | `renders` | **nicely**\n", "1 | 2 | 3" ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.asarray(nd_data)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 76, "text": [ "array([[ 0.9526, -0.246 , -0.8856],\n", " [ 0.5639, 0.2379, 0.9104]])" ] } ], "prompt_number": 76 }, { "cell_type": "code", "collapsed": false, "input": [ "np.asarray(data)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 77, "text": [ "array([[ 0.9526, -0.246 , -0.8856],\n", " [ 0.5639, 0.2379, 0.9104]])" ] } ], "prompt_number": 77 }, { "cell_type": "code", "collapsed": false, "input": [ "d = [1,2,3,4]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 78 }, { "cell_type": "code", "collapsed": false, "input": [ "np.asarray([1,2,3,4])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 79, "text": [ "array([1, 2, 3, 4])" ] } ], "prompt_number": 79 }, { "cell_type": "code", "collapsed": false, "input": [ "np.asarray(np.array([1,2,3,5]))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 80, "text": [ "array([1, 2, 3, 5])" ] } ], "prompt_number": 80 }, { "cell_type": "code", "collapsed": false, "input": [ "np.eye(5)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 81, "text": [ "array([[ 1., 0., 0., 0., 0.],\n", " [ 0., 1., 0., 0., 0.],\n", " [ 0., 0., 1., 0., 0.],\n", " [ 0., 0., 0., 1., 0.],\n", " [ 0., 0., 0., 0., 1.]])" ] } ], "prompt_number": 81 }, { "cell_type": "code", "collapsed": false, "input": [ "np.identity(4)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 82, "text": [ "array([[ 1., 0., 0., 0.],\n", " [ 0., 1., 0., 0.],\n", " [ 0., 0., 1., 0.],\n", " [ 0., 0., 0., 1.]])" ] } ], "prompt_number": 82 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\ud568\uc218 | \uc124\uba85\n", "--- | ---\n", "array | \uc785\ub825 \ub370\uc774\ud130(\ub9ac\uc2a4\ud2b8, \ud29c\ud50c, \ubc30\uc5f4 \ub610\ub294 \ub2e4\ub978 \uc21c\ucc28\ud615 \ub370\uc774\ud130)\ub97c ndarray\ub85c \ubcc0\ud658\ud558\uba70 dtype\uc774 \uba85\uc2dc\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0\uc5d0\ub294 \uc790\ub8cc\ud615\uc744 \ucd94\ub860\ud558\uc5ec \uc800\uc7a5\ud558\ub09f. \uae30\ubcf8\uc801\uc73c\ub85c \uc785\ub825 \ub370\uc774\ud130\ub294 \ubcf5\uc0ac\ub41c\ub2e4.\n", "asarray | \uc785\ub825 \ub370\uc774\ud130\ub97c ndarray\ub85c \ubcc0\ud658\ud558\uc9c0\ub9cc \uc785\ub825 \ub370\uc774\ud130\uac00 \uc774\ubbf8 ndarray\uc77c \uacbd\uc6b0, \ubcf5\uc0ac\uac00 \ub418\uc9c0 \uc54a\ub294\ub2e4.\n", "arange | \ub0b4\uc7a5 range \ud568\uc218\uc640 \uc720\uc0ac\ud558\uc9c0\ub9cc \ub9ac\uc2a4\ud2b8 \ub300\uc2e0 ndarray\ub97c \ubc18\ud658\ud55c\ub2e4.\n", "ones, ones_like | \uc8fc\uc5b4\uc9c4 dtype\uacfc \uc8fc\uc5b4\uc9c4 \ubaa8\uc591\uc744 \uac00\uc9c0\ub294 \ubc30\uc5f4\uc744 \uc0dd\uc131\ud558\uace0 \ub0b4\uc6a9\uc751\u3139 \ubaa8\ub450 1\ub85c \ucd08\uae30\ud654\ud55c\ub2e4. ones_like\ub294 \uc8fc\uc5b4\uc9c4 \ubc30\uc5f4\uacfc \ub3d9\uc77c\ud55c \ubaa8\uc591\uacfc dtype\uc744 \uac00\uc9c0\ub294 \ubc30\uc5f4\uc744 \uc0c8\ub85c \uc0dd\uc131\ud558\uc5ec \ub0b4\uc6a9\uc744 \ubaa8\ub450 1\ub85c \ucd08\uae30\ud654\ud55c\ub2e4.\n", "zeros, zeros_like | ones, ones_like\uc640 \uac19\uc9c0\ub9cc \ub0b4\uc6a9\uc744 0\uc73c\ub85c \ucc44\uc6b4\ub2e4.\n", "empty, empty_like | \uba54\ubaa8\ub9ac\ub97c \ud560\ub2f9\ud558\uc5ec \uc0c8\ub85c\uc6b4 \ubc30\uc5f4\uc744 \uc0dd\uc131\ud558\uc9c0\ub9cc ones\ub098 zeros\ucc98\ub7fc \uac12\uc744 \ucd08\uae30\ud654\ud558\uc9c0\ub294 \uc54a\ub294\ub2e4.\n", "eye, identity | N x N \ud06c\uae30\uc758 \ub2e8\uc704 \ud589\ub82c\uc744 \uc0dd\uc131\ud55c\ub2e4(\uc88c\uc0c1\ub2e8\uc5d0\uc11c \uc6b0\ud558\ub2e8\uc744 \uc787\ub294 \ub300\uac01\uc120\uc740 1\ub85c \ucc44\uc6cc\uc9c0\uace0 \ub098\uba38\uc9c0\ub294 0\uc73c\ub85c \ucc44\uc6cc\uc9c4\ub2e4)." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "4.1.2 ndarray\uc758 \uc790\ub8cc\ud615" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "dtype\uc774 \uc788\uae30\uc5d0 NumPy\uac00 \uac15\ub825\ud558\uba74\uc11c\ub3c4 \uc720\uc5f0\ud55c \ub3c4\uad6c\uac00 \ub420 \uc218 \uc788\ub2e4.\n", "\n", "- \ub300\ubd80\ubd84\uc758 \ub370\uc774\ud130\ub294 \ub514\uc2a4\ud06c\uc5d0\uc11c \ub370\uc774\ud130\ub97c \uc77d\uae30 \uc4f0\uae30 \ud3b8\ud558\ub3c4\ub85d \ud558\uc704 \ub808\ubca8\uc758 \ud45c\ud604\uc5d0 \uc9c1\uc811\uc801\uc73c\ub85c \ub9de\ucdb0\uc838 \uc788\uc73c\uba70 C\ub098 \ud3ec\ud2b8\ub780 \uac19\uc740 \uc800\uc218\uc900 \uc5b8\uc5b4\ub85c \uc791\uc131\ub41c \ucf54\ub4dc\uc640 \uc27d\uac8c \uc5f0\ub3d9\n", "- \uc0b0\uc220 \ub370\uc774\ud130\uc758 dtype\uc740 float, int \uac19\uc740 \uc790\ub8cc\ud615\uc758 \uc774\ub984\uacfc \ud558\ub098\uc758 \uc6d0\uc18c\uac00 \ucc28\uc9c0\ud558\ub294 \ube44\ud2b8\uc218\ub85c \uc774\ub8e8\uc5b4\uc9d0\n", "- \ud30c\uc774\uc36c\uc758 float \uac1d\uccb4\uc5d0\uc11c \uc0ac\uc6a9\ub418\ub294 \ud45c\uc900 \ubc30\uc815\ubc00\ub3c4 \ubd80\ub3d9\uc18c\uc218\uc810 \uac12\uc740 8\ubc14\uc774\ud2b8 \ud639\uc740 64\ubc14\uc774\ud2b8\ub85c \uc774\ub8e8\uc5b4\uc9d0\n", "- [NumPy \uc790\ub8cc\ud615](http://docs.scipy.org/doc/numpy/user/basics.types.html)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr1 = np.array([1,2,3], dtype=np.float64)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 83 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2 = np.array([1,2,3], dtype=np.int32)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 84 }, { "cell_type": "code", "collapsed": false, "input": [ "arr1.dtype, arr2.dtype" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 85, "text": [ "(dtype('float64'), dtype('int32'))" ] } ], "prompt_number": 85 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "ndarray\uc758 astype \uba54\uc18c\ub4dc -> \ubc30\uc5f4\uc758 dtype\uc744 \ub2e4\ub978\ud615\uc73c\ub85c \uba85\uc2dc\uc801 \ubcc0\uacbd \uac00\ub2a5(\ub2e4\ub978 \uc5b8\uc5b4\uc758 cast\uc640 \uac19\uc740 \uc5ed\ud560)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.array([1,2,3,4,5])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 86 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.dtype" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 87, "text": [ "dtype('int64')" ] } ], "prompt_number": 87 }, { "cell_type": "code", "collapsed": false, "input": [ "float_arr = arr.astype(np.float64)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 88 }, { "cell_type": "code", "collapsed": false, "input": [ "float_arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 89, "text": [ "array([ 1., 2., 3., 4., 5.])" ] } ], "prompt_number": 89 }, { "cell_type": "code", "collapsed": false, "input": [ "float_arr.dtype" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 90, "text": [ "dtype('float64')" ] } ], "prompt_number": 90 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "\uc815\uc218\ud615 -> \ubd80\ub3d9\uc18c\uc218\uc810
\n", "\ubd80\ub3d9\uc18c\uc218\uc810 -> \uc815\uc218\ud615(\uc18c\uc218\uc810 \uc544\ub7ab\uc790\ub9ac \ubc84\ub824\uc9d0)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 91 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 92, "text": [ "array([ 3.7, -1.2, -2.6, 0.5, 12.9, 10.1])" ] } ], "prompt_number": 92 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.astype(np.int32)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 93, "text": [ "array([ 3, -1, -2, 0, 12, 10], dtype=int32)" ] } ], "prompt_number": 93 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "\uc22b\uc790\ud615 \ubb38\uc790\uc5f4 -> \uc815\uc218, float" ] }, { "cell_type": "code", "collapsed": false, "input": [ "numeric_strings = np.array(['1.25', '-9.6', '42'], dtype=np.string_)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 94 }, { "cell_type": "code", "collapsed": false, "input": [ "numeric_strings" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 95, "text": [ "array(['1.25', '-9.6', '42'], \n", " dtype='|S4')" ] } ], "prompt_number": 95 }, { "cell_type": "code", "collapsed": false, "input": [ "numeric_strings.astype(float)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 96, "text": [ "array([ 1.25, -9.6 , 42. ])" ] } ], "prompt_number": 96 }, { "cell_type": "code", "collapsed": false, "input": [ "# \uc911\uac04\uc5d0 \ubb38\uc790\uc5f4\ub85c \ub123\uc9c0 \uc54a\uace0 \uadf8\ub0e5 int\ub85c \ub123\uc5c8\ub294\ub370\ub3c4 dtype\uc744 np.string_\uc73c\ub85c \uc124\uc815\ud574\uc8fc\ub2c8 \n", "# \ubb38\uc790\uc5f4\ub85c \ubcc0\uacbd\n", "numeric_strings = np.array(['1.25', '-9.6', 42], dtype=np.string_)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 97 }, { "cell_type": "code", "collapsed": false, "input": [ "numeric_strings" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 98, "text": [ "array(['1.25', '-9.6', '42'], \n", " dtype='|S4')" ] } ], "prompt_number": 98 }, { "cell_type": "code", "collapsed": false, "input": [ "numeric_strings.astype(float)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 99, "text": [ "array([ 1.25, -9.6 , 42. ])" ] } ], "prompt_number": 99 }, { "cell_type": "code", "collapsed": false, "input": [ "int_array = np.arange(10)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 100 }, { "cell_type": "code", "collapsed": false, "input": [ "int_array" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 101, "text": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] } ], "prompt_number": 101 }, { "cell_type": "code", "collapsed": false, "input": [ "calibers = np.array([.22, .270, .357, .380, .44, .50], dtype=np.float64)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 102 }, { "cell_type": "code", "collapsed": false, "input": [ "calibers" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 103, "text": [ "array([ 0.22 , 0.27 , 0.357, 0.38 , 0.44 , 0.5 ])" ] } ], "prompt_number": 103 }, { "cell_type": "code", "collapsed": false, "input": [ "int_array.astype(calibers.dtype)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 104, "text": [ "array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])" ] } ], "prompt_number": 104 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 0., 1., \ucc98\ub7fc \ub4a4\uc758 0\uc774 \uc0dd\ub7b5\ub41c \uacbd\uc6b0\uac00 \ubc1c\uc0dd\ud558\ub294\ub370 \uc774\uac74 \ub4a4\uc758 \uc18c\uc218\uc810\uc774 \uc5c6\uc73c\uba74 \uc790\ub3d9\uc73c\ub85c 0\uc744 \ube7c\uc8fc\ub294 \uac83\uc73c\ub85c \uc0dd\uac01\ud558\uba74 \ub41c\ub2e4." ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "dtype \ucd95\uc57d\ucf54\ub4dc(u4 = uint32)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "empty_uint32 = np.empty(8, dtype='u4')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 105 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- astype\uc744 \ud638\ucd9c\ud558\uba74 \uc0c8\ub85c\uc6b4 dtype\uc774 \uc774\uc804 dtype\uacfc \uac19\uc544\ub3c4 \ud56d\uc0c1 \uc0c8\ub85c\uc6b4 \ubc30\uc5f4\uc744 \uc0dd\uc131(\ub370\uc774\ud130\ub97c \ubcf5\uc0ac)\ud55c\ub2e4.\n", "- float64\ub098 float32 \uac19\uc740 \ubd80\ub3d9\uc18c\uc218\uc810\uc740 \uadfc\uc0ac \uac12\uc774\ub77c\ub294 \uc0ac\uc2e4\uc744 \uc5fc\ub450\uc5d0 \ub450\ub294 \uac8c \uc911\uc694\ud558\ub2e4. \ubcf5\uc7a1\ud55c \uc5f0\uc0b0 \uc911\uc5d0\ub294 \ubd80\ub3d9\uc18c\uc218\uc810 \uc624\ub958\uac00 \ub204\uc801\ub418\uc5b4 \ube44\uad50\ub97c \ud560 \ub54c \ud2b9\uc815 \uc18c\uc218\uc790\ub9ac\uae4c\uc9c0\ub9cc \uc720\ud6a8\ud55c \uacbd\uc6b0\uac00 \uc0dd\uae38 \uc218 \uc788\ub2e4." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.1.3 \ubc30\uc5f4\uacfc \uc2a4\uce7c\ub77c \uac04\uc758 \uc5f0\uc0b0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- **\ubc30\uc5f4\uc740 for \ubc18\ubcf5\ubb38\uc744 \uc791\uc131\ud558\uc9c0 \uc54a\uace0 \ub370\uc774\ud130\ub97c \uc77c\uad04\ucc98\ub9ac\ud558\uae30 \ub54c\ubb38\uc5d0 \uc911\uc694(\ubca1\ud130\ud654)**\n", "- \uac19\uc740 \ud06c\uae30\uc758 \ubc30\uc5f4 \uac04 \uc0b0\uc220\uc5f0\uc0b0\uc740 \ubc30\uc5f4\uc758 \uac01 \uc694\uc18c \ub2e8\uc704\ub85c \uc801\uc6a9" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.array([[1., 2., 3.], [4., 5., 6.]])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 106 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 107, "text": [ "array([[ 1., 2., 3.],\n", " [ 4., 5., 6.]])" ] } ], "prompt_number": 107 }, { "cell_type": "code", "collapsed": false, "input": [ "arr * arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 108, "text": [ "array([[ 1., 4., 9.],\n", " [ 16., 25., 36.]])" ] } ], "prompt_number": 108 }, { "cell_type": "code", "collapsed": false, "input": [ "arr - arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 109, "text": [ "array([[ 0., 0., 0.],\n", " [ 0., 0., 0.]])" ] } ], "prompt_number": 109 }, { "cell_type": "markdown", "metadata": {}, "source": [ "[\uc2a4\uce7c\ub77c \uac12 - wiki](http://ko.wikipedia.org/wiki/%EC%8A%A4%EC%B9%BC%EB%9D%BC)\n", "\n", "\uc2a4\uce7c\ub77c(scalar)\ub780 \ud06c\uae30\uc640 \ubc29\ud5a5\uc744 \uac00\uc9c0\ub294 \ubca1\ud130\uc5d0 \ub300\ube44\ud558\ub294 \uac1c\ub150\uc73c\ub85c, \ud06c\uae30\ub9cc \uc788\uace0 \ubc29\ud5a5\uc744 \uac00\uc9c0\uc9c0 \uc54a\ub294 \uc591\uc744 \ub9d0\ud55c\ub2e4. \uc608\ub97c \ub4e4\uba74 \uc18d\ub3c4\uac00 \ubc29\ud5a5\ub3c4 \ud3ec\ud568\ud55c \ubca1\ud130\uc778\ub370 \ub300\ud574, \uadf8 \uc808\ub300\uac12\uc778 \uc18d\ub825\uc740 \ubc29\ud5a5\uc744 \uac00\uc9c0\uc9c0 \uc54a\ub294 \uc2a4\uce7c\ub77c \uac12\uc774\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "1 / arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 110, "text": [ "array([[ 1. , 0.5 , 0.33333333],\n", " [ 0.25 , 0.2 , 0.16666667]])" ] } ], "prompt_number": 110 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 111, "text": [ "array([[ 1., 2., 3.],\n", " [ 4., 5., 6.]])" ] } ], "prompt_number": 111 }, { "cell_type": "code", "collapsed": false, "input": [ "# **\ub294 square root of x\n", "arr ** 0.5" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 112, "text": [ "array([[ 1. , 1.41421356, 1.73205081],\n", " [ 2. , 2.23606798, 2.44948974]])" ] } ], "prompt_number": 112 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### \ud06c\uae30\uac00 \ub2e4\ub978 \ubc30\uc5f4 \uac04\uc758 \uc5f0\uc0b0\uc740 \ube0c\ub85c\ub4dc\uce90\uc2a4\ud305" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import math\n", "math.sqrt(3)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 113, "text": [ "1.7320508075688772" ] } ], "prompt_number": 113 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "4.1.4 \uc0c9\uc778\uacfc \uc2ac\ub77c\uc774\uc2f1 \uae30\ucd08" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.arange(10)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 114 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 115, "text": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] } ], "prompt_number": 115 }, { "cell_type": "code", "collapsed": false, "input": [ "arr[5]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 116, "text": [ "5" ] } ], "prompt_number": 116 }, { "cell_type": "code", "collapsed": false, "input": [ "arr[5:8]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 117, "text": [ "array([5, 6, 7])" ] } ], "prompt_number": 117 }, { "cell_type": "code", "collapsed": false, "input": [ "arr[5:8] = 12" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 118 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 119, "text": [ "array([ 0, 1, 2, 3, 4, 12, 12, 12, 8, 9])" ] } ], "prompt_number": 119 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####\ube0c\ub85c\ub4dc\uce90\uc2a4\ud305\n", "- arr[5:8] = 12\ucc98\ub7fc \ubc30\uc5f4 \uc870\uac01\uc5d0 \uc2a4\uce7c\ub77c \uac12\uc744 \ub300\uc785\ud558\uba74 12\uac00 \uc120\ud0dd \uc601\uc5ed \uc804\uccb4\ub85c \uc804\ud30c\n", "\n", "####\ub9ac\uc2a4\ud2b8\uc640\uc758 \uc911\uc694\ud55c \ucc28\uc774\uc810\uc740 \ubc30\uc5f4\uc870\uac01\uc740 \uc6d0\ubcf8 \ubc30\uc5f4\uc758 \ubdf0\ub77c\ub294 \uc810\n", "\n", "- \uc989, \ub370\uc774\ud130\ub294 \ubcf5\uc0ac\ub418\uc9c0 \uc54a\uace0 \ubdf0\uc5d0 \ub300\ud55c \ubcc0\uacbd\uc740 \uadf8\ub300\ub85c \uc6d0\ubcf8 \ubc30\uc5f4\uc5d0 \ubc18\uc601\ub41c\ub2e4\ub294 \uac83" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### np.array \uc608" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr_slice = arr[5:8]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 120 }, { "cell_type": "code", "collapsed": false, "input": [ "arr_slice[1] = 12345" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 121 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 122, "text": [ "array([ 0, 1, 2, 3, 4, 12, 12345, 12, 8, 9])" ] } ], "prompt_number": 122 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Slicing :\uc758 \uc608\n", "\n", "- [:]: \ubc30\uc5f4 \uc804\uccb4\n", "- [0:1]: 0\ubc88\uc9f8\ubd80\ud130 1\ubc88\uc9f8\uae4c\uc9c0, \ub2e8 1\ubc88\uc740 \ud3ec\ud568\ud558\uc9c0 \uc54a\ub294\ub2e4. \uc989, 1\uac1c\uc758 \uacb0\uacfc\uac12\ub9cc slicing \ub41c\ub2e4.\n", "- [:5]: 0\ubc88\uc9f8\ubd80\ud130 5\ubc88\uc9f8\uae4c\uc9c0, \ub2e8 5\ubc88\uc740 \ud3ec\ud568\ud558\uc9c0 \uc54a\ub294\ub2e4.\n", "- [2:]: 2\ubc88\uc9f8\ubd80\ud130 \ub05d\uae4c\uc9c0\n", "- [-1]: \uc81c\uc77c \ub05d\uc5d0 \uc788\ub294 \ubc30\uc5f4\uac12 \ubc18\ud658\n", "- [:-1]: 0\ubc88\uc9f8\ubd80\ud130 \ub05d\uae4c\uc9c0(-1 \uc774\ub77c\ub294 \uac83\uc740 \uc81c\uc77c \ub05d\uc5d0 \uc788\ub294 \uc22b\uc790\ub97c \ub73b\ud568" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr_slice[:] = 64" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 123 }, { "cell_type": "code", "collapsed": false, "input": [ "arr_slice" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 124, "text": [ "array([64, 64, 64])" ] } ], "prompt_number": 124 }, { "cell_type": "code", "collapsed": false, "input": [ "arr_slice[0:2]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 125, "text": [ "array([64, 64])" ] } ], "prompt_number": 125 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 126, "text": [ "array([ 0, 1, 2, 3, 4, 64, 64, 64, 8, 9])" ] } ], "prompt_number": 126 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####Python list \uc608" ] }, { "cell_type": "code", "collapsed": false, "input": [ "l = range(10)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 127 }, { "cell_type": "code", "collapsed": false, "input": [ "l_slice = l[5:8]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 128 }, { "cell_type": "code", "collapsed": false, "input": [ "l_slice[1] = 12345" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 129 }, { "cell_type": "code", "collapsed": false, "input": [ "l" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 130, "text": [ "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" ] } ], "prompt_number": 130 }, { "cell_type": "code", "collapsed": false, "input": [ "# Python list\ub294 \ube0c\ub85c\ub4dc \uce90\uc2a4\ud305\uc774 \uc548\ub428\n", "l_slice[:] = 64" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "can only assign an iterable", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\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[1;32m 1\u001b[0m \u001b[0;31m# Python list\ub294 \ube0c\ub85c\ub4dc \uce90\uc2a4\ud305\uc774 \uc548\ub428\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0ml_slice\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m64\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: can only assign an iterable" ] } ], "prompt_number": 131 }, { "cell_type": "code", "collapsed": false, "input": [ "l" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 132, "text": [ "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" ] } ], "prompt_number": 132 }, { "cell_type": "code", "collapsed": false, "input": [ "l_slice" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 133, "text": [ "[5, 12345, 7]" ] } ], "prompt_number": 133 }, { "cell_type": "code", "collapsed": false, "input": [ "l_slice[0] = 64" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 134 }, { "cell_type": "code", "collapsed": false, "input": [ "l_slice" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 135, "text": [ "[64, 12345, 7]" ] } ], "prompt_number": 135 }, { "cell_type": "code", "collapsed": false, "input": [ "# l_slice\uc758 \uac12\uc744 \ubcc0\uacbd\ud574\ub3c4 \uc6d0\ubcf8 l\uc740 \uc601\ud5a5\uc744 \ubc1b\uc9c0 \uc54a\ub294\ub2e4. \ubcf5\uc0ac\ud55c \uac12\uc774\uae30 \ub54c\ubb38\uc774\ub2e4.\n", "l" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 136, "text": [ "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" ] } ], "prompt_number": 136 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Python list\ub294 \uc704\uc758 \uc608\uc81c\uc5d0\uc11c \ubcf4\ub4ef\uc774 \uc6d0\ubcf8\uc5d0\ub294 \uc601\ud5a5\uc744 \ubbf8\uce58\uc9c0 \uc54a\uc74c\n", "- Python list\ub294 \ube0c\ub85c\ub4dc \uce90\uc2a4\ud305\uc774 \uc548\ub428\n", "\n", "###Why? NumPy does not copy?\n", "\n", "- \ub300\uc6a9\ub7c9 \ub370\uc774\ud130 \ucc98\ub9ac \uc5fc\ub450\n", "- \ub9cc\uc57d NumPy\uac00 \ub370\uc774\ud130 \ubcf5\uc0ac\ub97c \ub0a8\ubc1c\ud55c\ub2e4\uba74 \uc131\ub2a5\uacfc \uba54\ubaa8\ub9ac \ubb38\uc81c \uc9c1\uba74\n", "- \ubdf0 \ub300\uc2e0 ndarray \uc2ac\ub77c\uc774\uc2a4\uc758 \ubcf5\uc0ac\ubcf8\uc744 \uc5bb\uace0 \uc2f6\ub2e4\uba74 arr[5:8].copy()\ub97c \uc0ac\uc6a9\ud574\uc11c \uba85\uc2dc\uc801\uc73c\ub85c \ubc30\uc5f4 \ubcf5\uc0ac" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### ndarray \uc2ac\ub77c\uc774\uc2a4 \ubcf5\uc0ac\ubcf8 \uba85\uc2dc\uc801 \uc815\uc758 .copy" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr_slice2 = arr[5:8].copy()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 137 }, { "cell_type": "code", "collapsed": false, "input": [ "arr_slice2" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 138, "text": [ "array([64, 64, 64])" ] } ], "prompt_number": 138 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 139, "text": [ "array([ 0, 1, 2, 3, 4, 64, 64, 64, 8, 9])" ] } ], "prompt_number": 139 }, { "cell_type": "code", "collapsed": false, "input": [ "arr_slice2[:] = 33333" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 140 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 141, "text": [ "array([ 0, 1, 2, 3, 4, 64, 64, 64, 8, 9])" ] } ], "prompt_number": 141 }, { "cell_type": "code", "collapsed": false, "input": [ "arr_slice2" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 142, "text": [ "array([33333, 33333, 33333])" ] } ], "prompt_number": 142 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2\ucc28\uc6d0 \ubc30\uc5f4 \uc81c\uc5b4" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr2d = np.array([[1,2,3], [4,5,6], [7,8,9]])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 143 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2d[2]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 144, "text": [ "array([7, 8, 9])" ] } ], "prompt_number": 144 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2d[0][2]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 145, "text": [ "3" ] } ], "prompt_number": 145 }, { "cell_type": "code", "collapsed": false, "input": [ "# ,\ub85c\ub3c4 \uad6c\ubd84 \uac00\ub2a5\n", "arr2d[0, 2]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 146, "text": [ "3" ] } ], "prompt_number": 146 }, { "cell_type": "markdown", "metadata": {}, "source": [ "[5 dot 3 dot 2](http://www.chriscoughlin.com/2012/05/more-on-nde-scans/)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 147 }, { "cell_type": "code", "collapsed": false, "input": [ "arr3d" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 148, "text": [ "array([[[ 1, 2, 3],\n", " [ 4, 5, 6]],\n", "\n", " [[ 7, 8, 9],\n", " [10, 11, 12]]])" ] } ], "prompt_number": 148 }, { "cell_type": "code", "collapsed": false, "input": [ "arr3d.ndim" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 149, "text": [ "3" ] } ], "prompt_number": 149 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2d.ndim" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 150, "text": [ "2" ] } ], "prompt_number": 150 }, { "cell_type": "code", "collapsed": false, "input": [ "arr3d[0]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 151, "text": [ "array([[1, 2, 3],\n", " [4, 5, 6]])" ] } ], "prompt_number": 151 }, { "cell_type": "code", "collapsed": false, "input": [ "old_values = arr3d[0].copy()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 152 }, { "cell_type": "code", "collapsed": false, "input": [ "old_values" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 153, "text": [ "array([[1, 2, 3],\n", " [4, 5, 6]])" ] } ], "prompt_number": 153 }, { "cell_type": "code", "collapsed": false, "input": [ "arr3d[0] = 42" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 154 }, { "cell_type": "code", "collapsed": false, "input": [ "arr3d" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 155, "text": [ "array([[[42, 42, 42],\n", " [42, 42, 42]],\n", "\n", " [[ 7, 8, 9],\n", " [10, 11, 12]]])" ] } ], "prompt_number": 155 }, { "cell_type": "code", "collapsed": false, "input": [ "old_values" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 156, "text": [ "array([[1, 2, 3],\n", " [4, 5, 6]])" ] } ], "prompt_number": 156 }, { "cell_type": "code", "collapsed": false, "input": [ "arr3d[0] = old_values" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 157 }, { "cell_type": "code", "collapsed": false, "input": [ "arr3d" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 158, "text": [ "array([[[ 1, 2, 3],\n", " [ 4, 5, 6]],\n", "\n", " [[ 7, 8, 9],\n", " [10, 11, 12]]])" ] } ], "prompt_number": 158 }, { "cell_type": "code", "collapsed": false, "input": [ "arr3d[1, 0]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 159, "text": [ "array([7, 8, 9])" ] } ], "prompt_number": 159 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "\uc2ac\ub77c\uc774\uc2a4 \uc0c9\uc778" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr[1:6]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 160, "text": [ "array([ 1, 2, 3, 4, 64])" ] } ], "prompt_number": 160 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2d" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 161, "text": [ "array([[1, 2, 3],\n", " [4, 5, 6],\n", " [7, 8, 9]])" ] } ], "prompt_number": 161 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2d[:2]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 162, "text": [ "array([[1, 2, 3],\n", " [4, 5, 6]])" ] } ], "prompt_number": 162 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####arr2d[:2, 1:]\n", " \ud589, \uc5f4\n", "\n", "- \uac19\uc740 [ ] \uc548\uc5d0\uc11c\ub294 \ud589\uacfc \uc5f4 \uad6c\ubd84" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr2d[:2, 1:]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 164, "text": [ "array([[2, 3],\n", " [5, 6]])" ] } ], "prompt_number": 164 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2d[:2][1:]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 123, "text": [ "array([[4, 5, 6]])" ] } ], "prompt_number": 123 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2d[1, :2]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 124, "text": [ "array([4, 5])" ] } ], "prompt_number": 124 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2d[2, :1]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 125, "text": [ "array([7])" ] } ], "prompt_number": 125 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2d[:, :1]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 126, "text": [ "array([[1],\n", " [4],\n", " [7]])" ] } ], "prompt_number": 126 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2d[:2, 1:] = 0" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 127 }, { "cell_type": "code", "collapsed": false, "input": [ "arr2d" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 128, "text": [ "array([[1, 0, 0],\n", " [4, 0, 0],\n", " [7, 8, 9]])" ] } ], "prompt_number": 128 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "4.1.5 \ubd88\ub9ac\uc5b8 \uc0c9\uc778" ] }, { "cell_type": "code", "collapsed": false, "input": [ "names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 173 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### \uc815\uaddc\ubd84\ud3ec\n", "\n", "- [\uc815\uaddc\ubd84\ud3ec](http://mirror.enha.kr/wiki/%EC%A0%95%EA%B7%9C%EB%B6%84%ED%8F%AC)\n", "- [(\ubbf8\uc801\ud1b5, \uc801\ud1b5) \ud1b5\uacc4 \uae30\ucd08 \uac1c\ub150 - \uc815\uaddc\ubd84\ud3ec, \ud45c\uc900\uc815\uaddc\ubd84\ud3ec, \ud45c\uc900\uc815\uaddc\ubd84\ud3ec\ud45c](http://blog.naver.com/PostView.nhn?blogId=sbssbi69&logNo=90158138717)\n", "\n", "\uc778\uac04\uacfc \uc790\uc5f0 \uc138\uc0c1\uc5d0\uc11c \uc77c\uc5b4\ub098\ub294 \uc218\ub9ce\uc740 \uc77c\uc744 \uc124\uba85\ud558\ub294 \ud575\uc2ec \uac1c\ub150\uc774\ub2e4.\n", "\n", "\ud1b5\uacc4\ud559\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \uac01\uc885 \ud655\ub960\ubd84\ud3ec \uc911\uc5d0\uc11c\ub3c4 \uac00\uc7a5 \uc911\uc694\ud558\uac8c \ub2e4\ub8e8\ub294 \ubd84\ud3ec\uc774\ub2e4. \ubb3c\ub9ac\ud559 \uc2e4\ud5d8\uc6a9\uc73c\ub85c \ubb34\uc791\uc704 \ud45c\ubcf8\ucd94\ucd9c\uc744 \ud1b5\ud574 \ub3c4\ucd9c\uc2dc\ud0a8 \ud655\ub960\ubc00\ub3c4\uace1\uc120\uc5d0 \uadf9\ud55c\uac12\uc744 \uc801\uc6a9\uc2dc\ucf1c \ub9cc\ub4e0 \uac83\uc744 \ud615\ud0dc\ub85c \uc815\ub9bd\ud55c \uac83\uc778\ub370, \uadf8 \uadf8\ub798\ud504\ub97c \ud568\uc218\uc2dd\uc73c\ub85c \ud480\uc5b4\uc4f0\uba74\n", "(\u03c3:\ud45c\uc900\ud3b8\ucc28, \u03bc:\ud3c9\uade0) \uc774\ub2e4. \uc73c\uc5b4\uc5b4\uc5b4\n", "\uc774 \uc2dd\uc744 -\u221e\uc5d0\uc11c \u221e\uae4c\uc9c0 \uc815\uc801\ubd84\ud558\uba74 1\uc774\ub2e4. \ub2f9\uc5f0\ud558\uc9c0\ub9cc \ud655\ub960\ubc00\ub3c4\ud568\uc218\uc5d0\uc11c \ub098\uc628 \uac83\uc774\uae30 \ub54c\ubb38\uc774\ub2e4. \uac00\uc7a5 \uc911\uc694\ud55c \uc131\uc9c8.\n", "\n", "\uc815\uaddc\ubd84\ud3ec\ub294 \ud2b9\uc815\uac12\uc758 \ucd9c\ud604\ube44\uc728\uc744 \uadf8\ub838\uc744 \ub54c, \uc911\uc2ec(\ud3c9\uade0\uac12)\uc744 \uae30\uc900\uc73c\ub85c \uc88c\uc6b0 \ub300\uce6d \ud615\ud0dc\uac00 \ub098\ud0c0\ub098\uba70, \uc88c\uc6b0 \uadf9\ub2e8\uc73c\ub85c \uac08 \uc218\ub85d \uae09\uaca9\ud558\uac8c \uc218\uce58\uac00 \ub0ae\uc544\uc9c0\ub294 \ud2b9\uc9d5\uc744 \uc9c0\ub2cc\ub2e4. \ud558\uc9c0\ub9cc \ud45c\uc900\ud3b8\ucc28\uc758 \uc218\uce58\uac00 \uc704\uc758 \uc774\ubbf8\uc9c0\ucc98\ub7fc \uaf2d \uae30\uacc4\uc801\uc73c\ub85c \ub531\ub531 \ub9de\uc544\uc57c \ud558\ub294 \uac83\uc740 \uc544\ub2c8\uace0 \ub300\ub7b5 \uc800\ub7f0 '\uc885'\ud615\ud0dc\ub85c \ub098\ud0c0\ub09c\ub2e4. \uc2dd\uc2a4 \uc2dc\uadf8\ub9c8\ub77c\ub294 \uc6a9\uc5b4\ub3c4 \uc5ec\uae30\uc5d0\uc11c \ube44\ub86f\ud55c \uac83\uc774\ub2e4.[2]" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Return a sample (or samples) from the \"standard normal\" distribution.\n", "data = np.random.randn?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 174 }, { "cell_type": "code", "collapsed": false, "input": [ "data = np.random.randn" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 175 }, { "cell_type": "code", "collapsed": false, "input": [ "data = np.random.randn" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 176 }, { "cell_type": "code", "collapsed": false, "input": [ "data = np.random.randn" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 177 }, { "cell_type": "code", "collapsed": false, "input": [ "data = np.random.randn(7,4)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 178 }, { "cell_type": "code", "collapsed": false, "input": [ "names" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 179, "text": [ "array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'], \n", " dtype='|S4')" ] } ], "prompt_number": 179 }, { "cell_type": "code", "collapsed": false, "input": [ "data" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 180, "text": [ "array([[ 1.77221108, 0.40225415, -1.13369729, 0.09811456],\n", " [-0.8974136 , -1.68999202, 0.13735165, -0.34520354],\n", " [ 0.28554592, 0.67873863, -0.28538987, -0.14202489],\n", " [-0.84161162, -0.2952734 , -1.86067794, -0.18273331],\n", " [ 0.29432671, 0.29031815, 0.71247686, 1.08140858],\n", " [-0.44048201, 0.76291664, -0.05339118, 0.08658191],\n", " [-1.15092796, 0.05599653, 0.1364142 , -0.1197934 ]])" ] } ], "prompt_number": 180 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 2\ucc28\uc6d0 \ubc30\uc5f4 \uc2ac\ub77c\uc774\uc2f1(\ucc45 \ucc38\uace0: p.132) \uadf8\ub9bc\uc73c\ub85c \uc124\uba85\uc774 \uc798\ub418\uc5b4 \uc788\ub124\uc694." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "- img src=\"files/ch04/slice.jpg\" width=\"500\" \uc774\ub807\uac8c \ud574\uc57c \ub418\ub294\uad6c\ub098..\n", "- \uc55e\uc5d0 **files**\ub97c \ubd99\uc5ec\uc57c \ub418\ub294\uac70\uc600\uc5b4.. \uc5c4\uccad\ub09c \uc0bd\uc9c8 \ub05d\uc5d0 \uc5bb\uc5b4\ub0b8 \uc815\ubcf4" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# names\uc5d0\uc11c \ubcf4\ub4ef\uc774 0, 3\ubc88\uc9f8 \uc5f4\uc774 True\n", "names == 'Bob'" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 181, "text": [ "array([ True, False, False, True, False, False, False], dtype=bool)" ] } ], "prompt_number": 181 }, { "cell_type": "code", "collapsed": false, "input": [ "# names\uc5d0\uc11c Bob\ub294 0, 3\ubc88\uc9f8\uc5d0 \uc874\uc7ac\ud55c\ub2e4.\n", "# \uadf8\ub7ec\ubbc0\ub85c 0, 3\ubc88 \ub85c\uc6b0\uac12\uc740 True\uac00 \ub418\uc5b4 data\uc758 0, 3\ubc88\uc9f8 \ub85c\uc6b0\uac12\uc774 \ubc18\ud658\ub41c\ub2e4.\n", "# \uc774\ub807\uac8c \ub418\uba74 \ubc18\ubcf5\ubb38\uc744 \uc4f8 \ud544\uc694\ub3c4 \uc5c6\ub124..\n", "data[names == 'Bob']" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 182, "text": [ "array([[ 1.77221108, 0.40225415, -1.13369729, 0.09811456],\n", " [-0.84161162, -0.2952734 , -1.86067794, -0.18273331]])" ] } ], "prompt_number": 182 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### \ubd88\ub9ac\uc5b8 \uc8fc\uc758 \uc0ac\ud56d\n", "\n", "- **\ubd88\ub9ac\uc5b8 \ubc30\uc5f4\uc740 \ubc18\ub4dc\uc2dc \uc0c9\uc778\ud558\ub824\ub294 \ucd95\uc758 \uae38\uc774\uc640 \ub3d9\uc77c\ud55c \uae38\uc774???** \uc4f0\uae30\ub294 \ud588\ub294\ub370 \ubb34\uc2a8 \uc18c\ub9ac\uc778\uc9c0 \ub098\ub3c4 \uc774\ud574\uac00 \uc548\uac04\ub2e4..\n", "- \ubd88\ub9ac\uc5b8 \ubc30\uc5f4 \uc0c9\uc778\ub3c4 \uc2ac\ub77c\uc774\uc2a4 \ub610\ub294 \uc22b\uc790 \uc0c9\uc778\uacfc \ud568\uaed8 \ud63c\uc6a9" ] }, { "cell_type": "code", "collapsed": false, "input": [ "names2 = np.array(['Bob', 'Joe', 'Will'])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 193 }, { "cell_type": "code", "collapsed": false, "input": [ "data[names2 == 'Bob']" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 196, "text": [ "array([[ 1.77221108, 0.40225415, -1.13369729, 0.09811456]])" ] } ], "prompt_number": 196 }, { "cell_type": "code", "collapsed": false, "input": [ "data[names == 'Bob', 2:]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 183, "text": [ "array([[-1.13369729, 0.09811456],\n", " [-1.86067794, -0.18273331]])" ] } ], "prompt_number": 183 }, { "cell_type": "code", "collapsed": false, "input": [ "data[names == 'Bob', 3]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 184, "text": [ "array([ 0.09811456, -0.18273331])" ] } ], "prompt_number": 184 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### !=, -, ~ \uc73c\ub85c \ubd80\uc815" ] }, { "cell_type": "code", "collapsed": false, "input": [ "names != 'Bob'" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 185, "text": [ "array([False, True, True, False, True, True, True], dtype=bool)" ] } ], "prompt_number": 185 }, { "cell_type": "code", "collapsed": false, "input": [ "data[-(names == 'Bob')]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 186, "text": [ "array([[-0.8974136 , -1.68999202, 0.13735165, -0.34520354],\n", " [ 0.28554592, 0.67873863, -0.28538987, -0.14202489],\n", " [ 0.29432671, 0.29031815, 0.71247686, 1.08140858],\n", " [-0.44048201, 0.76291664, -0.05339118, 0.08658191],\n", " [-1.15092796, 0.05599653, 0.1364142 , -0.1197934 ]])" ] } ], "prompt_number": 186 }, { "cell_type": "code", "collapsed": false, "input": [ "data[~(names == 'Bob')]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 187, "text": [ "array([[-0.8974136 , -1.68999202, 0.13735165, -0.34520354],\n", " [ 0.28554592, 0.67873863, -0.28538987, -0.14202489],\n", " [ 0.29432671, 0.29031815, 0.71247686, 1.08140858],\n", " [-0.44048201, 0.76291664, -0.05339118, 0.08658191],\n", " [-1.15092796, 0.05599653, 0.1364142 , -0.1197934 ]])" ] } ], "prompt_number": 187 }, { "cell_type": "code", "collapsed": false, "input": [ "mask = (names == 'Bob') | (names == 'Will')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 188 }, { "cell_type": "code", "collapsed": false, "input": [ "mask" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 143, "text": [ "array([ True, False, True, True, True, False, False], dtype=bool)" ] } ], "prompt_number": 143 }, { "cell_type": "code", "collapsed": false, "input": [ "data[mask]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 144, "text": [ "array([[-0.83835174, 0.60824064, -1.71982262, 0.98534612],\n", " [ 0.18016504, -1.09498744, -0.7676533 , 0.52049666],\n", " [ 0.47402157, -0.44598838, 0.96611024, -0.82171886],\n", " [ 0.12207348, -1.35923971, 0.9028664 , -0.62213383]])" ] } ], "prompt_number": 144 }, { "cell_type": "code", "collapsed": false, "input": [ "data[mask, 3:]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 145, "text": [ "array([[ 0.98534612],\n", " [ 0.52049666],\n", " [-0.82171886],\n", " [-0.62213383]])" ] } ], "prompt_number": 145 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### \ubd88\ub9ac\uc5b8 \uc0c9\uc778\uc2dc \ud56d\uc0c1 \ub370\uc774\ud130 \ubcf5\uc0ac(\ubc14\ub00c\uc9c0 \uc54a\ub354\ub77c\ub3c4)\n", "\n", "- \ud30c\uc774\uc36c \uc608\uc57d\uc5b4\uc778 and, or\ub294 \ubd88\ub9ac\uc5b8 \ubc30\uc5f4\uc5d0\uc11c\ub294 \uc0ac\uc6a9 \ubd88\uac00" ] }, { "cell_type": "code", "collapsed": false, "input": [ "data[data < 0] = 0" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 146 }, { "cell_type": "code", "collapsed": false, "input": [ "data" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 147, "text": [ "array([[ 0. , 0.60824064, 0. , 0.98534612],\n", " [ 0. , 0.52443732, 0. , 0.80825771],\n", " [ 0.18016504, 0. , 0. , 0.52049666],\n", " [ 0.47402157, 0. , 0.96611024, 0. ],\n", " [ 0.12207348, 0. , 0.9028664 , 0. ],\n", " [ 0.61517386, 0.82523529, 0. , 0. ],\n", " [ 0.33102606, 0. , 0. , 0. ]])" ] } ], "prompt_number": 147 }, { "cell_type": "code", "collapsed": false, "input": [ "data[names != 'Joe'] = 7" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 148 }, { "cell_type": "code", "collapsed": false, "input": [ "data" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 149, "text": [ "array([[ 7. , 7. , 7. , 7. ],\n", " [ 0. , 0.52443732, 0. , 0.80825771],\n", " [ 7. , 7. , 7. , 7. ],\n", " [ 7. , 7. , 7. , 7. ],\n", " [ 7. , 7. , 7. , 7. ],\n", " [ 0.61517386, 0.82523529, 0. , 0. ],\n", " [ 0.33102606, 0. , 0. , 0. ]])" ] } ], "prompt_number": 149 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "4.1.6 \ud32c\uc2dc \uc0c9\uc778" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ud32c\uc2dc \uc0c9\uc778: \uc815\uc218 \ubc30\uc5f4\uc744 \uc0ac\uc6a9\ud55c \uc0c9\uc778\uc744 \uc124\uba85\ud558\uae30 \uc704\ud574 NumPy\uc5d0\uc11c \ucc28\uc6a9\ud55c \ub2e8\uc5b4" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.empty((8, 4))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 237 }, { "cell_type": "code", "collapsed": false, "input": [ "for i in range(8):\n", " arr[i] = i" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 240 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 241, "text": [ "array([[ 0., 0., 0., 0.],\n", " [ 1., 1., 1., 1.],\n", " [ 2., 2., 2., 2.],\n", " [ 3., 3., 3., 3.],\n", " [ 4., 4., 4., 4.],\n", " [ 5., 5., 5., 5.],\n", " [ 6., 6., 6., 6.],\n", " [ 7., 7., 7., 7.]])" ] } ], "prompt_number": 241 }, { "cell_type": "code", "collapsed": false, "input": [ "# \ud2b9\uc815\ud55c \uc21c\uc11c\ub85c \ub85c\uc6b0 \uc120\ud0dd\n", "arr[[4, 3, 0, 6]]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 153, "text": [ "array([[ 4., 4., 4., 4.],\n", " [ 3., 3., 3., 3.],\n", " [ 0., 0., 0., 0.],\n", " [ 6., 6., 6., 6.]])" ] } ], "prompt_number": 153 }, { "cell_type": "code", "collapsed": false, "input": [ "arr[[-3, -5, -7]]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 154, "text": [ "array([[ 5., 5., 5., 5.],\n", " [ 3., 3., 3., 3.],\n", " [ 1., 1., 1., 1.]])" ] } ], "prompt_number": 154 }, { "cell_type": "code", "collapsed": false, "input": [ "np.arange(32)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 242, "text": [ "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n", " 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])" ] } ], "prompt_number": 242 }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.arange(32).reshape((8, 4))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 244 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 245, "text": [ "array([[ 0, 1, 2, 3],\n", " [ 4, 5, 6, 7],\n", " [ 8, 9, 10, 11],\n", " [12, 13, 14, 15],\n", " [16, 17, 18, 19],\n", " [20, 21, 22, 23],\n", " [24, 25, 26, 27],\n", " [28, 29, 30, 31]])" ] } ], "prompt_number": 245 }, { "cell_type": "code", "collapsed": false, "input": [ "# \uc774\uac74 1\uac1c\ub9cc \uc120\ud0dd\ud558\ub294 \uac83\n", "arr[[1, 5, 7, 2], [0, 3, 1, 2]]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 246, "text": [ "array([ 4, 23, 29, 10])" ] } ], "prompt_number": 246 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uacb0\uacfc\ub97c \ubcf4\uba74 (1, 0), (5, 3), (7, 1), (2, 2)\uc5d0 \ub300\uc751\ud558\ub294 \uc694\uc18c\uac00 \uc120\ud0dd" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# 1, 5, 7, 2 \ub85c\uc6b0\n", "# \uceec\ub7fc \uc5f4\uc5d0\uc11c :,\ub85c \ubaa8\ub4e0 \ud589\uc744 \uc120\ud0dd\ud574 \uc8fc\uc5b4\uc57c \ud55c\ub2e4.\n", "# 0, 3, 1, 2 \uc5f4\uc744 \uc21c\uc11c\ub300\ub85c \uc120\ud0dd\n", "# \uc774\uac74 \uc5f4 \uc21c\uc11c\ub300\ub85c \uc120\ud0dd\ud574\uc11c \ubcf4\uc5ec\uc8fc\uae30\n", "arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 248, "text": [ "array([[ 4, 7, 5, 6],\n", " [20, 23, 21, 22],\n", " [28, 31, 29, 30],\n", " [ 8, 11, 9, 10]])" ] } ], "prompt_number": 248 }, { "cell_type": "code", "collapsed": false, "input": [ "# Construct an open mesh from multiple sequences.\n", "# \uc774\uac83\uc744 \uc368\uc57c \uc6b0\ub9ac\uac00 \uc608\uc0c1\ud588\ub358 \ub85c\uc6b0 \uc5f4\uacfc \uceec\ub7fc\uc758 \uc21c\uc11c\ub300\ub85c \ubcfc \uc218 \uc788\ub2e4.\n", "np.ix_" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 159, "text": [ "" ] } ], "prompt_number": 159 }, { "cell_type": "code", "collapsed": false, "input": [ "arr[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 160, "text": [ "array([[ 4, 7, 5, 6],\n", " [20, 23, 21, 22],\n", " [28, 31, 29, 30],\n", " [ 8, 11, 9, 10]])" ] } ], "prompt_number": 160 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "4.1.7 \ubc30\uc5f4 \uc804\uce58\uc640 \ucd95 \ubc14\uafb8\uae30" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ud589\ub82c\uc758 \ub0b4\uc801\uc744 \uad6c\ud558\uae30\ub3c4 \ud558\uae30 \ub54c\ubb38\uc5d0 \uc774\ub860\uc801\uc778 \ubc30\uacbd\uc774 \ud544\uc694\ud558\ub2e4.\n", "- [Matrix - wiki](http://en.wikipedia.org/wiki/Matrix_(mathematics)\n", "- [Matrix - kor](http://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC)\n", "- [Matrix - enha](http://mirror.enha.kr/wiki/%ED%96%89%EB%A0%AC)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.arange(15).reshape((3, 5))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 161 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 162, "text": [ "array([[ 0, 1, 2, 3, 4],\n", " [ 5, 6, 7, 8, 9],\n", " [10, 11, 12, 13, 14]])" ] } ], "prompt_number": 162 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.T" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 163, "text": [ "array([[ 0, 5, 10],\n", " [ 1, 6, 11],\n", " [ 2, 7, 12],\n", " [ 3, 8, 13],\n", " [ 4, 9, 14]])" ] } ], "prompt_number": 163 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.transpose()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 164, "text": [ "array([[ 0, 5, 10],\n", " [ 1, 6, 11],\n", " [ 2, 7, 12],\n", " [ 3, 8, 13],\n", " [ 4, 9, 14]])" ] } ], "prompt_number": 164 }, { "cell_type": "code", "collapsed": false, "input": [ "# Returns a view of the array with axes transposed.\n", "arr.transpose?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 165 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.T?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 166 }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.random.randn(6, 3)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 167 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 168, "text": [ "array([[-1.20187504, -0.44927834, 0.4785346 ],\n", " [ 0.76190465, 0.26996071, 0.36518358],\n", " [-1.0754374 , 0.85590102, 1.4926309 ],\n", " [-1.59364266, 0.11719942, 0.64195019],\n", " [ 1.16087939, 0.11679662, -0.22670051],\n", " [-0.79711903, 1.18209902, 1.40534745]])" ] } ], "prompt_number": 168 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.T" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 169, "text": [ "array([[-1.20187504, 0.76190465, -1.0754374 , -1.59364266, 1.16087939,\n", " -0.79711903],\n", " [-0.44927834, 0.26996071, 0.85590102, 0.11719942, 0.11679662,\n", " 1.18209902],\n", " [ 0.4785346 , 0.36518358, 1.4926309 , 0.64195019, -0.22670051,\n", " 1.40534745]])" ] } ], "prompt_number": 169 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Matrix Product\n", "\n", "" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Dot product of two arrays.\n", "np.dot?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 170 }, { "cell_type": "code", "collapsed": false, "input": [ "np.dot(arr.T, arr)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 171, "text": [ "array([[ 7.70430453, -1.16826805, -4.30857517],\n", " [-1.16826805, 2.43203161, 2.87115248],\n", " [-4.30857517, 2.87115248, 5.02879605]])" ] } ], "prompt_number": 171 }, { "cell_type": "code", "collapsed": false, "input": [ "# Matrices are not aligned.\n", "# ex) (3, 6) * (6, 3) is available\n", "# but (3, 6) * (3, 6) is not avaiable.\n", "np.dot(arr.T, arr.T)" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "matrices are not aligned", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\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 2\u001b[0m \u001b[0;31m# ex) (3, 6) * (6, 3) is available\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;31m# but (3, 6) * (3, 6) is not avaiable.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mValueError\u001b[0m: matrices are not aligned" ] } ], "prompt_number": 172 }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.arange(16).reshape((2, 2, 4))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 173 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 174, "text": [ "array([[[ 0, 1, 2, 3],\n", " [ 4, 5, 6, 7]],\n", "\n", " [[ 8, 9, 10, 11],\n", " [12, 13, 14, 15]]])" ] } ], "prompt_number": 174 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.transpose((1, 0, 2))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 175, "text": [ "array([[[ 0, 1, 2, 3],\n", " [ 8, 9, 10, 11]],\n", "\n", " [[ 4, 5, 6, 7],\n", " [12, 13, 14, 15]]])" ] } ], "prompt_number": 175 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.T" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 176, "text": [ "array([[[ 0, 8],\n", " [ 4, 12]],\n", "\n", " [[ 1, 9],\n", " [ 5, 13]],\n", "\n", " [[ 2, 10],\n", " [ 6, 14]],\n", "\n", " [[ 3, 11],\n", " [ 7, 15]]])" ] } ], "prompt_number": 176 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 177, "text": [ "array([[[ 0, 1, 2, 3],\n", " [ 4, 5, 6, 7]],\n", "\n", " [[ 8, 9, 10, 11],\n", " [12, 13, 14, 15]]])" ] } ], "prompt_number": 177 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.swapaxes(1, 2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 178, "text": [ "array([[[ 0, 4],\n", " [ 1, 5],\n", " [ 2, 6],\n", " [ 3, 7]],\n", "\n", " [[ 8, 12],\n", " [ 9, 13],\n", " [10, 14],\n", " [11, 15]]])" ] } ], "prompt_number": 178 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.swapaxes(1, 1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 179, "text": [ "array([[[ 0, 1, 2, 3],\n", " [ 4, 5, 6, 7]],\n", "\n", " [[ 8, 9, 10, 11],\n", " [12, 13, 14, 15]]])" ] } ], "prompt_number": 179 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.swapaxes(2, 1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 180, "text": [ "array([[[ 0, 4],\n", " [ 1, 5],\n", " [ 2, 6],\n", " [ 3, 7]],\n", "\n", " [[ 8, 12],\n", " [ 9, 13],\n", " [10, 14],\n", " [11, 15]]])" ] } ], "prompt_number": 180 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.swapaxes(1, 3)" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "bad axis2 argument to swapaxes", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\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[0marr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mswapaxes\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mValueError\u001b[0m: bad axis2 argument to swapaxes" ] } ], "prompt_number": 181 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.swapaxes(2, 2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 182, "text": [ "array([[[ 0, 1, 2, 3],\n", " [ 4, 5, 6, 7]],\n", "\n", " [[ 8, 9, 10, 11],\n", " [12, 13, 14, 15]]])" ] } ], "prompt_number": 182 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- swapaxes\ub3c4 \ub9c8\ucc2c\uac00\uc9c0\ub85c \ub370\uc774\ud130\ub97c \ubcf5\uc0ac\ud558\uc9c0 \uc54a\uace0 \uc6d0\ub798 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \ubdf0\ub97c \ubc18\ud658" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "4.2 \uc720\ub2c8\ubc84\uc124 \ud568\uc218" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- ufunc \uc720\ub2c8\ubc84\uc124 \ud568\uc218\ub294 ndarray \uc548\uc5d0 \uc788\ub294 \ub370\uc774\ud130 \uc6d0\uc18c\ubcc4\ub85c \uc5f0\uc0b0\uc744 \uc218\ud589\ud558\ub294 \ud568\uc218\n", "- \uc720\ub2c8\ubc84\uc124 \ud568\uc218\ub294 \ud558\ub098 \uc774\uc0c1\uc758 \uc2a4\uce7c\ub77c \uac12\uc744 \ubc1b\uc544\uc11c \ud558\ub098 \uc774\uc0c1\uc758 \uc2a4\uce7c\ub77c \uacb0\uacfc \uac12\uc744 \ubc18\ud658\ud558\ub294 \uac04\ub2e8\ud55c \ud568\uc218\ub97c \uace0\uc18d\uc73c\ub85c \uc218\ud589\ud560 \uc218 \uc788\ub294 \ubca1\ud130\ud654\ub41c \ub798\ud37c \ud568\uc218" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "####\ub2e8\ud56d \uc720\ub2c8\ubc84\uc124 \ud568\uc218\n", "\n", "- 1\uac1c \ub118\uaca8\uc11c 1\uac1c \ubc1b\uae30" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.arange(10)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 183 }, { "cell_type": "code", "collapsed": false, "input": [ "np.sqrt(arr)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 184, "text": [ "array([ 0. , 1. , 1.41421356, 1.73205081, 2. ,\n", " 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])" ] } ], "prompt_number": 184 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 185, "text": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] } ], "prompt_number": 185 }, { "cell_type": "code", "collapsed": false, "input": [ "np.exp(arr)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 186, "text": [ "array([ 1.00000000e+00, 2.71828183e+00, 7.38905610e+00,\n", " 2.00855369e+01, 5.45981500e+01, 1.48413159e+02,\n", " 4.03428793e+02, 1.09663316e+03, 2.98095799e+03,\n", " 8.10308393e+03])" ] } ], "prompt_number": 186 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####\uc774\ud56d \uc720\ub2c8\ubc84\uc124 \ud568\uc218\n", "\n", "- add\ub098 maximum\ucc98\ub7fc 2\uac1c\uc758 \uc778\uc790\ub97c \ucde8\ud574\uc11c \ub2e8\uc77c \ubc30\uc5f4 \ubc18\ud658" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = randn(8)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 187 }, { "cell_type": "code", "collapsed": false, "input": [ "y = randn(8)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 188 }, { "cell_type": "code", "collapsed": false, "input": [ "x" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 189, "text": [ "array([-0.62685006, 0.37365086, -1.63413592, -1.44971004, -0.2559731 ,\n", " 0.5667106 , 0.64417184, 0.54335809])" ] } ], "prompt_number": 189 }, { "cell_type": "code", "collapsed": false, "input": [ "y" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 190, "text": [ "array([ 1.00109709, -0.23689464, -0.44450783, 0.4087495 , 0.3417837 ,\n", " -0.0570952 , -0.0734767 , 0.27575651])" ] } ], "prompt_number": 190 }, { "cell_type": "code", "collapsed": false, "input": [ "np.maximum(x, y)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 191, "text": [ "array([ 1.00109709, 0.37365086, -0.44450783, 0.4087495 , 0.3417837 ,\n", " 0.5667106 , 0.64417184, 0.54335809])" ] } ], "prompt_number": 191 }, { "cell_type": "code", "collapsed": false, "input": [ "arr = randn(7) * 5" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 192 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 193, "text": [ "array([ 0.83759254, 1.70632069, -2.54516606, -8.71779902,\n", " 10.01517079, 3.96593556, 15.58338999])" ] } ], "prompt_number": 193 }, { "cell_type": "code", "collapsed": false, "input": [ "np.modf(arr)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 194, "text": [ "(array([ 0.83759254, 0.70632069, -0.54516606, -0.71779902, 0.01517079,\n", " 0.96593556, 0.58338999]),\n", " array([ 0., 1., -2., -8., 10., 3., 15.]))" ] } ], "prompt_number": 194 }, { "cell_type": "code", "collapsed": false, "input": [ "# Return the fractional and integral parts of an array, element-wise\n", "# \ud30c\uc774\uc36c \ub0b4\uc7a5 \ud568\uc218\uc778 divmod\uc758 \ubca1\ud130\ud654 \ubc84\uc804\uc774\uba70, modf\ub294 \ubd84\uc218\ub97c \ubc1b\uc544 \ubaab\uacfc \ub098\uba38\uc9c0\ub97c \ud568\uaed8 \ubc18\ud658\ud55c\ub2e4.\n", "np.modf?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 195 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####[Universal functions](http://docs.scipy.org/doc/numpy/reference/ufuncs.html)" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "4.3 \ubc30\uc5f4\uc744 \uc0ac\uc6a9\ud55c \ub370\uc774\ud130 \ucc98\ub9ac" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ubc18\ubcf5\ubb38 \uc791\uc131\ud558\uc9c0 \uc54a\uace0 \uac04\uacb0\ud55c \ubc30\uc5f4\uc5f0\uc0b0\uc744 \ud1b5\ud574 \ub9ce\uc740 \uc885\ub958\uc758 \ub370\uc774\ud130 \ucc98\ub9ac \uc791\uc5c5\n", "- \ubc30\uc5f4\uc5f0\uc0b0\uc744 \uc0ac\uc6a9\ud574\uc11c \ubc18\ubcf5\ubb38\uc744 \uba85\uc2dc\uc801\uc73c\ub85c \uc81c\uac70\ud558\ub294 \uae30\ubc95\uc744 \ud754\ud788 **\ubca1\ud130\ud654**\n", "- \uc21c\uc218 \ud30c\uc774\uc36c\ubcf4\ub2e4 2~3\ubc30, \ub9ce\uac8c\ub294 \uc218\uc2ed, \uc218\ubc31 \ubc30\uae4c\uc9c0 \ube60\ub974\ub2e4.\n", "- 12\uc7a5 **\ube0c\ub85c\ub4dc\uce90\uc2a4\ud305** \uc544\uc8fc \uac15\ub825\ud55c \ubca1\ud130 \uc5f0\uc0b0 \ubc29\ubc95" ] }, { "cell_type": "code", "collapsed": false, "input": [ "points = np.arange(-5, 5, 0.01)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "len(points)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "1000" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "xs, ys = np.meshgrid(points, points)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "ys" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "array([[-5. , -5. , -5. , ..., -5. , -5. , -5. ],\n", " [-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99],\n", " [-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98],\n", " ..., \n", " [ 4.97, 4.97, 4.97, ..., 4.97, 4.97, 4.97],\n", " [ 4.98, 4.98, 4.98, ..., 4.98, 4.98, 4.98],\n", " [ 4.99, 4.99, 4.99, ..., 4.99, 4.99, 4.99]])" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "len(ys)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "1000" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as plt" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "z = np.sqrt( xs ** 2 + ys ** 2)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "z" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "array([[ 7.07106781, 7.06400028, 7.05693985, ..., 7.04988652,\n", " 7.05693985, 7.06400028],\n", " [ 7.06400028, 7.05692568, 7.04985815, ..., 7.04279774,\n", " 7.04985815, 7.05692568],\n", " [ 7.05693985, 7.04985815, 7.04278354, ..., 7.03571603,\n", " 7.04278354, 7.04985815],\n", " ..., \n", " [ 7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 ,\n", " 7.03571603, 7.04279774],\n", " [ 7.05693985, 7.04985815, 7.04278354, ..., 7.03571603,\n", " 7.04278354, 7.04985815],\n", " [ 7.06400028, 7.05692568, 7.04985815, ..., 7.04279774,\n", " 7.04985815, 7.05692568]])" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(z, cmap=plt.cm.gray); plt.colorbar()\n", "plt.title(\"Image plot of $\\sqrt{x^2 + y^2}$ for a grid of values\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 29, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAATcAAAETCAYAAABTH0ESAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXmUVcW1/78X6BBxAKPQSDcGlRhkaGTG6QcqRqMRQWIe\nGBHQmBhXIprli88XXS9GE/A9ow80UfMUQYkmzyzC4BBdDkicAIEnIhowKkIzJIgDiCA09/cHqzq7\nd++9a5+hm6u5e627zjlVu3YNp+pzdlWde2+hWCwWUZaylKUsnzNpsa8LUJaylKUsTSFluJWlLGX5\nXEoZbmUpS1k+l1KGW1nKUpbPpZThVpaylOVzKWW4laUsZflcShluZSlLWT6XUoZbWcpSls+ltNrX\nBShLNmnR4rP5fCoUCqirq9vXxSjL51gK5W8ofHblnXfewdtvv42TTz55XxelLGUpOflsPvbLAgBY\nsGABTjrppH1djLKUpSSlDLfPsHz66ado1aq8slCWskhShttnVD766CO0a9duXxejLGUpWSnD7TMq\nTz75JIYNG7avi1GWspSslOGmSJcuXfDUU081eT6rV6/Geeedh4MPPhi33367O92WLVvcntvq1avx\nxz/+Eddffz2WLl2atqhNlk/aNthX0rNnTyxYsECNHz9+PK677rpUtpuqLZqrP5eSNMmCTZcuXXDP\nPffg1FNPbQrzzSKFQgGFQiGq16VLF0ybNg2nnHJKqnwmT56Mtm3b4r333nO/1lFXV4eKigp3Hg8/\n/DBOOOEEDBs2DN/73vfwwAMPpCprU+WTpg32paxYscKM9/YdSZqqLbKU6bMqTdKT/pkaslAoIMvb\nNGvWrMGgQYMSdeTnnnsOJ554olv/yiuvxMCBA7F27VocccQRaYrZpPmkaYMgu3fvTpwmi3jzS9sn\nsrRFWRpKk7dgly5dcMcdd+C4445DZWUlfvzjH+Pjjz/Gt771LRx66KE47bTT8OGHH9brT548GV27\ndsWBBx6IHj16YPbs2fVxS5cuRZ8+fdChQwd85zvfwQUXXNDA/V+/fj1GjRqF9u3b44gjjsBtt91m\nluv222/H4MGDceihh+Kiiy7Czp07Rd3XX38dQ4cOxcEHH4yePXti3rx5AICxY8fi3Xffxdlnn40D\nDzwQN998c6L0p5xyCubPn4/LL78cBx10EN58881Gabdt24b58+c3CHvzzTdx1FFHqXXT5I9//CN+\n8pOfuPV/9atfJc4jaT5aG2htBuy9d7/+9a9x/PHHo127dtizZ08ju1Y/4hLrVzS/tm3bonPnzg2m\neMuWLUPfvn1RWVmJSy65xASgVa9Yf7jppptw3nnnNQibOHEiJk6cmKjOLVq0wFtvvVV/zafR1ji6\n5557cNxxx6Ft27bo1q0bnn76abWu+1yKTSBdunQpPvXUU8VisVj88pe/XOzTp09x2bJlxVdeeaV4\n0EEHFQcMGFCcO3ducf369cVBgwYV77vvvvq0Dz30UHHDhg3F7du3F2+55ZZimzZtihs3bizu3Lmz\nePjhhxdvueWW4u7du4t/+MMfil/4wheK1113XbFYLBbr6uqKffv2LV5++eXFjRs3FhcsWFDs1KlT\n8fHHHxfL+OUvf7nYo0eP4rp164pbtmwpDh48uHjttdc2qsOnn35aPOqoo4o33nhjcdeuXcWnn366\nuN9++xVXrVrVqK6SxNIPHTq0eM8996jpf/Ob3xTPO++8BmF333231fyizJkzp/jhhx8WX3/9dXea\nn/70p82SD2+DWJt9+ctfLnbv3r24YMGC4o4dO0SbUj/asGFDI71YvyoW997jkN8nn3zS4J6H9Dff\nfHNx9+7dxd///veN0sfq9Ze//EVtCypr1qwptmnTprh169ZisVgs7t69u3jYYYcVFy5cqNZ548aN\n9XUIZS4UCsW//vWv9XbHjx/vGkd///vfi9XV1fX3Yc2aNQ3slJo0Ody6dOlSvOWWW+rjTjvttOK5\n555bf/3zn/+8OG7cONHOnj17ip07dy7OmTOn+OyzzxZbt25d/OSTT+rjDz/88Pqb8tJLLxXbtWtX\n3L59e338xIkTixMmTFDLSDvgXXfdVTzqqKMa1WHBggXFioqK4rZt2+rjTjjhhPqBH4NbLP3QoUOj\nsBo4cGBxz549xWKxWHz99deLzz//vKnPZdasWcX+/fsXhw0bVrzhhhvc6ZLCLW0+vA08bf6zn/3M\nbZ/2Iy6xfiXlR++5lL5z584i3GL1Khbj/eHEE0+sdwaeeOKJBn1WqvPcuXMblVmCW3iwW+Povffe\nKx5yyCHFhx9+uPjpp5+qZSwVaZY3QHv37l1/XllZia985Sv11x06dMAzzzxTf33ffffhlltuwZo1\nawDsnZZt3rwZ27dvx9FHH40vfvGL9bp9+/atP1+zZg22bduGTp061YfV1dXh//2//6eW69hjj60/\n79OnD9avX99IZ/369Tj66KOx//7714f1799f1JXEkz62PjlgwAAsXLgQgwcPxksvvYRx48aJenPn\nzkXLli2xYMECHH300XjmmWdw7bXXYuTIkRg5cqSrvB5Zv349li5dij/+8Y+45557UFdXh1NPPRXz\n589PnQ9tA0+bDRo0yLQn9aP33ntPrIvUr4pszUzLb/369fjKV76i9kspL16v2traBnpWfzj//PPx\n4IMPYuzYsXjggQfw7W9/uz5OGzseCXla4+hLX/oS7r//fvzyl7/E2LFjcfrpp+O///u/UVlZ6cqj\nuWWfrFryjhNkzZo1uOiiizBp0iRs2bIFW7ZsQVVVFQCgU6dOWLVqFXbs2FGvT1836Ny5Mw488EBs\n2rQJ77//Pt5//3189NFHePjhh9VyLFu2rIGtkBeVqqoqrFq1Ch9//HF92OLFi+t1YxsKodxaeo+c\nfvrpePzxxwHs7WhS53/33XfRvXt3nHXWWXjiiScwatQojB49Gocffrg7n9dffx3XXHNN/efJJ59s\ncP3oo48CAN544w0ce+yxWL16NQDg5ZdfTpRPTDxtZn0zQ+tH0n067LDDxH7F21jL77DDDsPq1avx\nySefNEifpF7V1dVqXbh885vfxPz581FbW4vZs2fj/PPPT1znNm3aYOPGjWJ5Y+Po61//Op588kms\nWbMGO3bsUNeZS0FKakumdevWaN26NQ455BB8+OGHmDRpUv3TOmxI/PSnP8XmzZsxZcqUBjdo0KBB\nOOKII/Dv//7veOedd1BXV4cVK1bg5ZdfFvMqFouYPXs2amtrsWXLFkyfPh3/8i//0khv0KBB6Ny5\nM6ZMmYJdu3Zh/vz5WLZsGUaPHg1grye6ZMkStU6DBw8204eyWHLyySfjmWeewebNm9G+fXtR5/DD\nD0fXrl2xadMmtG3bFu3atcM3vvENtGnTxrRN5ZhjjsGkSZPqP8OGDWtwfeaZZwLYu/A9ffp0XHDB\nBQCAp556Cqeffro7H0loG3jazBKrH3E5/vjjzX4Vk9Av77jjDuzatQsPPfQQNm3aJOp662X1h/bt\n22Po0KEYP348jjzySHz1q19NXOdjjz0W9957L95//33cc889eOONN+rjrHG0atUqPP3009i5c2f9\n60hez3BfyD6BG30q0tdGOnbsiEmTJmHs2LHo3bs3Pv300/pXHioqKjBr1iw8/vjj6NatG1599VWc\n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\n", "text": [ "" ] } ], "prompt_number": 29 }, { "cell_type": "code", "collapsed": false, "input": [ "# Display an image on the axes.\n", "# `~matplotlib.colors.Colormap`\n", "plt.imshow?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(z, cmap=plt.cm.Blues)\n", "# plt.cm = This module provides a large set of colormaps, \n", "# functions for registering new colormaps and for getting a colormap by name,\n", "# and a mixin class for adding color mapping functionality.\n", "plt.cm?" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.colorbar()" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "RuntimeError", "evalue": "No mappable was found to use for colorbar creation. First define a mappable such as an image (with imshow) or a contour set (with contourf).", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\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[0;32m----> 1\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolorbar\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/Library/Python/2.7/site-packages/matplotlib-1.4.x-py2.7-macosx-10.8-intel.egg/matplotlib/pyplot.pyc\u001b[0m in \u001b[0;36mcolorbar\u001b[0;34m(mappable, cax, ax, **kw)\u001b[0m\n\u001b[1;32m 2117\u001b[0m \u001b[0mmappable\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgci\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2118\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mmappable\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2119\u001b[0;31m raise RuntimeError('No mappable was found to use for colorbar '\n\u001b[0m\u001b[1;32m 2120\u001b[0m \u001b[0;34m'creation. First define a mappable such as '\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2121\u001b[0m \u001b[0;34m'an image (with imshow) or a contour set ('\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mRuntimeError\u001b[0m: No mappable was found to use for colorbar creation. First define a mappable such as an image (with imshow) or a contour set (with contourf)." ] }, { "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "# matplotlib \uc8fc\uc758\uc0ac\ud56d\n", "\n", "- Mac\uc5d0\uc11c canopy\ub97c \uc124\uce58 \ud6c4 \uc0ad\uc81c\ud588\ub354\ub2c8 matplotlib\uac00 \uc774\uc0c1\ud55c\ub370\ub85c \uaf2c\uc5ec \ubc84\ub838\uc74c.\n", "- \ub2e4\uc2dc canopy\ub97c \uc124\uce58\ud588\ub354\ub2c8 matplotlib path\uac00 \uc81c\ub300\ub85c \uc124\uc815 \ub428.\n", "- \uc774 \ubaa8\ub4e0 \ud604\uc0c1\uc740 \ub77c\uc774\ube0c\ub7ec\ub9ac \ud328\uc2a4\uac00 \uc798\ubabb \uc9c0\uc815\ub418\uc5b4 \uc0dd\uae34 \uc77c" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###matplotlib \uc0bd\uc9c8\uae30" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "matplotlib.matplotlib_fname()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 23, "text": [ "u'/Library/Python/2.7/site-packages/matplotlib-1.4.x-py2.7-macosx-10.8-intel.egg/matplotlib/mpl-data/matplotlibrc'" ] } ], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as p" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "p.plot(range(20), range(20))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 25, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n3edJzTDR47l161Y9+eSTam9v93k68wwMDGhgYEA1NTW6efOmFi1apBMnTujAgQN5PUddL/J83iyE\n3HEC5kxtba2mT58+5r6jR4+qpaVFktTS0qIjR474MZqRJno8JZ6fTs2aNUs1NTWSpJkzZ2rp0qW6\nfv163s9R1xd5rm8WQu4sy9LKlSuVSCS0d+9ev8cxXjqdViwWkyTFYjGl02mfJzLf7t27tXDhQrW1\nten27dt+j2Oky5cv68KFC1q+fHnez1HXF3mubxZC7k6fPq1z587p8OHD2rZtm06dOuX3SKFhWRbP\n2QK99dZb+vXXX3XmzBlNmTJFHR0dfo9knKGhITU2NmrXrl0qKSkZ87lcnqOuL/KysjL19fWNftzX\n16fy8nK3f0ykzJ49W5K0YMECNTQ06OzZsz5PZLZYLKaBgQFJUn9/v0pLS32eyGylpaWyLEtPP/20\n3n77bZ6febp3757Wrl2r9evXa82aNZLyf466vsiXLFmiX375RdeuXdPw8LC+/vpr1dXVuf1jIuPu\n3bsaHByUJN24cUPHjh0b84oB5K+urk5dXV2SpK6uLtXX1/s8kdn6+/sljbxR8PDhwzw/82Dbttra\n2lRVVaWNGzeO3p/3c9TJW/SzSaVSdk1Njb1o0SL7s88+8+JHRMbVq1ftxYsX24sXL7ZXrlxpf/HF\nF36PZJTGxkZ79uzZ9rRp0+zy8nJ7//799p07d+w1a9bY1dXVdn19vT04OOj3mMZ49HhOnTrVLi8v\nt/ft22c3NTXZ1dXV9osvvmhv2rTJHhgY8HtMY5w6dcq2LMtevHixXVNTY9fU1Njff/993s9R3hAE\nAIbz9R9fBgAUjkUOAIZjkQOA4VjkAGA4FjkAGI5FDgCGY5EDgOFY5ABguP8HQmiM6qsFcLwAAAAA\nSUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "p.show()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.rcsetup as rcsetup\n", "print(rcsetup.all_backends)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[u'GTK', u'GTKAgg', u'GTKCairo', u'MacOSX', u'Qt4Agg', u'TkAgg', u'WX', u'WXAgg', u'CocoaAgg', u'GTK3Cairo', u'GTK3Agg', u'WebAgg', u'agg', u'cairo', u'emf', u'gdk', u'pdf', u'pgf', u'ps', u'svg', u'template']\n" ] } ], "prompt_number": 27 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "4.3.1 \ubc30\uc5f4\uc5f0\uc0b0\uc73c\ub85c \uc870\uac74\uc808 \ud45c\ud604\ud558\uae30" ] }, { "cell_type": "code", "collapsed": false, "input": [ "xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 31 }, { "cell_type": "code", "collapsed": false, "input": [ "yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 32 }, { "cell_type": "code", "collapsed": false, "input": [ "cond = np.array([True, False, True, True, False])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "cond" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 34, "text": [ "array([ True, False, True, True, False], dtype=bool)" ] } ], "prompt_number": 34 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### \uc21c\uc218 \ud30c\uc774\uc36c \ubb38\uc81c\uc810\n", "\n", "- \ud070 \ubc30\uc5f4 \ube60\ub974\uac8c \ucc98\ub9ac \ubd88\uac00\n", "- \ub2e4\ucc28\uc6d0 \ubc30\uc5f4 \uc0ac\uc6a9 \ubd88\uac00" ] }, { "cell_type": "code", "collapsed": false, "input": [ "result = [(x if c else y)\n", " for x, y, c in zip(xarr, yarr, cond)]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 35 }, { "cell_type": "code", "collapsed": false, "input": [ "result" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 36, "text": [ "[1.1000000000000001, 2.2000000000000002, 1.3, 1.3999999999999999, 2.5]" ] } ], "prompt_number": 36 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####np.where \n", "\n", "- \uc544\uc8fc \uac04\uacb0\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "result = np.where(cond, xarr, yarr)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 37 }, { "cell_type": "code", "collapsed": false, "input": [ "result" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 38, "text": [ "array([ 1.1, 2.2, 1.3, 1.4, 2.5])" ] } ], "prompt_number": 38 }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.random.randn(4, 4)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "array([[-0.22738371, 1.00962082, -0.73187583, 0.00972816],\n", " [-1.02646242, -0.56073136, 0.19004584, 0.29742716],\n", " [ 0.93338441, 1.28053344, -1.13966449, -1.16674502],\n", " [ 1.09996334, 0.65299153, 0.29683578, 0.82472068]])" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####np.where\n", "\n", "- 2\ubc88\uc9f8, 3\ubc88\uc9f8 \uc778\uc790\ub294 \ubc30\uc5f4\uc774 \uc544\ub2c8\ub77c\ub3c4 \ub428\n", "- \ub458 \uc911 \ud558\ub098 \ud639\uc740 \ub458 \ub2e4 \uc2a4\uce7c\ub77c \uac12\ub3c4 \ub3d9\uc791\n", "- \ub2e4\ub978 \ubc30\uc5f4\uc5d0 \uae30\ubc18\ud55c \uc0c8\ub85c\uc6b4 \ubc30\uc5f4 \uc0dd\uc131\n", "- np.where(\uc870\uac74, \ucc38\uac12, \uac70\uc9d3\uac12)\n", "- \uc870\uac74\uc774 True\uc77c \ub54c \ucc38\uac12\uc774 \uc2e4\ud589\ub418\uba70, \uc870\uac74\uc774 False\uc77c \ub54c \uac70\uc9d3\uac12\uc774 \uc2e4\ud589" ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.where(arr > 0, 2, -2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "array([[-2, 2, -2, 2],\n", " [-2, -2, 2, 2],\n", " [ 2, 2, -2, -2],\n", " [ 2, 2, 2, 2]])" ] } ], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "np.where(arr > 0, 2, arr)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "array([[-0.22738371, 2. , -0.73187583, 2. ],\n", " [-1.02646242, -0.56073136, 2. , 2. ],\n", " [ 2. , 2. , -1.13966449, -1.16674502],\n", " [ 2. , 2. , 2. , 2. ]])" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2\uac1c\uc758 \ubd88\ub9ac\uc5b8 \ubc30\uc5f4\ub85c \uc870\ud569 \uac00\ub2a5\ud55c 4\uac00\uc9c0 \uacbd\uc6b0\n", "
\n",
      "result = []\n",
      "for i in range(n):\n",
      "    if cond1[i] and cond2[i]:\n",
      "        result.append(0)\n",
      "    elif cond1[i]:\n",
      "        result.append(1)\n",
      "    elif cond2[i]:\n",
      "        result.append(2)\n",
      "    else:\n",
      "        result.append(3)\n",
      "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "####\uc911\ucca9 where" ] }, { "cell_type": "code", "collapsed": false, "input": [ "cond1 = False\n", "cond2 = True" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "np.where(cond1 & cond2, 0,\n", " np.where(cond1, 1, \n", " np.where(cond2, 2, 3)))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ "array(2)" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "result = 1 * (cond1 & -cond2) + 2 * (cond2 & -cond1) + 3 * -(cond1 | cond2)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "result" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "-3" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "(cond1 & -cond2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ "0" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "2 * (cond2 & -cond1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 15, "text": [ "0" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "3 * -(cond1 | cond2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ "-3" ] } ], "prompt_number": 16 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "4.3.2 \uc218\ud559 \uba54\uc11c\ub4dc\uc640 \ud1b5\uacc4 \uba54\uc11c\ub4dc" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.random.randn(5, 4)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 40 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 41, "text": [ "array([[-0.63678953, -0.62168485, 0.02496119, -1.59948229],\n", " [ 1.50743692, -0.55029167, 1.36859314, -1.07390982],\n", " [-1.07246643, 1.66566843, 0.21434562, -0.11323983],\n", " [ 0.15297739, -0.14143016, -1.76468442, 0.59774678],\n", " [-0.936252 , 1.1050578 , -0.11289262, -0.36526419]])" ] } ], "prompt_number": 41 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.mean()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 42, "text": [ "-0.11758002809084407" ] } ], "prompt_number": 42 }, { "cell_type": "code", "collapsed": false, "input": [ "np.mean(arr)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 43, "text": [ "-0.11758002809084407" ] } ], "prompt_number": 43 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.sum()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 44, "text": [ "-2.3516005618168814" ] } ], "prompt_number": 44 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####mean\uc774\ub098 sum \uac19\uc740 \ud568\uc218\ub294 \uc120\ud0dd\uc801\uc73c\ub85c axis \uc778\uc790\ub97c \ubc1b\uc544 \ud574\ub2f9 axis\uc5d0 \ub300\ud55c \ud1b5\uacc4 \uacc4\uc0b0\ud558\uace0 \ud55c \ucc28\uc218 \ub0ae\uc740 \ubc30\uc5f4\uc744 \ubc18\ud658" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr.mean(axis=1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 45, "text": [ "array([-0.70824887, 0.31295714, 0.17357695, -0.28884761, -0.07733775])" ] } ], "prompt_number": 45 }, { "cell_type": "code", "collapsed": false, "input": [ "# axis \uc778\uc790\ub97c \ub118\uae34 \uac83\uacfc \ub118\uae30\uc9c0 \uc54a\uc740 \uac83\uc758 \uacb0\uacfc\uac12\uc774 \uac19\ub2e4.\n", "arr.sum(axis=0)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 49, "text": [ "array([-0.98509366, 1.45731955, -0.2696771 , -2.55414935])" ] } ], "prompt_number": 49 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.sum(0)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 46, "text": [ "array([-0.98509366, 1.45731955, -0.2696771 , -2.55414935])" ] } ], "prompt_number": 46 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.sum(axis=1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 50, "text": [ "array([-2.83299548, 1.25182856, 0.6943078 , -1.15539042, -0.30935102])" ] } ], "prompt_number": 50 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.sum(1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 47, "text": [ "array([-2.83299548, 1.25182856, 0.6943078 , -1.15539042, -0.30935102])" ] } ], "prompt_number": 47 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.sum?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 51 }, { "cell_type": "raw", "metadata": {}, "source": [ "Type: builtin_function_or_method\n", "String form: \n", "Docstring:\n", "a.sum(axis=None, dtype=None, out=None)\n", "\n", "Return the sum of the array elements over the given axis.\n", "\n", "Refer to `numpy.sum` for full documentation.\n", "\n", "See Also\n", "--------\n", "numpy.sum : equivalent function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "####cumsum\uacfc cumprod \uba54\uc11c\ub4dc\ub294 \uc911\uac04 \uacc4\uc0b0 \uac12\uc744 \ub2f4\uace0 \uc788\ub294 \ubc30\uc5f4\uc744 \ubc18\ud658" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 24, "text": [ "array([[0, 1, 2],\n", " [3, 4, 5],\n", " [6, 7, 8]])" ] } ], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "# Return the cumulative sum of the elements along the given axis.\n", "arr.cumsum?\n", "np.cumsum?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "# \uc138\ub85c\ub85c \ub354\ud558\uae30\n", "# 0\uc740 column\n", "arr.cumsum(0)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 26, "text": [ "array([[ 0, 1, 2],\n", " [ 3, 5, 7],\n", " [ 9, 12, 15]])" ] } ], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "# \uac00\ub85c\ub85c \uacf1\ud558\uae30\n", "# 1\uc740 row\n", "arr.cumprod(1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 27, "text": [ "array([[ 0, 0, 0],\n", " [ 3, 12, 60],\n", " [ 6, 42, 336]])" ] } ], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.cumprod(0)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 28, "text": [ "array([[ 0, 1, 2],\n", " [ 0, 4, 10],\n", " [ 0, 28, 80]])" ] } ], "prompt_number": 28 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "4.3.3 \ubd88\ub9ac\uc5b8 \ubc30\uc5f4\uc744 \uc704\ud55c \uba54\uc11c\ub4dc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc55e\uc758 \uba54\uc11c\ub4dc\uc5d0\uc11c \ubd88\ub9ac\uc5b8 \uac12\uc740 1(True), 0(False)\uc73c\ub85c \ucde8\uae09\n", "- \ub530\ub77c\uc11c \ubd88\ub9ac\uc5b8 \ubc30\uc5f4\uc5d0 \ub300\ud55c sum \uba54\uc11c\ub4dc\ub97c \uc2e4\ud589\ud558\uba74 True\uc778 \uc6d0\uc18c\uc758 \uac1c\uc218\ub97c \ubc18\ud658" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr = randn(100)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 29 }, { "cell_type": "code", "collapsed": false, "input": [ "(arr > 0).sum()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 30, "text": [ "51" ] } ], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 31, "text": [ "array([ -3.23981577e-01, 8.28471364e-01, -2.28531600e-01,\n", " 7.81542231e-01, 7.65533575e-01, -2.30715331e-01,\n", " -7.90815091e-01, -1.51521142e+00, 9.02727281e-01,\n", " -7.96393829e-01, -1.48280372e+00, 2.14388106e+00,\n", " 1.22935275e+00, 9.08580945e-01, -3.17050232e+00,\n", " -3.19110230e-01, -7.02813098e-01, -1.33922041e-01,\n", " 3.23867223e-01, -5.41750422e-01, 7.19855447e-01,\n", " 1.53577806e+00, -5.33780671e-01, -3.06636492e-01,\n", " 2.22113202e+00, 4.74560650e-01, 5.32113570e-02,\n", " 4.08017943e-01, -1.34531648e+00, -1.04639008e+00,\n", " -3.64408292e-01, -5.69251804e-01, -3.04232587e-01,\n", " -9.34929999e-01, -1.22969197e+00, -2.70477054e-01,\n", " 8.81988283e-01, 6.38303932e-02, -1.84218189e-01,\n", " -9.37450358e-02, 1.43859306e+00, 2.28406301e-01,\n", " -3.17556858e-01, -5.85153395e-01, -1.44669215e-02,\n", " 1.57324249e-03, 1.18927149e+00, 6.92504354e-01,\n", " 3.17347370e-01, -6.44348559e-01, -6.87929676e-01,\n", " 1.06098783e+00, 3.41548590e-01, 9.72900494e-01,\n", " -1.02978994e+00, 2.06980280e+00, 2.35221308e+00,\n", " -1.42752411e+00, 1.44456522e+00, 5.16166548e-01,\n", " 7.78068763e-03, -1.01988745e+00, -1.34798508e+00,\n", " 5.30907112e-01, 1.32554042e+00, -1.14103792e+00,\n", " -1.35376884e+00, -1.65932729e+00, -6.92428198e-01,\n", " -3.76567403e-01, 4.58025510e-01, 1.70369468e+00,\n", " -6.22888746e-01, -8.00883755e-01, -3.91857714e-01,\n", " 2.04939933e-01, 8.23046230e-01, 3.93639430e-01,\n", " 2.08406878e-01, -5.24268456e-02, 1.15119295e+00,\n", " 8.63978530e-01, 4.14495650e-01, -2.29354833e+00,\n", " 9.70715934e-01, 6.35288166e-01, 1.19324100e+00,\n", " 2.40637663e-01, 8.95268524e-01, 7.65764883e-01,\n", " -1.96315521e-02, 9.32871736e-02, -4.54868527e-01,\n", " -3.47747570e-01, -1.68156608e+00, -6.87830148e-01,\n", " 4.88761296e-02, 1.46764057e+00, -1.85496551e+00,\n", " 8.81609302e-01])" ] } ], "prompt_number": 31 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- any: \ud558\ub098 \uc774\uc0c1\uc758 True\uac12 \uac80\uc0ac\n", "- all: \ubaa8\ub4e0 \uc6d0\uc18c\uac00 True\uc778\uc9c0 \uac80\uc0ac" ] }, { "cell_type": "code", "collapsed": false, "input": [ "bools = np.array([False, False, True, False])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 32 }, { "cell_type": "code", "collapsed": false, "input": [ "bools.any()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 33, "text": [ "True" ] } ], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "bools.all()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 34, "text": [ "False" ] } ], "prompt_number": 34 }, { "cell_type": "code", "collapsed": false, "input": [ "bools = np.array([True, True, True, True])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 35 }, { "cell_type": "code", "collapsed": false, "input": [ "bools.any()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 36, "text": [ "True" ] } ], "prompt_number": 36 }, { "cell_type": "code", "collapsed": false, "input": [ "bools.all()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 37, "text": [ "True" ] } ], "prompt_number": 37 }, { "cell_type": "code", "collapsed": false, "input": [ "# 0\ub9cc \uc544\ub2c8\uba74 True\n", "# \ubd88\ub9ac\uc5b8 \ubc30\uc5f4\uc774 \uc544\ub2c8\uc5b4\ub3c4 \ub3d9\uc791\n", "arr.any()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 52, "text": [ "True" ] } ], "prompt_number": 52 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.all()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 53, "text": [ "True" ] } ], "prompt_number": 53 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "4.3.4 \uc815\ub82c" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.random.randn(8)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 38 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 39, "text": [ "array([-1.29426519, 0.14954979, 0.12856676, 0.98922155, 0.51783933,\n", " 0.08145027, 1.34539112, -1.5399891 ])" ] } ], "prompt_number": 39 }, { "cell_type": "code", "collapsed": false, "input": [ "arr.sort()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 40 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 41, "text": [ "array([-1.5399891 , -1.29426519, 0.08145027, 0.12856676, 0.14954979,\n", " 0.51783933, 0.98922155, 1.34539112])" ] } ], "prompt_number": 41 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### \ub2e4\ucc28\uc6d0 \ubc30\uc5f4\uc758 \uc815\ub82c\uc740 sort \uba54\uc11c\ub4dc\uc5d0 \ub118\uae34 \ucd95\uc758 \uac12\uc5d0 \ub530\ub77c 1\ucc28\uc6d0 \ubd80\ubd84 \uc815\ub82c" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr = randn(5, 3)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 65 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 66, "text": [ "array([[-0.64670479, -0.61555955, 0.46512793],\n", " [ 2.45875721, 0.30812392, -2.07493597],\n", " [-1.93571858, 0.17247077, -1.41579888],\n", " [-0.67120369, -0.6021445 , -0.47781563],\n", " [-0.45793084, 0.21905382, -0.39171426]])" ] } ], "prompt_number": 66 }, { "cell_type": "code", "collapsed": false, "input": [ "# row sort\n", "arr.sort(1)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 67 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 68, "text": [ "array([[-0.64670479, -0.61555955, 0.46512793],\n", " [-2.07493597, 0.30812392, 2.45875721],\n", " [-1.93571858, -1.41579888, 0.17247077],\n", " [-0.67120369, -0.6021445 , -0.47781563],\n", " [-0.45793084, -0.39171426, 0.21905382]])" ] } ], "prompt_number": 68 }, { "cell_type": "code", "collapsed": false, "input": [ "# column sort\n", "arr.sort(0)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 69 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 70, "text": [ "array([[-2.07493597, -1.41579888, -0.47781563],\n", " [-1.93571858, -0.61555955, 0.17247077],\n", " [-0.67120369, -0.6021445 , 0.21905382],\n", " [-0.64670479, -0.39171426, 0.46512793],\n", " [-0.45793084, 0.30812392, 2.45875721]])" ] } ], "prompt_number": 70 }, { "cell_type": "code", "collapsed": false, "input": [ "# row sort == arr.sort(1)\n", "arr.sort()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 63 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 64, "text": [ "array([[ -2.04858580e+00, -1.17193396e+00, 1.32127939e-01],\n", " [ -1.47844830e+00, -7.15492360e-01, 4.59896618e-01],\n", " [ -1.28286231e+00, -5.63080466e-01, 9.40448815e-01],\n", " [ -4.58628453e-01, 2.07478453e-01, 1.01902093e+00],\n", " [ 1.35560421e-03, 5.62354352e-01, 2.26660736e+00]])" ] } ], "prompt_number": 64 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ubc30\uc5f4\uc758 \ubd84\uc704\uc218\uac00 \ubb50\uc9c0??\n", "- \uc6b0\uc120 \ubc30\uc5f4\uc744 \uc815\ub82c\ud55c \ud6c4\uc5d0 \ud2b9\uc815 \ubd80\uc704\uc758 \uac12\uc744 \uc120\ud0dd" ] }, { "cell_type": "code", "collapsed": false, "input": [ "large_arr = randn(1000)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 71 }, { "cell_type": "code", "collapsed": false, "input": [ "large_arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 72, "text": [ "array([ -4.29508395e-01, -1.36200493e+00, 4.95139033e-01,\n", " 4.00047918e-01, -4.60536691e-01, -2.12402831e-01,\n", " -9.06761307e-01, -4.58112023e-01, -1.89420493e-01,\n", " 5.88505389e-01, 1.54879159e+00, 1.94523033e+00,\n", " -1.10438705e+00, -2.00339405e-01, 4.40621245e-01,\n", " -6.73178500e-01, -8.11953485e-01, -5.02833922e-01,\n", " 1.10495039e-02, 5.13181343e-02, -3.05642333e-01,\n", " 2.99366103e-01, 4.45071326e-01, -1.57670159e+00,\n", " 2.41872881e-01, -3.03246248e-01, -2.69677731e+00,\n", " -1.44213262e-01, 4.95691564e-01, 1.47744247e+00,\n", " 2.47281292e+00, -5.58374769e-01, -5.48004074e-01,\n", " 1.47523041e+00, -1.42483309e+00, 6.88823001e-01,\n", " -2.32917572e-01, 7.93444413e-01, -6.87697145e-01,\n", " 9.60635202e-02, -9.06197430e-01, 4.54872711e-02,\n", " 1.79188637e-01, 8.69338847e-01, 9.68360788e-01,\n", " -6.70549697e-02, -5.37811590e-01, 2.51251245e-01,\n", " 1.32979384e+00, -9.09943189e-01, 1.61039789e+00,\n", " -6.34625947e-01, -1.84791886e-01, -3.48497830e-02,\n", " 4.63259730e-01, 2.30507960e-01, 1.22105211e-01,\n", " 1.13231687e+00, 5.09248157e-01, -1.00935787e+00,\n", " -6.99156259e-01, 6.92762353e-01, 1.07228328e+00,\n", " 2.63261095e-01, -4.61268649e-01, -1.21295079e-02,\n", " 1.79632812e+00, -9.65936552e-02, -4.08273329e-01,\n", " -3.00067241e-01, -1.10413596e+00, -7.83237493e-01,\n", " -2.22909413e-01, 1.03801629e+00, -2.09290504e-01,\n", " -8.62668264e-01, 7.14459623e-01, -1.73361316e-01,\n", " 1.07723630e+00, 2.23126720e-01, 3.72277818e-01,\n", " 1.17767020e+00, -7.58352226e-01, -5.02207697e-01,\n", " -3.60673507e-01, -2.23833716e+00, -1.13628708e+00,\n", " 6.73188450e-01, -7.92321106e-01, 5.21635062e-01,\n", " 5.44919937e-01, -1.47894173e+00, 5.16450627e-01,\n", " 1.19299429e+00, 1.43446337e-01, -9.28864070e-01,\n", " -8.76316357e-01, 3.73573015e-01, -8.04425224e-01,\n", " 5.24236617e-01, -9.08890292e-01, -6.34736133e-01,\n", " 1.34623284e+00, -9.29476165e-01, 1.91166008e+00,\n", " 2.60012822e-01, -9.89962582e-01, -9.99338803e-02,\n", " -6.12590213e-01, -5.95791161e-01, -8.59075224e-01,\n", " -5.84090801e-02, -1.71179541e+00, -1.81882533e+00,\n", " -1.67316878e+00, -2.03148775e+00, -3.99763191e-01,\n", " 1.02217992e-01, -7.63591358e-01, 6.27405302e-01,\n", " -6.48137038e-01, 8.02724324e-01, 7.29054021e-01,\n", " 8.45711411e-01, -6.27447749e-01, 9.68040204e-01,\n", " -1.20479407e+00, -6.84909828e-01, -1.32033351e+00,\n", " -6.74435778e-01, -2.03561662e-01, -1.29237414e+00,\n", " 2.33811627e+00, 1.83776057e+00, 1.11556763e-01,\n", " -1.68339529e-01, 6.56059095e-02, 2.65158367e-01,\n", " 2.66335457e+00, 7.03558990e-01, -2.69842939e-01,\n", " -7.02982583e-01, -4.74552810e-01, 2.34925495e-02,\n", " -1.37147570e+00, 1.58684535e-02, -5.67087413e-01,\n", " 3.92901939e-03, -6.60641701e-01, 8.90034849e-01,\n", " 2.44293395e+00, -1.88248419e+00, 1.14142368e-02,\n", " 6.25897745e-02, 7.56576704e-01, 3.29939470e-01,\n", " 2.20075664e-01, 9.79923464e-01, 5.32580306e-02,\n", " -6.75553770e-01, 1.35057852e+00, -4.50302535e-01,\n", " 1.68233640e+00, 2.79554382e-01, 5.38503551e-02,\n", " 3.56232141e-01, -4.94321902e-01, -8.86454436e-01,\n", " 1.44427854e+00, -2.02695546e-01, -1.39553176e-03,\n", " 4.24066238e-01, -9.31776849e-01, -4.03702618e-01,\n", " 1.24251395e+00, 1.80955269e+00, -5.71768210e-01,\n", " 2.39689099e-01, 1.63196605e+00, 8.07407676e-01,\n", " 1.53420395e+00, 1.42179316e+00, 2.27843853e+00,\n", " 8.03832220e-01, -1.85708357e-01, -3.84618866e-01,\n", " -9.73839901e-01, -6.40194272e-01, -1.11862402e+00,\n", " -7.72480188e-01, -1.36718409e+00, -1.07401935e+00,\n", " 1.59331230e+00, 8.72952920e-01, 1.42536690e-01,\n", " 6.60584412e-01, 3.60638582e-01, 2.30646928e-03,\n", " -9.49153500e-01, 7.48317714e-02, 1.17793492e+00,\n", " -9.43259531e-01, -1.63496881e+00, -1.40158392e+00,\n", " -1.88909547e+00, 1.04035212e+00, -7.34070917e-02,\n", " 2.36539211e-01, 4.96466550e-01, 1.06531880e-01,\n", " 7.68190763e-01, 1.62263596e+00, -2.16199725e-01,\n", " 5.50272846e-01, -2.22164026e+00, -9.05457240e-01,\n", " -8.25657951e-01, -2.35960958e-02, 1.57733609e+00,\n", " -8.42690033e-01, 1.01029149e+00, -3.89522140e-01,\n", " 2.24196358e+00, 1.40676970e+00, -7.23178560e-01,\n", " 3.77128096e-01, 1.76395097e-01, -1.20027683e+00,\n", " 1.68082983e+00, 9.36354944e-01, 3.28059562e-01,\n", " 1.11334640e+00, -5.50203604e-01, -7.28600779e-01,\n", " 3.77103373e-01, -7.55643567e-01, -8.83098102e-02,\n", " 3.54852365e-01, -7.71534792e-01, -6.92987535e-03,\n", " -4.46883339e-01, -1.13253883e+00, -1.74730807e+00,\n", " -2.90835798e-01, -2.64816142e-01, -1.12801293e+00,\n", " 8.87401625e-01, -2.02248839e-01, -1.07404348e+00,\n", " -7.64295571e-01, -9.13545357e-01, -1.52115886e+00,\n", " 8.35135084e-01, -2.63538561e-01, 2.91623652e-01,\n", " -8.77624702e-01, -4.12720393e-02, 8.68549898e-01,\n", " 2.87465694e-01, 6.16241466e-02, 2.49722884e-01,\n", " -3.57049160e-01, 8.80203727e-01, 7.53353403e-01,\n", " -2.64328904e-01, 9.55666238e-01, 2.39277732e-01,\n", " 5.13352635e-02, 1.33661969e-01, 8.29789594e-02,\n", " 2.83774160e-01, -1.43584702e+00, -9.07379596e-02,\n", " 8.29396005e-01, -7.23347532e-01, 1.29933332e+00,\n", " 3.16552961e-01, -2.90766277e-01, 1.02591928e+00,\n", " 2.50048040e-01, 1.62370749e-01, 5.84664973e-01,\n", " -3.78158131e-01, 1.81228938e+00, -8.33741222e-01,\n", " -1.51988731e+00, -2.44823924e-01, -6.12378686e-01,\n", " -1.91732894e+00, -6.30232869e-01, 3.16687225e-01,\n", " 1.15717681e+00, -7.12191015e-01, 6.42571088e-01,\n", " -1.49411865e+00, -8.70006521e-02, -6.10247820e-01,\n", " -1.91302577e-01, 1.35799894e+00, -1.95041755e+00,\n", " -3.51379530e-01, 3.71495503e-01, -2.00287859e+00,\n", " 1.41282095e+00, 1.85591212e+00, -8.01882224e-01,\n", " -6.98175787e-04, -3.05526912e-01, -3.90661627e-01,\n", " -1.73071827e+00, -8.76039187e-01, -1.79323245e+00,\n", " -4.51736762e-01, 9.80646954e-01, 9.38154844e-02,\n", " 5.11654704e-01, 6.15532721e-01, -1.14700052e-01,\n", " 4.85996352e-01, 7.51639064e-02, 5.35474476e-01,\n", " -9.88417001e-02, -8.33385972e-01, -7.31626734e-01,\n", " -6.08904215e-01, -9.21113698e-01, -2.13082227e-01,\n", " 7.09102578e-01, -5.41494507e-01, 3.05555972e-01,\n", " 9.55230292e-02, -3.69808547e-01, 1.92172171e+00,\n", " -5.58850774e-01, -1.10528092e+00, 4.24916854e-01,\n", " -8.72818054e-02, 6.21175240e-01, 8.25144871e-01,\n", " -9.61513023e-01, -1.62155561e+00, 3.47142814e-02,\n", " -1.69636901e-01, 2.47938480e+00, 4.80396091e-01,\n", " 1.24418065e+00, 2.45412578e+00, -3.43163489e-02,\n", " 3.62465604e-01, 2.42711151e-01, -4.74011779e-01,\n", " 1.16674977e-01, 8.97977547e-01, -2.37991927e+00,\n", " 2.21798841e-01, -1.10939751e+00, -1.11119638e+00,\n", " 2.72332092e-01, -1.45628595e+00, 3.20351615e-02,\n", " 4.07968884e-01, 1.01627667e+00, -2.58984149e-02,\n", " -2.35832288e+00, -2.31968076e-02, -2.40170151e-01,\n", " 1.62098680e+00, -5.75439430e-01, -6.09768274e-01,\n", " -1.21109933e+00, -7.73292408e-01, -6.22048657e-01,\n", " -4.40869265e-01, 5.53117253e-01, 8.57001000e-01,\n", " -8.79901838e-01, 7.15984218e-01, -1.02821296e+00,\n", " 1.78075394e-01, -8.04159948e-01, 1.17595832e+00,\n", " 5.28495647e-01, 5.80977393e-02, 1.33655351e+00,\n", " -4.06637081e-01, -2.05456235e+00, -6.52023036e-01,\n", " 1.45482527e+00, 1.73943375e+00, 6.28849148e-01,\n", " -1.64283521e+00, 2.12507256e-01, 4.63925360e-01,\n", " -1.16238730e+00, 7.20037298e-01, -4.03416456e-01,\n", " 6.54250059e-01, 6.47219824e-01, -2.20080147e+00,\n", " -9.97843974e-02, -1.80832610e-01, -1.10556494e-01,\n", " 2.60359081e-01, 2.40179505e+00, 6.22851851e-02,\n", " -2.13086313e+00, -1.29896815e+00, -4.18185758e-01,\n", " 6.10711929e-01, 7.16393388e-01, -1.42035186e+00,\n", " 9.40327241e-01, 6.76687404e-01, 3.50961733e-01,\n", " -9.77133508e-01, -1.15802802e+00, 6.88848230e-01,\n", " 4.72212304e-01, -3.23382923e-01, -1.36623347e-01,\n", " -1.55208294e-01, -7.29429389e-01, 6.13177446e-02,\n", " 3.13487245e-01, -3.70044577e-02, -9.82971433e-01,\n", " -6.14031485e-01, -1.11019736e+00, 3.28132639e-01,\n", " 1.90203360e+00, 1.37839177e+00, 5.04850922e-01,\n", " 1.55736851e+00, -4.80397363e-01, 1.93732087e+00,\n", " 7.77678537e-01, -4.20329928e-01, 3.36142107e-01,\n", " -1.62302623e-01, 5.44727047e-01, 7.33916407e-01,\n", " 1.35574227e+00, -3.41454302e-02, 2.52098960e+00,\n", " 1.33278528e+00, 4.48731345e-01, 1.55389587e+00,\n", " -6.80416636e-01, -1.10077282e+00, -1.39536547e+00,\n", " 4.33739200e-01, 1.38480391e+00, 6.54759422e-01,\n", " -1.21447063e-01, -4.63864933e-01, 2.77641308e-01,\n", " 1.40542176e+00, -1.79853054e-01, -2.42234125e+00,\n", " -5.99723068e-01, 9.36188901e-01, 5.78450429e-01,\n", " 7.05092627e-03, 1.01614086e+00, -6.24630235e-01,\n", " 1.17857022e+00, -3.02260214e-01, 1.07950240e+00,\n", " -6.33355327e-01, 1.33641767e-02, 7.19690584e-02,\n", " -1.01628323e+00, -1.12636781e+00, -8.89987133e-02,\n", " 5.65151389e-01, 2.06625009e-01, 7.43459540e-01,\n", " 1.99156262e+00, 1.48835038e+00, -2.50286866e-01,\n", " -7.27403363e-01, -1.24200346e+00, -3.06306850e+00,\n", " -1.80778446e+00, -3.33644156e-01, -1.43404006e+00,\n", " -2.15953652e+00, 3.76675514e-01, 9.79053581e-01,\n", " 5.43741044e-01, 2.21124759e-01, 5.60466563e-01,\n", " -1.91870650e-01, -1.22448926e+00, 1.78564790e-01,\n", " -6.65430848e-01, 4.21908324e-01, 1.85672416e-01,\n", " -3.41986446e-01, 9.89644593e-01, 1.26244858e-01,\n", " 6.88194354e-01, 1.25838367e-01, 1.25238296e-01,\n", " 6.17139237e-01, -4.75649906e-01, -6.93480958e-01,\n", " 1.18864588e+00, 2.01864890e-01, 7.90335342e-01,\n", " -1.28902614e-01, 4.58601573e-01, -3.80931197e-01,\n", " -4.08259872e-01, 1.21775430e+00, 1.61416839e-01,\n", " -5.96590011e-01, 6.96609989e-01, -1.44672347e+00,\n", " -1.33769274e+00, 9.22626621e-01, -3.89547785e-01,\n", " -1.76797055e-01, 2.46675920e-02, 4.40859374e-01,\n", " -2.58293339e-01, 1.85961612e+00, -8.76651861e-01,\n", " 1.72902552e+00, 7.80398510e-01, -4.87105846e-01,\n", " 7.17534644e-01, 3.44022541e-01, 5.92497233e-01,\n", " -4.29391939e-01, 7.47938330e-01, -1.17035423e+00,\n", " -1.10064561e+00, 6.09757025e-01, -1.25808772e+00,\n", " -8.52684024e-01, 2.58162718e-01, -1.33686422e+00,\n", " 1.10106603e+00, 2.66032633e+00, 1.87994318e-01,\n", " 3.49947032e-02, 1.85858430e-01, -7.24792358e-01,\n", " 2.64808895e+00, 2.45444623e-01, -1.34336055e+00,\n", " -7.72446599e-01, -1.51602891e+00, -6.50233076e-01,\n", " -1.56844751e+00, -1.05062346e+00, -2.86973260e-01,\n", " 7.09962361e-02, -5.39234173e-01, -2.82752854e-01,\n", " 2.15517546e-01, -7.03144813e-01, 1.18600101e+00,\n", " -7.00184252e-01, -8.32132624e-01, -3.78653229e-02,\n", " -1.88972355e+00, -6.38183518e-01, -4.65591527e-02,\n", " -7.61785553e-01, 1.46353111e+00, 7.79171044e-01,\n", " -1.46324939e-01, 7.29982555e-02, 1.15421810e+00,\n", " -2.02005208e+00, 2.11417505e+00, -6.42565116e-01,\n", " 3.35868153e+00, 6.80035733e-01, -1.26182384e+00,\n", " -9.75333995e-01, 5.67174934e-01, 2.39942339e-01,\n", " -5.03370558e-01, 2.08472782e-01, 4.14567129e-01,\n", " 2.18867297e+00, 1.94173622e+00, 5.10886461e-02,\n", " -1.50998301e-01, 2.77117503e+00, 7.48789039e-01,\n", " -4.15478038e-01, -1.13996536e+00, 1.51877559e-01,\n", " -4.87385112e-02, 4.08771408e-01, -9.42060459e-01,\n", " 6.88676421e-01, -1.49426942e+00, -1.00135323e+00,\n", " 1.52729803e+00, -4.67584671e-01, -1.61988635e+00,\n", " -1.10527813e+00, 1.06891791e-01, -6.54341299e-01,\n", " 9.41014842e-01, 2.28082939e+00, -8.45188292e-01,\n", " -8.26822509e-01, 2.13322954e-02, 4.10757063e-01,\n", " -1.47180689e+00, -7.74095839e-01, 1.36211756e-01,\n", " 2.75901949e-01, 1.81900254e+00, -2.33384892e+00,\n", " -1.29414249e+00, -4.50153119e-01, -2.05601179e-01,\n", " 1.87965751e-01, -8.17752911e-01, 1.07559648e+00,\n", " -2.38538151e-01, 2.13688230e-01, 1.91924925e+00,\n", " -2.49130302e-02, 7.77207484e-01, -2.84147970e-01,\n", " -7.87791709e-01, -2.85567202e-02, -1.00152846e+00,\n", " -1.11487337e+00, -3.34068438e-01, -1.10442514e+00,\n", " -3.10453464e-01, 2.20479749e-01, 4.92794308e-01,\n", " -8.61866176e-01, 1.22720947e+00, 2.61509433e+00,\n", " 7.23622094e-01, 8.74436635e-01, -1.40880195e+00,\n", " -1.43649743e-01, 1.78329843e+00, 3.00309866e-01,\n", " -1.26393003e+00, 3.38722686e-01, -9.79864530e-02,\n", " -1.13247094e+00, -2.86781448e+00, -1.64946873e+00,\n", " -4.05287624e-01, -5.45433262e-01, -1.95246018e-01,\n", " 2.39543750e-01, -4.98774227e-01, -1.21814350e-02,\n", " -5.06007174e-01, 7.68324470e-01, -2.12053662e+00,\n", " -8.22306466e-01, -6.24000188e-01, -7.76546717e-01,\n", " -1.23826293e+00, -2.51329803e-01, 2.00795361e-01,\n", " -1.81302408e+00, -3.00796763e-01, 9.77384496e-01,\n", " -5.17927752e-01, 4.42469682e-01, 2.56194557e-01,\n", " 1.11326882e+00, -8.73586836e-02, 7.20254122e-01,\n", " -1.55356457e+00, -2.83373537e-01, -5.44600031e-01,\n", " -1.77836190e-01, -6.97885512e-01, 2.93182988e-01,\n", " 2.23250396e-01, -2.00184656e-01, 4.53104013e-01,\n", " -8.99839543e-01, -2.63440759e-01, 1.73555024e+00,\n", " -8.65562209e-01, 8.87114990e-02, 1.49192944e+00,\n", " 4.92897939e-01, 5.84869831e-01, 1.41941060e-01,\n", " 5.71834441e-01, -1.17015462e+00, 8.82357243e-01,\n", " -2.74077065e-01, -3.54206587e-01, 7.96728656e-01,\n", " -1.13585621e+00, -2.81575824e-01, 1.67728342e+00,\n", " -9.97413801e-01, -1.56432424e+00, 1.05543157e+00,\n", " -1.85721071e-01, -1.08844987e+00, 2.30777471e+00,\n", " -3.98923030e-01, -1.52689531e+00, -1.30988472e-01,\n", " 7.48857114e-01, -3.16926160e-01, -4.01547413e-01,\n", " 2.61188599e+00, -7.87303611e-01, -8.64018266e-02,\n", " 1.48648294e+00, 1.98419381e-01, -1.47456655e+00,\n", " -7.32414736e-01, 3.46203803e-01, -1.85189266e+00,\n", " 7.82567139e-01, 6.82734123e-01, -9.44323685e-01,\n", " -1.87257316e-01, -1.06771291e+00, 1.08064620e+00,\n", " -7.66393733e-02, 9.80222553e-01, -1.47727385e+00,\n", " 4.08454658e-01, 1.89668089e+00, -1.88790295e-02,\n", " -6.58958311e-02, 4.73879817e-01, -1.28187179e-01,\n", " 4.34665769e-01, 2.50449352e-01, 1.63058445e-01,\n", " -2.03782588e+00, 8.63814259e-01, -7.42734565e-01,\n", " -1.22266620e-01, -7.04399843e-01, 1.50658853e-01,\n", " 5.12510391e-01, 1.19559712e+00, -4.06416997e-01,\n", " 3.42040589e-01, 3.65108960e-01, -4.74748622e-01,\n", " 2.24683364e-01, 2.40113935e+00, -9.24880883e-01,\n", " 1.62616343e+00, 4.60089251e-01, 9.57186419e-01,\n", " -1.18852773e+00, 4.02634261e-01, -8.94951593e-02,\n", " -1.58434473e+00, -6.33301119e-01, 1.63076520e+00,\n", " 7.02202941e-01, 4.04983214e-01, -4.69827009e-01,\n", " -1.17511971e+00, -1.06989636e+00, 1.72591774e+00,\n", " 1.29562104e+00, -1.26193161e+00, 1.79053389e+00,\n", " -1.10715627e+00, 3.24061122e-01, 1.38537009e-01,\n", " 1.51724631e+00, 1.62207931e-01, 1.41439807e+00,\n", " -1.27736321e+00, -2.16237283e+00, 9.65604403e-02,\n", " -1.86342044e-02, 4.61363769e-01, -3.08867090e-01,\n", " -1.69491323e-01, -9.59122944e-01, -1.56478776e+00,\n", " 7.95927622e-01, -1.02158175e+00, -1.71476029e+00,\n", " -1.61932435e+00, -2.01502285e+00, -4.49689106e-01,\n", " -2.34354770e+00, -3.30105942e-01, -7.32951375e-03,\n", " -8.36623505e-02, 4.26072922e-01, 2.19353979e-01,\n", " 1.22479187e+00, 1.19254879e+00, -8.04625281e-01,\n", " 4.11856826e-01, 2.39721580e+00, -1.59760131e+00,\n", " 9.04523377e-01, 3.94967156e-01, 7.12154848e-01,\n", " -4.65484065e-02, -4.98318008e-02, -1.00875851e-01,\n", " 7.54675058e-01, 6.28805068e-01, -9.09272660e-01,\n", " -2.34259096e+00, 1.57635169e+00, -1.25166398e+00,\n", " 6.78547266e-02, 1.25630775e+00, -1.93908789e-01,\n", " -6.00056825e-01, -2.91714609e-01, 1.55098025e-01,\n", " 9.05506330e-01, -3.92652143e-01, 4.85622749e-01,\n", " 1.90143683e+00, 1.01600482e+00, -5.69249135e-01,\n", " -3.19852665e-02, -5.34632662e-01, -4.47829818e-01,\n", " 6.37598585e-01, -1.04838837e-01, -1.75949403e+00,\n", " -6.64564117e-01, -5.23301481e-01, 1.20324045e+00,\n", " 5.59718853e-01, 1.43650472e+00, 2.31763710e-01,\n", " 3.99944809e-01, -4.80131315e-01, 2.46383893e-01,\n", " -7.58240568e-01, -3.95459908e-01, 4.74421627e-02,\n", " 1.04142021e+00, -1.85600715e+00, -5.20732886e-01,\n", " -7.65829831e-01, 3.03178443e-01, 2.40769604e-01,\n", " -9.52693138e-01, -2.53175152e-01, -3.61232252e-01,\n", " 6.70420510e-01, -6.91753453e-01, -4.69661353e-01,\n", " 8.32496698e-01, 5.95664666e-01, 8.60709015e-01,\n", " -6.00647042e-01, -3.92609128e-01, -1.15103600e+00,\n", " 8.80570781e-01, 5.72100646e-01, -6.43346289e-01,\n", " 1.11319831e+00, 1.45815845e+00, -3.57908899e-01,\n", " 2.16407885e-02, 3.09683660e-01, 2.10969740e+00,\n", " -4.86025303e-01, 2.06043707e+00, -2.27583903e-01,\n", " 3.37812391e-01, -8.66030298e-01, 5.31815471e-01,\n", " -3.04041167e-01, 7.92199769e-01, -1.80331770e+00,\n", " -1.96914402e+00, -1.38389701e+00, 2.17982344e-01,\n", " 4.82257069e-01, 1.35463083e+00, -5.62271966e-01,\n", " 9.90198843e-01, -2.35984141e-01, -5.27349929e-01,\n", " -4.56075258e-02, -5.82049390e-01, -5.36539610e-01,\n", " 1.92096253e-01, -1.98882554e-01, 6.77706899e-01,\n", " -2.17204851e-01, -4.84412234e-01, 6.25187882e-02,\n", " -1.52047818e-01, -1.61634677e-01, -3.06279413e-01,\n", " -1.41152153e+00, -1.09372297e+00, -1.44265009e+00,\n", " -2.53147106e-01, -8.89935140e-02, 4.10404084e-01,\n", " -6.07883105e-01, 3.18176412e-01, -7.48708208e-01,\n", " -6.44991708e-01, -4.65583587e-01, 5.13852326e-01,\n", " -1.79461424e-01, 1.40860971e+00, 3.85209228e-01,\n", " -1.93957680e+00, 7.32086042e-01, 3.25055708e-01,\n", " -3.20540178e-01, 1.09525185e-01, 3.55497256e-01,\n", " -2.44301493e-01, 6.30860391e-02, -2.00332466e+00,\n", " 7.13372324e-01, -1.89384649e+00, 1.09057189e+00,\n", " -5.84535175e-01, 9.55037730e-01, 8.08094003e-01,\n", " 7.21255488e-01, 8.70521349e-01, -1.07160654e+00,\n", " 3.68817734e-01, -1.20169678e+00, -1.86614879e+00,\n", " 1.17480438e+00, 1.34851916e+00, -3.33241044e-01,\n", " -8.25865193e-01, -1.00180734e-01, 4.35692098e-01,\n", " -1.05751208e+00, -8.97325897e-01, -8.94678084e-01,\n", " 3.26291177e-01, 1.55247072e+00, 1.12318897e+00,\n", " 4.34361064e-01, 6.19221545e-01, -4.02797021e-01,\n", " 1.13527092e+00, -1.30091498e+00, 1.08391983e+00,\n", " -8.23290340e-01, -1.53585005e+00, -1.00746423e-01,\n", " 3.39686865e-01, 5.54838806e-01, -1.01445556e+00,\n", " -1.14410079e+00, 1.10134860e+00, 3.27000521e-01,\n", " 5.82213994e-01, 9.56807182e-01, -3.20736912e-02,\n", " 1.99519577e-01, 2.96282262e-01, 2.24547095e-01,\n", " -8.67865620e-01, -8.02078530e-01, -2.53432136e+00,\n", " 1.21763219e+00, -1.60727166e+00, 5.67089675e-02,\n", " -1.07681000e+00, -1.58144448e+00, 1.41052682e+00,\n", " 5.57275658e-01, 2.73073742e-01, -5.91073898e-01,\n", " -5.74964650e-02, 7.13222633e-01, 7.38507361e-02,\n", " -7.10852978e-01, 1.52470350e+00, 1.79084849e-01,\n", " 6.53579705e-01])" ] } ], "prompt_number": 72 }, { "cell_type": "code", "collapsed": false, "input": [ "large_arr.sort()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 73 }, { "cell_type": "code", "collapsed": false, "input": [ "int(0.05 * len(large_arr))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 75, "text": [ "50" ] } ], "prompt_number": 75 }, { "cell_type": "code", "collapsed": false, "input": [ "large_arr[int(0.05 * len(large_arr))]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 76, "text": [ "-1.6198863490901547" ] } ], "prompt_number": 76 }, { "cell_type": "code", "collapsed": false, "input": [ "large_arr[50]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 77, "text": [ "-1.6198863490901547" ] } ], "prompt_number": 77 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "4.3.5 \uc9d1\ud569 \ud568\uc218" ] }, { "cell_type": "code", "collapsed": false, "input": [ "names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 52 }, { "cell_type": "code", "collapsed": false, "input": [ "np.unique(names)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 53, "text": [ "array(['Bob', 'Joe', 'Will'], \n", " dtype='|S4')" ] } ], "prompt_number": 53 }, { "cell_type": "code", "collapsed": false, "input": [ "ints = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 54 }, { "cell_type": "code", "collapsed": false, "input": [ "np.unique(ints)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 55, "text": [ "array([1, 2, 3, 4])" ] } ], "prompt_number": 55 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####\uc21c\uc218 \ud30c\uc774\uc36c \uad6c\ud604" ] }, { "cell_type": "code", "collapsed": false, "input": [ "sorted(set(names))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 56, "text": [ "['Bob', 'Joe', 'Will']" ] } ], "prompt_number": 56 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit np.unique(names)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "100000 loops, best of 3: 11 \u00b5s per loop\n" ] } ], "prompt_number": 57 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit sorted(set(names))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "100000 loops, best of 3: 2.4 \u00b5s per loop\n" ] } ], "prompt_number": 58 }, { "cell_type": "code", "collapsed": false, "input": [ "values = np.array([6, 0, 0, 3, 2, 5, 6])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 59 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####np.in1d\n", "\n", "- 2\uac1c\uc758 \ubc30\uc5f4\uc744 \uc778\uc790\ub85c \ubc1b\uc544 \uccab \ubc88\uc9f8 \ubc30\uc5f4\uc758 \uac01 \u3147\uc6d0\uc18c\uac00 \ub450 \ubc88\uc9f8 \ubc30\uc5f4\uc758 \uc6d0\uc18c\ub97c \ud3ec\ud568\ud558\ub294\uc9c0\ub97c \ub098\ud0c0\ub0b4\ub294 \ubd88\ub9ac\uc5b8 \ubc30\uc5f4\uc744 \ubc18\ud658" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Test whether each element of a 1-D array is also present in a second array.\n", "# Returns a boolean array the same length as 'ar1' that is True\n", "# where an element of `ar1` is in `ar2` and False otherwise.\n", "# in 1 dictionary?\n", "np.in1d?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 60 }, { "cell_type": "code", "collapsed": false, "input": [ "np.in1d(values, [2, 3, 6])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 61, "text": [ "array([ True, False, False, True, True, False, True], dtype=bool)" ] } ], "prompt_number": 61 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### \ubc30\uc5f4 \uc9d1\ud569 \uc5f0\uc0b0\n", "\n", "Method | Comment\n", "--- |----\n", "unique(x) | \ubc30\uc5f4 x\uc5d0\uc11c \uc911\ubcf5\ub41c \uc6d0\uc18c\ub97c \uc81c\uac70\ud55c \ud6c4 \uc815\ub82c\ud558\uc5ec \ubc18\ud658\ud55c\ub2e4.\n", "intersect1d(x, y) | \ubc30\uc5f4 x\uc640 y\uc5d0 \uacf5\ud1b5\uc801\uc73c\ub85c \uc874\uc7ac\ud558\ub294 \uc6d0\uc18c\ub97c \uc815\ub82c\ud558\uc5ec \ubc18\ud658\ud55c\ub2e4.\n", "union1d(x, y) | \ub450 \ubc30\uc5f4\uc758 \ud569\uc9d1\ud569\uc744 \ubc18\ud658\ud55c\ub2e4.\n", "in1d(x, y) | x\uc758 \uc6d0\uc18c \uc911 y\uc758 \uc6d0\uc18c\ub97c \ud3ec\ud568\ud558\ub294\uc9c0\ub97c \ub098\ud0c0\ub0b4\ub294 \ubd88\ub9ac\uc5b8 \ubc30\uc5f4\uc744 \ubc18\ud658\ud55c\ub2e4.\n", "setdiff1d(x, y) | x\uc640 y\uc758 \ucc28\uc9d1\ud569\uc744 \ubc18\ud658\ud55c\ub2e4.\n", "setxor1d(x, y) | \ud55c \ubc30\uc5f4\uc5d0\ub294 \ud3ec\ud568\ub418\uc9c0\ub9cc \ub450 \ubc30\uc5f4 \ubaa8\ub450\uc5d0\ub294 \ud3ec\ud568\ub418\uc9c0 \uc54a\ub294 \uc6d0\uc18c\ub4e4\uc758 \uc9d1\ud569\uc778 \ub300\uce6d\ucc28\uc9d1\ud569\uc744 \ubc18\ud658\ud55c\ub2e4." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "4.4 \ubc30\uc5f4\uc758 \ud30c\uc77c \uc785\u2219\ucd9c\ub825" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- NumPy\ub294 \ub514\uc2a4\ud06c\uc5d0\uc11c \ud14d\uc2a4\ud2b8\ub098 \ubc14\uc774\ub108\ub9ac \ud615\uc2dd\uc758 \ud30c\uc77c\ub85c\ubd80\ud130 \ub370\uc774\ud130\ub97c \ubd88\ub7ec\uc624\uac70\ub098 \uc800\uc7a5 \uac00\ub2a5" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "4.4.1 \ubc30\uc5f4\uc744 \ubc14\uc774\ub108\ub9ac \ud615\uc2dd\uc73c\ub85c \ub514\uc2a4\ud06c\uc5d0 \uc800\uc7a5\ud558\uae30" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.arange(10)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 62 }, { "cell_type": "code", "collapsed": false, "input": [ "# add file extension '.npy'\n", "np.save('some_array', arr)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 63 }, { "cell_type": "code", "collapsed": false, "input": [ "!ls" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2014\ub144 5\uc6d4 \ub300\uc548\uc5b8\uc5b4 \ucd95\uc81c \uc815\ubaa8 \ud6c4\uae30.ipynb\r\n", "AMINOCIDS.ipynb\r\n", "CodeAcademy_Python.ipynb\r\n", "Crawler_qna.ipynb\r\n", "Hacker Challenge - Programming.ipynb\r\n", "Learn to Program(Coursera).ipynb\r\n", "Module 1_Python Language Essentials.ipynb\r\n", "Module 2_System Programming.ipynb\r\n", "Multiprocessing.ipynb\r\n", "\u001b[1m\u001b[34mNewDirectory\u001b[m\u001b[m\r\n", "Notebook_\uc790\ub3d9\ud654.ipynb\r\n", "Part 3 - Plotting with Matplotlib.ipynb\r\n", "Performance_MNR.xml\r\n", "Python 3 Object Oriented Programming.ipynb\r\n", "Requests test.ipynb\r\n", "Unpythonic Python.ipynb\r\n", "Untitled0.ipynb\r\n", "Untitled1.ipynb\r\n", "Untitled2.ipynb\r\n", "Untitled3.ipynb\r\n", "Untitled4.ipynb\r\n", "Untitled5.ipynb\r\n", "Untitled6.ipynb\r\n", "Untitled7.ipynb\r\n", "array_archive.npz\r\n", "array_ex.txt\r\n", "ch00_Feeling.ipynb\r\n", "ch00_Python for Data Analysis - link.ipynb\r\n", "ch01_Preliminaries.ipynb\r\n", "\u001b[1m\u001b[34mch02\u001b[m\u001b[m\r\n", "ch02_Introduction Examples.ipynb\r\n", "ch02_w.py\r\n", "\u001b[1m\u001b[34mch03\u001b[m\u001b[m\r\n", "ch03_Introduction IPython.ipynb\r\n", "ch04_Numpy.ipynb\r\n", "ch05_Pandas.ipynb\r\n", "\u001b[1m\u001b[34mch06\u001b[m\u001b[m\r\n", "ch06_Data loading.ipynb\r\n", "\u001b[1m\u001b[34mch07\u001b[m\u001b[m\r\n", "ch07_Data loading_again.ipynb\r\n", "ch07_Data_prepare_fixing_transform_merge.ipynb\r\n", "\u001b[1m\u001b[34mch08\u001b[m\u001b[m\r\n", "\u001b[1m\u001b[34mch09\u001b[m\u001b[m\r\n", "\u001b[1m\u001b[34mch11\u001b[m\u001b[m\r\n", "\u001b[1m\u001b[34mch13\u001b[m\u001b[m\r\n", "cover.jpg\r\n", "data.csv\r\n", "debugger.csv\r\n", "ex1.csv\r\n", "foo.py\r\n", "foo.py.prof\r\n", "foo.pyc\r\n", "ghostdriver.log\r\n", "\u001b[1m\u001b[34mimages\u001b[m\u001b[m\r\n", "ipython_log.py\r\n", "ipython_log.py.001~\r\n", "ipython_script_test.py\r\n", "lambda_sorted.ipynb\r\n", "\u001b[1m\u001b[34mmassspec\u001b[m\u001b[m\r\n", "mydata.csv\r\n", "mysql_test.ipynb\r\n", "plfda_ch07.ipynb\r\n", "rpy2.ipynb\r\n", "some_array.npy\r\n", "spse.txt\r\n", "spse2.txt\r\n", "test_filename\r\n", "text.txt\r\n" ] } ], "prompt_number": 64 }, { "cell_type": "code", "collapsed": false, "input": [ "np.load('some_array.npy')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 65, "text": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] } ], "prompt_number": 65 }, { "cell_type": "code", "collapsed": false, "input": [ "np.savez('array_archive.npz', a=arr, b=arr)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 66 }, { "cell_type": "code", "collapsed": false, "input": [ "arch = np.load('array_archive.npz')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 67 }, { "cell_type": "code", "collapsed": false, "input": [ "arch['b']" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 68, "text": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] } ], "prompt_number": 68 }, { "cell_type": "code", "collapsed": false, "input": [ "arch['a']" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 69, "text": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] } ], "prompt_number": 69 }, { "cell_type": "code", "collapsed": false, "input": [ "a = randn(10)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 70 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 71, "text": [ "array([ 1.44432567, 0.98120731, 0.11043039, 1.39949054, 0.71862609,\n", " -1.66603304, 0.32605269, 0.02229856, 0.04036821, -0.53039062])" ] } ], "prompt_number": 71 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "4.4.2 \ud14d\uc2a4\ud2b8 \ud30c\uc77c \ubd88\ub7ec\uc624\uae30\uc640 \uc800\uc7a5\ud558\uae30" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%writefile array_ex.txt\n", "2.23342715,-0.37376633,-1.05142871\n", "-0.57247149,-1.35777871,0.28676036\n", "-0.01042671,-0.0211314,-0.72049352" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Overwriting array_ex.txt\n" ] } ], "prompt_number": 72 }, { "cell_type": "code", "collapsed": false, "input": [ "!cat array_ex.txt" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2.23342715,-0.37376633,-1.05142871\r\n", "-0.57247149,-1.35777871,0.28676036\r\n", "-0.01042671,-0.0211314,-0.72049352" ] } ], "prompt_number": 73 }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.loadtxt('array_ex.txt', delimiter=',')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 74 }, { "cell_type": "code", "collapsed": false, "input": [ "arr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 75, "text": [ "array([[ 2.23342715, -0.37376633, -1.05142871],\n", " [-0.57247149, -1.35777871, 0.28676036],\n", " [-0.01042671, -0.0211314 , -0.72049352]])" ] } ], "prompt_number": 75 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- np.savetxt: np.loadtxt\uc640 \ubc18\ub300\ub85c \ubc30\uc5f4\uc744 \ud30c\uc77c\ub85c \uc800\uc7a5\n", "- genfromtxt: loadtxt\uc640 \uc720\uc0ac\ud558\uc9c0\ub9cc \uad6c\uc870\ud654\ub41c \ubc30\uc5f4\uacfc \ub204\ub77d\ub41c \ub370\uc774\ud130 \ucc98\ub9ac\ub97c \uc704\ud574 \uc124\uacc4\n", "\n", "####\ud30c\uc77c \uc785\u2219\ucd9c\ub825\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9, \ud2b9\ud788 \uc2a4\ud504\ub808\ub4dc\uc2dc\ud2b8 \ud615\uc2dd\uc758 \ub370\uc774\ud130 \uc785\u2219\ucd9c\ub825\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc740 \ub2e4\uc74c \uc7a5\uc5d0\uc11c pandas\uc640 DataFrame\uac1d\uccb4\uc640 \ud568\uaed8 \uc0b4\ud3b4\ubcf4\uaca0\ub2e4." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "4.5 \uc120\ud615\ub300\uc218" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ud589\ub82c\uc758 \uacf1\uc148, \ubd84\ud560, \ud589\ub82c\uc2dd, \uc815\uc0ac\uac01 \ud589\ub82c \uc218\ud559 \uac19\uc740 \uc120\ud615\ub300\uc218\ub294 \ubc30\uc5f4\uc744 \ub2e4\ub8e8\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c \uc911\uc694\ud55c \ubd80\ubd84\n", "- MATLAB \uac19\uc740 \ub2e4\ub978 \uc5b8\uc5b4\uc640 \ub2ec\ub9ac 2\uac1c\uc758 2\ucc28\uc6d0 \ubc30\uc5f4\uc744 * \uc5f0\uc0b0\uc790\ub85c \uacf1\ud558\ub294 \uac74 \ud589\ub82c \uacf1\uc148\uc774 \uc544\ub2c8\ub77c \ub300\uc751\ud558\ub294 \uac01\uac01\uc758 \uc6d0\uc18c\uc758 \uacf1\uc744 \uacc4\uc0b0\ud558\ub294 \uac83\n", "- \ud589\ub82c \uacf1\uc148\uc740 \ubc30\uc5f4 \uba54\uc11c\ub4dc\uc774\uc790 numpy \ub124\uc784\uc2a4\ud398\uc774\uc2a4 \uc548\uc5d0 \uc788\ub294 \ud568\uc218\uc778 dot \ud568\uc218\ub97c \uc0ac\uc6a9\ud574\uc11c \uacc4\uc0b0" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = np.array([[1., 2., 3.], [4., 5., 6.]])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 78 }, { "cell_type": "code", "collapsed": false, "input": [ "y = np.array([[6., 23.], [-1, 7], [8, 9]])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 79 }, { "cell_type": "code", "collapsed": false, "input": [ "x" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 80, "text": [ "array([[ 1., 2., 3.],\n", " [ 4., 5., 6.]])" ] } ], "prompt_number": 80 }, { "cell_type": "code", "collapsed": false, "input": [ "x.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 93, "text": [ "(2, 3)" ] } ], "prompt_number": 93 }, { "cell_type": "code", "collapsed": false, "input": [ "# Understand. 2 * 3 dot 3 * 1 -> 2 * 1\n", "np.ones(3).shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 96, "text": [ "(3,)" ] } ], "prompt_number": 96 }, { "cell_type": "code", "collapsed": false, "input": [ "y" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 81, "text": [ "array([[ 6., 23.],\n", " [ -1., 7.],\n", " [ 8., 9.]])" ] } ], "prompt_number": 81 }, { "cell_type": "code", "collapsed": false, "input": [ "x.dot(y) # np.dot(x, y) is same" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 82, "text": [ "array([[ 28., 64.],\n", " [ 67., 181.]])" ] } ], "prompt_number": 82 }, { "cell_type": "code", "collapsed": false, "input": [ "1*6 + 2*-1 + 3*8\n", "#6 + -2 + 24" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 83, "text": [ "28" ] } ], "prompt_number": 83 }, { "cell_type": "code", "collapsed": false, "input": [ "np.dot(x, np.ones(3))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 84, "text": [ "array([ 6., 15.])" ] } ], "prompt_number": 84 }, { "cell_type": "code", "collapsed": false, "input": [ "np.ones(3)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 85, "text": [ "array([ 1., 1., 1.])" ] } ], "prompt_number": 85 }, { "cell_type": "code", "collapsed": false, "input": [ "1*1 + 2*1 + 3*1" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 86, "text": [ "6" ] } ], "prompt_number": 86 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- numpy.linalg\ub294 \ud589\ub82c\uc758 \ubd84\ud560\uacfc \uc5ed\ud589\ub82c, \ud589\ub82c\uc2dd \uac19\uc740 \uac83 \ud3ec\ud568\n", "- \uc774\ub294 MATLAB, R \uac19\uc740 \uc5b8\uc5b4\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ud45c\uc900 \ud3ec\ud2b8\ub780 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc778 BLAS, LAPACK \ub610\ub294 Intel MKL(NumPy \ube4c\ub4dc\uc5d0 \ub530\ub77c \ub2e4\ub974\ub2e4)\ub97c \uc0ac\uc6a9\ud574\uc11c \uad6c\ud604" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from numpy.linalg import inv, qr" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 84 }, { "cell_type": "code", "collapsed": false, "input": [ "# Core Linear Algebra Tools\n", "numpy.linalg?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 85 }, { "cell_type": "code", "collapsed": false, "input": [ "# Inverse of a square matrix\n", "inv?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 86 }, { "cell_type": "code", "collapsed": false, "input": [ "# QR decomposition of a matrix\n", "qr?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 87 }, { "cell_type": "code", "collapsed": false, "input": [ "X = randn(5, 5)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 88 }, { "cell_type": "code", "collapsed": false, "input": [ "mat = X.T.dot(X)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 89 }, { "cell_type": "code", "collapsed": false, "input": [ "mat" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 90, "text": [ "array([[ 2.87598785, -3.21343638, -1.70180817, -0.49037638,\n", " -0.08239518],\n", " [ -3.21343638, 10.70211909, -0.02810709, 0.32085212,\n", " 5.27753009],\n", " [ -1.70180817, -0.02810709, 3.64969751, 0.8101601 ,\n", " 3.00981921],\n", " [ -0.49037638, 0.32085212, 0.8101601 , 1.55438619, 2.5745824 ],\n", " [ -0.08239518, 5.27753009, 3.00981921, 2.5745824 ,\n", " 15.12401822]])" ] } ], "prompt_number": 90 }, { "cell_type": "code", "collapsed": false, "input": [ "inv(mat)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 91, "text": [ "array([[ 605.75721027, 286.68894835, 406.87869992, 298.32436502,\n", " -228.49681949],\n", " [ 286.68894835, 135.80319411, 192.6025786 , 141.24158107,\n", " -108.20012647],\n", " [ 406.87869992, 192.6025786 , 273.64302113, 200.30686605,\n", " -153.54805702],\n", " [ 298.32436502, 141.24158107, 200.30686605, 147.86204307,\n", " -112.69469828],\n", " [-228.49681949, -108.20012647, -153.54805702, -112.69469828,\n", " 86.31939245]])" ] } ], "prompt_number": 91 }, { "cell_type": "code", "collapsed": false, "input": [ "# \uc6d0\ub798 \ud589\ub82c * \uc5ed\ud589\ub82c = \ub2e8\uc704 \ud589\ub82c\n", "# \uc120\ud615\ub300\uc218\uc5d0 \ub300\ud55c \uae30\ubcf8\uc801\uc778 \uc9c0\uc2dd\uc774 \uc788\uc5b4\uc57c \uc774\ud574\uac00 \ub41c\ub2e4.\n", "mat.dot(inv(mat))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 92, "text": [ "array([[ 1.00000000e+00, -1.24344979e-14, -1.86517468e-13,\n", " -5.68434189e-14, 1.13686838e-13],\n", " [ 0.00000000e+00, 1.00000000e+00, -1.13686838e-13,\n", " 1.13686838e-13, 0.00000000e+00],\n", " [ -2.27373675e-13, 0.00000000e+00, 1.00000000e+00,\n", " 5.68434189e-14, 2.84217094e-14],\n", " [ 0.00000000e+00, 5.68434189e-14, 5.68434189e-14,\n", " 1.00000000e+00, -2.84217094e-14],\n", " [ 4.54747351e-13, 6.82121026e-13, 0.00000000e+00,\n", " 2.27373675e-13, 1.00000000e+00]])" ] } ], "prompt_number": 92 }, { "cell_type": "code", "collapsed": false, "input": [ "q, r = qr(mat)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 93 }, { "cell_type": "code", "collapsed": false, "input": [ "r" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 94, "text": [ "array([[ 4.66271257e+00, -9.47447021e+00, -2.50078085e+00,\n", " -1.02825530e+00, -5.32453372e+00],\n", " [ 0.00000000e+00, 7.94052899e+00, -3.12819979e-01,\n", " 1.17508664e+00, 1.09384797e+01],\n", " [ 0.00000000e+00, 0.00000000e+00, 4.42502461e+00,\n", " 2.39248980e+00, 1.10032116e+01],\n", " [ 0.00000000e+00, 0.00000000e+00, -0.00000000e+00,\n", " 1.37194037e+00, 1.79188567e+00],\n", " [ 0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n", " 0.00000000e+00, 3.04789951e-03]])" ] } ], "prompt_number": 94 }, { "cell_type": "code", "collapsed": false, "input": [ "q" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 95, "text": [ "array([[ 0.61680573, 0.33127153, -0.01258385, -0.15693731, -0.69643534],\n", " [-0.68917745, 0.52547227, -0.35868968, -0.10722938, -0.32978311],\n", " [-0.36498243, -0.43902897, 0.58748134, -0.33148748, -0.46799905],\n", " [-0.10516976, -0.08507943, 0.11763528, 0.92189088, -0.34348212],\n", " [-0.01767108, 0.64354729, 0.71568916, 0.06407652, 0.26309283]])" ] } ], "prompt_number": 95 }, { "cell_type": "markdown", "metadata": {}, "source": [ "[QR \ubd84\ud574 - wiki](http://ko.wikipedia.org/wiki/QR_%EB%B6%84%ED%95%B4)" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "4.6 \ub09c\uc218 \uc0dd\uc131" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "####numpy \uc7a5\uc810\n", "\n", "- numpy.random \ubaa8\ub4c8\uc740 \ud30c\uc774\uc36c \ub0b4\uc7a5 random \ud568\uc218\ub97c \ubcf4\uac15\ud558\uc5ec \ub2e4\uc591\ud55c \uc885\ub958\uc758 \ud655\ub960\ubd84\ud3ec\ub85c\ubd80\ud130 \ud6a8\uacfc\uc801\uc73c\ub85c \ud45c\ubcf8 \uac12\uc744 \uc0dd\uc131\ud558\ub294 \ub370 \uc8fc\ub85c \uc0ac\uc6a9\n", "- \uc608\ub97c \ub4e4\uc5b4 normal\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud45c\uc900\uc815\uaddc\ubd84\ud3ec\ub85c\ubd80\ud130 4 \\* 4 \ud06c\uae30\uc758 \ud45c\ubcf8 \uc0dd\uc131" ] }, { "cell_type": "code", "collapsed": false, "input": [ "samples = np.random.normal(size=(4, 4))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 96 }, { "cell_type": "code", "collapsed": false, "input": [ "samples" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 97, "text": [ "array([[ -7.07105991e-01, 3.99861073e-01, -9.98456073e-02,\n", " 3.17546390e-01],\n", " [ -1.36656129e+00, -4.78290944e-01, -3.38881567e-01,\n", " -1.00527089e+00],\n", " [ -1.34366135e-03, 3.64203731e-01, 2.93014657e-01,\n", " 1.13504417e+00],\n", " [ -1.02982622e+00, -4.03534516e-01, -6.03830553e-01,\n", " -3.05782586e-01]])" ] } ], "prompt_number": 97 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####\ud30c\uc774\uc36c \ub0b4\uc7a5 random \ub2e8\uc810\n", "\n", "- \ud30c\uc774\uc36c \ub0b4\uc7a5 random \ubaa8\ub4c8\uc740 \ud55c \ubc88\uc5d0 \ud558\ub098\uc758 \uac12\ub9cc \uc0dd\uc131\n", "- \ud070 \ud45c\ubcf8\uc744 \uc0dd\uc131\ud560 \ub54c \ud6e8\uc52c \ube60\ub984" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from random import normalvariate" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 98 }, { "cell_type": "code", "collapsed": false, "input": [ "N = 1000000" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 99 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit samples = [normalvariate(0, 1) for i in xrange(N)]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 loops, best of 3: 1.22 s per loop\n" ] } ], "prompt_number": 101 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit np.random.normal(size=N)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10 loops, best of 3: 38.1 ms per loop\n" ] } ], "prompt_number": 102 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### [Random sampling (numpy.random)](http://docs.scipy.org/doc/numpy/reference/routines.random.html)" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "4.7 \uacc4\ub2e8 \uc624\ub974\ub0b4\ub9ac\uae30 \uc608\uc81c" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### \uc21c\uc218 \ud30c\uc774\uc36c \ubc84\uc804" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import random\n", "position = 0\n", "walk = [position]\n", "steps = 1000\n", "for i in xrange(steps):\n", " step = 1 if random.randint(0, 1) else -1\n", " position += step\n", " walk.append(position)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 123 }, { "cell_type": "code", "collapsed": false, "input": [ "from matplotlib.pyplot import plot as plt" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 124 }, { "cell_type": "code", "collapsed": false, "input": [ "plt(walk)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 125, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nF/zkyxDR1QAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 125 }, { "cell_type": "code", "collapsed": false, "input": [ "walk" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 126, "text": [ "[0,\n", " 1,\n", " 2,\n", " 1,\n", " 2,\n", " 1,\n", " 2,\n", " 3,\n", " 4,\n", " 3,\n", " 2,\n", " 1,\n", " 2,\n", " 1,\n", " 0,\n", " 1,\n", " 2,\n", " 1,\n", " 2,\n", " 1,\n", " 2,\n", " 1,\n", " 2,\n", " 3,\n", " 2,\n", " 3,\n", " 2,\n", " 3,\n", " 2,\n", " 3,\n", " 2,\n", " 1,\n", " 2,\n", " 3,\n", " 2,\n", " 3,\n", " 4,\n", " 3,\n", " 4,\n", " 5,\n", " 4,\n", " 5,\n", " 4,\n", " 3,\n", " 2,\n", " 1,\n", " 2,\n", " 1,\n", " 2,\n", " 1,\n", " 2,\n", " 1,\n", " 2,\n", " 1,\n", " 2,\n", " 1,\n", " 0,\n", " -1,\n", " 0,\n", " -1,\n", " -2,\n", " -3,\n", " -2,\n", " -3,\n", " -2,\n", " -1,\n", " 0,\n", " -1,\n", " 0,\n", " 1,\n", " 2,\n", " 3,\n", " 2,\n", " 3,\n", " 2,\n", " 3,\n", " 4,\n", " 5,\n", " 4,\n", " 3,\n", " 4,\n", " 5,\n", " 4,\n", " 5,\n", " 4,\n", " 5,\n", " 4,\n", " 3,\n", " 4,\n", " 5,\n", " 4,\n", " 5,\n", " 4,\n", " 3,\n", " 2,\n", " 1,\n", " 2,\n", " 1,\n", " 0,\n", " 1,\n", " 2,\n", " 3,\n", " 2,\n", " 3,\n", " 4,\n", " 3,\n", " 4,\n", " 3,\n", " 2,\n", " 1,\n", " 0,\n", " -1,\n", " 0,\n", " -1,\n", " -2,\n", " -3,\n", " -2,\n", " -1,\n", " -2,\n", " -3,\n", " -2,\n", " -3,\n", " -4,\n", " -5,\n", " -4,\n", " -5,\n", " -6,\n", " -7,\n", " -8,\n", " -7,\n", " -6,\n", " -5,\n", " -6,\n", " -7,\n", " -6,\n", " -7,\n", " -8,\n", " -9,\n", " -8,\n", " -9,\n", " -10,\n", " -9,\n", " -10,\n", " -11,\n", " -10,\n", " -11,\n", " -12,\n", " -11,\n", " -12,\n", " -11,\n", " -10,\n", " -11,\n", " -12,\n", " -11,\n", " -10,\n", " -9,\n", " -10,\n", " -11,\n", " -12,\n", " -11,\n", " -10,\n", " -11,\n", " -10,\n", " -9,\n", " -10,\n", " -11,\n", " -10,\n", " -11,\n", " -12,\n", " -13,\n", " -14,\n", " -13,\n", " -14,\n", " -15,\n", " -14,\n", " -13,\n", " -14,\n", " -13,\n", " -12,\n", " -11,\n", " -10,\n", " -11,\n", " -10,\n", " -11,\n", " -10,\n", " -11,\n", " -12,\n", " -13,\n", " -12,\n", " -11,\n", " -10,\n", " -11,\n", " -10,\n", " -9,\n", " -8,\n", " -7,\n", " -8,\n", " -7,\n", " -8,\n", " -9,\n", " -10,\n", " -9,\n", " -10,\n", " -9,\n", " -8,\n", " -9,\n", " -8,\n", " -9,\n", " -8,\n", " -7,\n", " -6,\n", " -5,\n", " -6,\n", " -7,\n", " -8,\n", " -9,\n", " -10,\n", " -9,\n", " -10,\n", " -11,\n", " -10,\n", " -11,\n", " -12,\n", " -11,\n", " -10,\n", " -11,\n", " -10,\n", " -9,\n", " -8,\n", " -7,\n", " -8,\n", " -7,\n", " -6,\n", " -7,\n", " -6,\n", " -7,\n", " -6,\n", " -5,\n", " -4,\n", " -3,\n", " -4,\n", " -5,\n", " -6,\n", " -7,\n", " -6,\n", " -5,\n", " -4,\n", " -5,\n", " -4,\n", " -5,\n", " -6,\n", " -7,\n", " -8,\n", " -9,\n", " -10,\n", " -9,\n", " -10,\n", " -9,\n", " -8,\n", " -9,\n", " -10,\n", " -9,\n", " -8,\n", " -7,\n", " -6,\n", " -7,\n", " -6,\n", " -7,\n", " -8,\n", " -7,\n", " -6,\n", " -7,\n", " -6,\n", " -5,\n", " -6,\n", " -5,\n", " -4,\n", " -5,\n", " -4,\n", " -3,\n", " -4,\n", " -5,\n", " -6,\n", " -7,\n", " -8,\n", " -9,\n", " -10,\n", " -11,\n", " -12,\n", " -13,\n", " -14,\n", " -15,\n", " -16,\n", " -17,\n", " -18,\n", " -19,\n", " -18,\n", " -19,\n", " -20,\n", " -19,\n", " -20,\n", " -21,\n", " -22,\n", " -21,\n", " -20,\n", " -19,\n", " -18,\n", " -17,\n", " -18,\n", " -17,\n", " -18,\n", " -17,\n", " -18,\n", " -17,\n", " -18,\n", " -19,\n", " -20,\n", " -21,\n", " -22,\n", " -23,\n", " -22,\n", " -21,\n", " -20,\n", " -19,\n", " -20,\n", " -21,\n", " -22,\n", " -23,\n", " -24,\n", " -25,\n", " -26,\n", " -25,\n", " -26,\n", " -27,\n", " -26,\n", " -27,\n", " -26,\n", " -25,\n", " -24,\n", " -25,\n", " -26,\n", " -27,\n", " -28,\n", " -27,\n", " -26,\n", " -27,\n", " -28,\n", " -29,\n", " -30,\n", " -29,\n", " -28,\n", " -27,\n", " -26,\n", " -27,\n", " -26,\n", " -25,\n", " -24,\n", " -23,\n", " -22,\n", " -21,\n", " -20,\n", " -21,\n", " -22,\n", " -23,\n", " -24,\n", " -23,\n", " -24,\n", " -23,\n", " -22,\n", " -21,\n", " -20,\n", " -19,\n", " -18,\n", " -19,\n", " -20,\n", " -19,\n", " -18,\n", " -17,\n", " -16,\n", " -15,\n", " -16,\n", " -15,\n", " -14,\n", " -15,\n", " -16,\n", " -17,\n", " -16,\n", " -15,\n", " -16,\n", " -15,\n", " -14,\n", " -15,\n", " -16,\n", " -15,\n", " -16,\n", " -17,\n", " -16,\n", " -17,\n", " -18,\n", " -17,\n", " -16,\n", " -17,\n", " -16,\n", " -15,\n", " -16,\n", " -17,\n", " -18,\n", " -17,\n", " -16,\n", " -17,\n", " -16,\n", " -15,\n", " -16,\n", " -17,\n", " -16,\n", " -17,\n", " -16,\n", " -17,\n", " -16,\n", " -15,\n", " -16,\n", " -15,\n", " -14,\n", " -15,\n", " -14,\n", " -15,\n", " -14,\n", " -15,\n", " -16,\n", " -15,\n", " -16,\n", " -15,\n", " -14,\n", " -15,\n", " -16,\n", " -17,\n", " -18,\n", " -17,\n", " -16,\n", " -17,\n", " -16,\n", " -17,\n", " -16,\n", " -15,\n", " -16,\n", " -15,\n", " -14,\n", " -13,\n", " -14,\n", " -15,\n", " -16,\n", " -17,\n", " -18,\n", " -17,\n", " -18,\n", " -17,\n", " -18,\n", " -17,\n", " -18,\n", " -19,\n", " -20,\n", " -21,\n", " -20,\n", " -21,\n", " -22,\n", " -21,\n", " -20,\n", " -19,\n", " -18,\n", " -19,\n", " -20,\n", " -19,\n", " -18,\n", " -19,\n", " -18,\n", " -17,\n", " -16,\n", " -17,\n", " -16,\n", " -17,\n", " -16,\n", " -15,\n", " -14,\n", " -13,\n", " -12,\n", " -11,\n", " -10,\n", " -9,\n", " -10,\n", " -9,\n", " -8,\n", " -7,\n", " -8,\n", " -7,\n", " -8,\n", " -9,\n", " -8,\n", " -7,\n", " -6,\n", " -7,\n", " -8,\n", " -7,\n", " -6,\n", " -7,\n", " -8,\n", " -9,\n", " -10,\n", " -11,\n", " -10,\n", " -11,\n", " -12,\n", " -11,\n", " -12,\n", " -11,\n", " -10,\n", " -11,\n", " -10,\n", " -9,\n", " -10,\n", " -11,\n", " -10,\n", " -9,\n", " -8,\n", " -7,\n", " -8,\n", " -9,\n", " -8,\n", " -9,\n", " -8,\n", " -9,\n", " -10,\n", " -9,\n", " -10,\n", " -9,\n", " -10,\n", " -9,\n", " -8,\n", " -7,\n", " -6,\n", " -7,\n", " -6,\n", " -7,\n", " -8,\n", " -9,\n", " -10,\n", " -9,\n", " -8,\n", " -7,\n", " -6,\n", " -5,\n", " -6,\n", " -7,\n", " -6,\n", " -7,\n", " -8,\n", " -7,\n", " -6,\n", " -5,\n", " -4,\n", " -3,\n", " -4,\n", " -5,\n", " -4,\n", " -3,\n", " -4,\n", " -3,\n", " -4,\n", " -3,\n", " -2,\n", " -1,\n", " 0,\n", " 1,\n", " 2,\n", " 3,\n", " 2,\n", " 1,\n", " 0,\n", " 1,\n", " 0,\n", " 1,\n", " 2,\n", " 3,\n", " 2,\n", " 3,\n", " 4,\n", " 5,\n", " 6,\n", " 5,\n", " 4,\n", " 3,\n", " 2,\n", " 1,\n", " 0,\n", " 1,\n", " 0,\n", " 1,\n", " 0,\n", " -1,\n", " -2,\n", " -3,\n", " -4,\n", " -3,\n", " -2,\n", " -1,\n", " 0,\n", " 1,\n", " 2,\n", " 3,\n", " 2,\n", " 1,\n", " 0,\n", " -1,\n", " 0,\n", " 1,\n", " 2,\n", " 1,\n", " 0,\n", " 1,\n", " 0,\n", " 1,\n", " 2,\n", " 3,\n", " 4,\n", " 5,\n", " 4,\n", " 3,\n", " 2,\n", " 3,\n", " 2,\n", " 3,\n", " 2,\n", " 1,\n", " 0,\n", " 1,\n", " 0,\n", " -1,\n", " -2,\n", " -1,\n", " -2,\n", " -1,\n", " -2,\n", " -1,\n", " 0,\n", " -1,\n", " -2,\n", " -1,\n", " -2,\n", " -1,\n", " -2,\n", " -3,\n", " -4,\n", " -3,\n", " -4,\n", " -5,\n", " -6,\n", " -5,\n", " -4,\n", " -5,\n", " -4,\n", " -3,\n", " -2,\n", " -3,\n", " -2,\n", " -1,\n", " 0,\n", " 1,\n", " 0,\n", " -1,\n", " -2,\n", " -3,\n", " -4,\n", " -5,\n", " -4,\n", " -3,\n", " -2,\n", " -1,\n", " -2,\n", " -1,\n", " 0,\n", " 1,\n", " 0,\n", " -1,\n", " -2,\n", " -1,\n", " -2,\n", " -1,\n", " 0,\n", " 1,\n", " 0,\n", " -1,\n", " -2,\n", " -3,\n", " -4,\n", " -3,\n", " -2,\n", " -1,\n", " 0,\n", " -1,\n", " -2,\n", " -3,\n", " -4,\n", " -5,\n", " -4,\n", " -3,\n", " -4,\n", " -5,\n", " -4,\n", " -5,\n", " -4,\n", " -5,\n", " -4,\n", " -3,\n", " -4,\n", " -5,\n", " -4,\n", " -5,\n", " -6,\n", " -5,\n", " -6,\n", " -5,\n", " -6,\n", " -7,\n", " -8,\n", " -7,\n", " -8,\n", " -9,\n", " -10,\n", " -11,\n", " -10,\n", " -11,\n", " -10,\n", " -9,\n", " -10,\n", " -11,\n", " -12,\n", " -13,\n", " -12,\n", " -13,\n", " -14,\n", " -15,\n", " -16,\n", " -17,\n", " -16,\n", " -17,\n", " -18,\n", " -17,\n", " -18,\n", " -19,\n", " -20,\n", " -19,\n", " -20,\n", " -19,\n", " -18,\n", " -19,\n", " -18,\n", " -17,\n", " -16,\n", " -15,\n", " -14,\n", " -15,\n", " -16,\n", " -15,\n", " -14,\n", " -13,\n", " -14,\n", " -15,\n", " -16,\n", " -17,\n", " -16,\n", " -15,\n", " -14,\n", " -15,\n", " -16,\n", " -17,\n", " -16,\n", " -15,\n", " -14,\n", " -15,\n", " -14,\n", " -15,\n", " -14,\n", " -15,\n", " -14,\n", " -13,\n", " -12,\n", " -11,\n", " -10,\n", " -9,\n", " -10,\n", " -9,\n", " -8,\n", " -7,\n", " -6,\n", " -5,\n", " -4,\n", " -5,\n", " -6,\n", " -7,\n", " -8,\n", " -7,\n", " -6,\n", " -7,\n", " -6,\n", " -5,\n", " -4,\n", " -5,\n", " -4,\n", " -3,\n", " -4,\n", " -5,\n", " -6,\n", " -7,\n", " -6,\n", " -5,\n", " -4,\n", " -5,\n", " -6,\n", " -7,\n", " -8,\n", " -7,\n", " -8,\n", " -7,\n", " -6,\n", " -7,\n", " -8,\n", " -9,\n", " -8,\n", " -7,\n", " -8,\n", " -9,\n", " -8,\n", " -7,\n", " -6,\n", " -5,\n", " -6,\n", " -5,\n", " -4,\n", " -5,\n", " -4,\n", " -3,\n", " -2,\n", " -3,\n", " -4,\n", " -5,\n", " -4,\n", " -5,\n", " -4,\n", " -5,\n", " -6,\n", " -5,\n", " -4,\n", " -5,\n", " -6,\n", " -7,\n", " -6,\n", " -7,\n", " -8,\n", " -7,\n", " -8,\n", " -7,\n", " -8,\n", " -9,\n", " -8,\n", " -9,\n", " -8,\n", " -9,\n", " -10,\n", " -11,\n", " -10,\n", " -9,\n", " -8,\n", " -9,\n", " -8,\n", " -9,\n", " -8,\n", " -7,\n", " -6,\n", " -5,\n", " -6,\n", " -7,\n", " -6,\n", " -5,\n", " -4,\n", " -3,\n", " -4,\n", " -5,\n", " -6,\n", " -7,\n", " -8,\n", " -9,\n", " -10,\n", " -11,\n", " -10,\n", " -11,\n", " -12,\n", " -11,\n", " -10,\n", " -9,\n", " -8,\n", " -7,\n", " -6,\n", " -7,\n", " -8,\n", " -7,\n", " -8,\n", " -7,\n", " -8,\n", " -7,\n", " -6,\n", " -5,\n", " -6,\n", " -7,\n", " -6,\n", " -5,\n", " -6,\n", " -7,\n", " -8,\n", " -9,\n", " -10,\n", " -9,\n", " -8,\n", " -7,\n", " -6,\n", " -7,\n", " -6,\n", " -5,\n", " -4,\n", " -3,\n", " -2,\n", " -1,\n", " -2,\n", " -3,\n", " -2,\n", " -3,\n", " -2,\n", " -1,\n", " -2,\n", " -1,\n", " -2,\n", " -3,\n", " -2,\n", " -1,\n", " 0,\n", " 1,\n", " 0,\n", " -1,\n", " -2,\n", " -1,\n", " 0,\n", " -1,\n", " 0,\n", " -1,\n", " -2,\n", " -1,\n", " -2,\n", " -1,\n", " 0,\n", " 1,\n", " 0,\n", " -1,\n", " 0,\n", " 1,\n", " 2,\n", " 3,\n", " 2,\n", " 3,\n", " 2,\n", " 1,\n", " 2,\n", " 1,\n", " 0,\n", " -1,\n", " -2,\n", " -1,\n", " -2,\n", " -3,\n", " -2,\n", " -1,\n", " 0,\n", " -1,\n", " 0,\n", " 1,\n", " 0,\n", " 1,\n", " 0,\n", " -1,\n", " -2,\n", " -1,\n", " -2,\n", " -3,\n", " -4,\n", " -5,\n", " -4,\n", " -5,\n", " -6,\n", " -7,\n", " -6,\n", " -5,\n", " -4,\n", " -5,\n", " ...]" ] } ], "prompt_number": 126 }, { "cell_type": "code", "collapsed": false, "input": [ "random.randint(0, 1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 127, "text": [ "0" ] } ], "prompt_number": 127 }, { "cell_type": "code", "collapsed": false, "input": [ "nsteps = 1000" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 128 }, { "cell_type": "code", "collapsed": false, "input": [ "draws = np.random.randint(0, 2, size=nsteps)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 129 }, { "cell_type": "code", "collapsed": false, "input": [ "draws" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 130, "text": [ "array([0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1,\n", " 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0,\n", " 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1,\n", " 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0,\n", " 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1,\n", " 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0,\n", " 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1,\n", " 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0,\n", " 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1,\n", " 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1,\n", " 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1,\n", " 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0,\n", " 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,\n", " 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0,\n", " 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1,\n", " 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1,\n", " 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0,\n", " 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0,\n", " 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1,\n", " 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0,\n", " 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1,\n", " 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1,\n", " 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0,\n", " 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1,\n", " 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0,\n", " 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1,\n", " 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0,\n", " 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0,\n", " 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,\n", " 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0,\n", " 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0,\n", " 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0,\n", " 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0,\n", " 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0,\n", " 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0,\n", " 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0,\n", " 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1,\n", " 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0,\n", " 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1,\n", " 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0,\n", " 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0,\n", " 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1,\n", " 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1,\n", " 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0])" ] } ], "prompt_number": 130 }, { "cell_type": "code", "collapsed": false, "input": [ "steps = np.where(draws > 0, 1, -1)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 131 }, { "cell_type": "code", "collapsed": false, "input": [ "steps" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 132, "text": [ "array([-1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1,\n", " 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1,\n", " 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, 1,\n", " -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, -1, -1, -1, -1,\n", " 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1,\n", " 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1,\n", " -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1,\n", " 1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, -1,\n", " -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1,\n", " -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1,\n", " 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1,\n", " 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1,\n", " -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1,\n", " -1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1,\n", " -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, -1,\n", " -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1,\n", " 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1,\n", " -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1,\n", " -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, -1,\n", " 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1,\n", " 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1,\n", " -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1,\n", " 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1,\n", " -1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1,\n", " 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, 1, 1,\n", " 1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1,\n", " 1, -1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1,\n", " -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1,\n", " 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1,\n", " 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, 1,\n", " 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1,\n", " 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1,\n", " -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1,\n", " 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1,\n", " 1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, -1,\n", " 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, 1, 1, -1, -1, 1,\n", " 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1,\n", " 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1,\n", " -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1,\n", " -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1,\n", " -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1,\n", " -1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1,\n", " 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1,\n", " -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1,\n", " -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1,\n", " -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1,\n", " 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1,\n", " -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1,\n", " -1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1,\n", " -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1,\n", " 1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, -1,\n", " 1, 1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1,\n", " 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1,\n", " 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1,\n", " -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1,\n", " 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, -1, 1,\n", " 1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1,\n", " 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1,\n", " -1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1])" ] } ], "prompt_number": 132 }, { "cell_type": "code", "collapsed": false, "input": [ "walk = steps.cumsum()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 133 }, { "cell_type": "code", "collapsed": false, "input": [ "walk" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 134, "text": [ "array([ -1, -2, -3, -2, -3, -4, -5, -6, -7, -6, -7, -8, -9,\n", " -10, -11, -12, -11, -10, -9, -8, -9, -10, -9, -8, -9, -10,\n", " -11, -12, -11, -12, -13, -14, -15, -14, -13, -12, -11, -10, -9,\n", " -10, -11, -10, -9, -10, -11, -12, -11, -10, -11, -12, -11, -12,\n", " -11, -10, -11, -10, -9, -8, -7, -6, -5, -6, -5, -4, -5,\n", " -6, -7, -8, -7, -6, -7, -6, -5, -4, -3, -4, -5, -4,\n", " -3, -4, -3, -4, -5, -4, -5, -4, -3, -4, -3, -2, -3,\n", " -4, -3, -2, -1, -2, -1, 0, 1, 0, -1, -2, -3, -4,\n", " -5, -6, -5, -6, -5, -4, -5, -6, -5, -6, -5, -6, -7,\n", " -6, -5, -4, -5, -4, -5, -6, -7, -8, -7, -6, -5, -6,\n", " -5, -6, -7, -6, -5, -6, -7, -8, -9, -10, -9, -10, -9,\n", " -8, -9, -10, -9, -10, -9, -8, -9, -8, -9, -10, -11, -10,\n", " -11, -10, -11, -12, -11, -12, -11, -10, -9, -8, -7, -8, -9,\n", " -10, -9, -8, -9, -8, -9, -10, -9, -8, -7, -8, -7, -6,\n", " -7, -8, -7, -6, -7, -6, -7, -8, -9, -8, -9, -10, -11,\n", " -10, -9, -8, -7, -6, -7, -8, -9, -10, -11, -10, -9, -10,\n", " -9, -8, -7, -6, -5, -6, -5, -6, -5, -4, -5, -6, -5,\n", " -6, -5, -4, -5, -6, -7, -8, -7, -6, -5, -6, -5, -4,\n", " -3, -4, -3, -4, -5, -6, -5, -6, -7, -8, -9, -8, -7,\n", " -6, -7, -8, -7, -8, -7, -6, -7, -8, -9, -10, -11, -10,\n", " -9, -10, -11, -10, -11, -12, -13, -12, -13, -14, -15, -16, -15,\n", " -16, -15, -16, -15, -14, -15, -16, -15, -16, -15, -16, -15, -16,\n", " -17, -18, -19, -20, -19, -18, -17, -16, -15, -14, -13, -14, -15,\n", " -14, -13, -12, -11, -10, -9, -8, -9, -10, -11, -12, -11, -12,\n", " -11, -12, -13, -12, -11, -12, -11, -12, -11, -12, -13, -12, -11,\n", " -10, -11, -10, -9, -8, -9, -8, -9, -10, -9, -8, -7, -6,\n", " -5, -6, -5, -4, -5, -4, -3, -2, -1, -2, -1, -2, -1,\n", " 0, 1, 0, -1, -2, -1, -2, -3, -4, -3, -2, -3, -4,\n", " -5, -4, -5, -4, -5, -4, -5, -4, -5, -6, -5, -6, -7,\n", " -6, -7, -6, -7, -8, -7, -8, -9, -8, -7, -8, -7, -8,\n", " -9, -10, -9, -8, -7, -8, -7, -6, -7, -6, -7, -8, -9,\n", " -8, -9, -8, -9, -8, -7, -6, -7, -6, -5, -6, -5, -6,\n", " -5, -6, -7, -8, -9, -8, -7, -6, -5, -4, -3, -2, -3,\n", " -4, -5, -4, -5, -6, -5, -6, -5, -4, -3, -2, -3, -2,\n", " -1, -2, -1, 0, 1, 2, 3, 2, 1, 2, 1, 2, 3,\n", " 2, 3, 2, 3, 2, 1, 0, 1, 0, -1, -2, -3, -4,\n", " -3, -4, -3, -4, -5, -4, -3, -2, -1, -2, -1, 0, -1,\n", " 0, 1, 2, 3, 2, 1, 2, 3, 2, 3, 4, 5, 6,\n", " 5, 6, 7, 6, 7, 6, 7, 6, 7, 8, 9, 10, 11,\n", " 10, 9, 10, 11, 10, 9, 10, 9, 10, 11, 12, 13, 12,\n", " 13, 14, 13, 14, 15, 14, 13, 14, 13, 12, 11, 10, 9,\n", " 10, 11, 10, 11, 12, 13, 14, 15, 16, 17, 16, 15, 16,\n", " 15, 14, 13, 12, 11, 12, 11, 12, 11, 12, 11, 10, 11,\n", " 10, 11, 12, 11, 12, 13, 12, 13, 14, 13, 12, 13, 14,\n", " 13, 14, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13,\n", " 14, 15, 16, 17, 18, 17, 18, 19, 20, 19, 20, 19, 20,\n", " 19, 18, 19, 18, 19, 18, 17, 16, 17, 18, 19, 18, 17,\n", " 18, 19, 20, 19, 18, 19, 20, 19, 20, 19, 18, 17, 18,\n", " 19, 20, 19, 20, 21, 22, 23, 24, 23, 22, 23, 22, 21,\n", " 22, 23, 24, 23, 24, 23, 22, 21, 22, 21, 20, 19, 20,\n", " 21, 22, 23, 22, 21, 22, 23, 24, 25, 26, 27, 28, 27,\n", " 26, 25, 24, 25, 24, 23, 22, 21, 22, 21, 22, 21, 22,\n", " 23, 24, 23, 22, 21, 22, 21, 20, 21, 22, 23, 24, 25,\n", " 24, 23, 24, 23, 24, 25, 26, 27, 26, 25, 24, 25, 26,\n", " 27, 26, 25, 26, 27, 28, 27, 28, 27, 28, 27, 28, 29,\n", " 30, 31, 30, 29, 28, 29, 30, 31, 32, 33, 34, 33, 34,\n", " 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 31, 32, 31,\n", " 32, 31, 30, 29, 30, 31, 30, 29, 28, 27, 28, 27, 28,\n", " 27, 28, 29, 30, 29, 28, 27, 28, 29, 30, 31, 30, 29,\n", " 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 31, 30,\n", " 29, 28, 29, 28, 29, 30, 31, 32, 31, 32, 33, 32, 33,\n", " 32, 33, 32, 31, 32, 31, 30, 29, 30, 31, 30, 29, 30,\n", " 29, 28, 29, 28, 27, 26, 27, 28, 27, 26, 25, 26, 27,\n", " 28, 29, 30, 29, 28, 29, 28, 27, 26, 27, 26, 27, 28,\n", " 27, 26, 27, 28, 27, 26, 27, 28, 29, 28, 27, 28, 29,\n", " 28, 29, 28, 27, 28, 29, 28, 29, 28, 27, 26, 27, 28,\n", " 29, 28, 29, 28, 29, 30, 29, 28, 27, 28, 29, 30, 29,\n", " 28, 29, 28, 29, 30, 29, 28, 29, 28, 27, 26, 27, 26,\n", " 27, 26, 27, 26, 25, 24, 25, 24, 23, 22, 21, 22, 23,\n", " 22, 23, 22, 21, 22, 23, 24, 25, 26, 25, 26, 25, 24,\n", " 25, 24, 23, 22, 23, 22, 21, 20, 19, 18, 17, 18, 17,\n", " 18, 19, 20, 21, 22, 21, 20, 21, 22, 21, 22, 23, 24,\n", " 23, 22, 21, 20, 21, 20, 19, 18, 17, 18, 17, 18, 19,\n", " 20, 19, 20, 21, 22, 21, 20, 19, 18, 19, 18, 17, 16,\n", " 15, 16, 15, 16, 17, 16, 17, 18, 17, 18, 19, 20, 19,\n", " 18, 19, 18, 17, 18, 19, 18, 19, 18, 19, 20, 19, 20,\n", " 21, 22, 23, 24, 25, 26, 25, 26, 25, 24, 23, 22])" ] } ], "prompt_number": 134 }, { "cell_type": "code", "collapsed": false, "input": [ "walk.min(), walk.max()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 135, "text": [ "(-20, 34)" ] } ], "prompt_number": 135 }, { "cell_type": "code", "collapsed": false, "input": [ "(np.abs(walk) >= 10).argmax()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 172, "text": [ "13" ] } ], "prompt_number": 172 }, { "cell_type": "code", "collapsed": false, "input": [ "walk.ndim" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 176, "text": [ "1" ] } ], "prompt_number": 176 }, { "cell_type": "code", "collapsed": false, "input": [ "walk.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 177, "text": [ "(1000,)" ] } ], "prompt_number": 177 }, { "cell_type": "code", "collapsed": false, "input": [ "# Error! \ub2f9\uc5f0\ud788 axis\uac00 1\uac1c \ubc16\uc5d0 \uc5c6\ub294 \ubc30\uc5f4\uc774\ub2c8\uae4c\n", "(np.abs(walk) >= 10).argmax(1)" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "axis(=1) out of bounds", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\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 \u001b[0;31m# Error! \ub2f9\uc5f0\ud788 axis\uac00 1\uac1c \ubc16\uc5d0 \uc5c6\ub294 \ubc30\uc5f4\uc774\ub2c8\uae4c\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwalk\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>=\u001b[0m \u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mValueError\u001b[0m: axis(=1) out of bounds" ] } ], "prompt_number": 175 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "4.7.1 \ud55c \ubc88\uc5d0 \uacc4\ub2e8 \uc624\ub974\ub0b4\ub9ac\uae30 \uc2dc\ubbac\ub808\uc774\uc158\ud558\uae30" ] }, { "cell_type": "code", "collapsed": false, "input": [ "nwalks = 5000" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 137 }, { "cell_type": "code", "collapsed": false, "input": [ "nsteps = 1000" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 138 }, { "cell_type": "code", "collapsed": false, "input": [ "# randint\ub294 0\ubd80\ud130 2\uae4c\uc9c0(\ud3ec\ud568 \uc548\ub428)\uc758 \uc22b\uc790\ub97c \ub79c\ub364\uc73c\ub85c \uc0dd\uc131. \uc989 0\uacfc 1\ub9cc \uc0dd\uc131\n", "# size\uc5d0 \ub118\uae30\ub294 \uac83\uc740 \ud589, \ub82c\uc744 \ud29c\ud50c \ud615\ud0dc\ub85c \ub118\uae40\n", "draws = np.random.randint(0, 2, size=(nwalks, nsteps))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 168 }, { "cell_type": "code", "collapsed": false, "input": [ "np.random.randint(0, 2, size=(10,3))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 167, "text": [ "array([[0, 1, 1],\n", " [0, 1, 0],\n", " [1, 1, 0],\n", " [0, 0, 0],\n", " [0, 1, 0],\n", " [0, 0, 1],\n", " [0, 0, 1],\n", " [0, 0, 0],\n", " [1, 0, 1],\n", " [1, 1, 0]])" ] } ], "prompt_number": 167 }, { "cell_type": "code", "collapsed": false, "input": [ "# size\uc5d0 \uc778\uc790 1\uac1c\ub9cc \ub118\uc5b4\uac08 \uc2dc \ud589\uc740 1\uac1c\ub85c \uace0\uc815 \uc9c0\uc815\ub418\uace0 1\uac1c \uc778\uc790\uac12\uc740 \uceec\ub7fc\uac12\uc73c\ub85c \uc124\uc815 \ub428.\n", "np.random.randint(0, 2, size=5)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 171, "text": [ "array([1, 1, 0, 0, 1])" ] } ], "prompt_number": 171 }, { "cell_type": "code", "collapsed": false, "input": [ "draws.ndim" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 157, "text": [ "2" ] } ], "prompt_number": 157 }, { "cell_type": "code", "collapsed": false, "input": [ "draws.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 158, "text": [ "(5000, 1000)" ] } ], "prompt_number": 158 }, { "cell_type": "code", "collapsed": false, "input": [ "steps = np.where(draws > 0, 1, -1)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 140 }, { "cell_type": "code", "collapsed": false, "input": [ "walks = steps.cumsum(1)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 141 }, { "cell_type": "code", "collapsed": false, "input": [ "walks" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 142, "text": [ "array([[ -1, 0, -1, ..., 20, 19, 18],\n", " [ -1, 0, 1, ..., -14, -13, -14],\n", " [ 1, 2, 1, ..., 54, 55, 54],\n", " ..., \n", " [ -1, 0, -1, ..., -32, -31, -30],\n", " [ -1, -2, -3, ..., 12, 11, 10],\n", " [ -1, -2, -3, ..., -62, -61, -62]])" ] } ], "prompt_number": 142 }, { "cell_type": "code", "collapsed": false, "input": [ "walks.max(), walks.min()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 143, "text": [ "(122, -122)" ] } ], "prompt_number": 143 }, { "cell_type": "code", "collapsed": false, "input": [ "hits30 = (np.abs(walks) >= 30).any(1)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 144 }, { "cell_type": "code", "collapsed": false, "input": [ "hits30" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 145, "text": [ "array([False, True, True, ..., True, True, True], dtype=bool)" ] } ], "prompt_number": 145 }, { "cell_type": "code", "collapsed": false, "input": [ "len(hits30)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 146, "text": [ "5000" ] } ], "prompt_number": 146 }, { "cell_type": "code", "collapsed": false, "input": [ "hits30.sum()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 147, "text": [ "3371" ] } ], "prompt_number": 147 }, { "cell_type": "code", "collapsed": false, "input": [ "crossing_times = (np.abs(walks[hits30]) >= 30).argmax(1)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 148 }, { "cell_type": "code", "collapsed": false, "input": [ "crossing_times.mean()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 149, "text": [ "507.19875407890834" ] } ], "prompt_number": 149 }, { "cell_type": "code", "collapsed": false, "input": [ "steps = np.random.normal(loc=0, scale=0.25, size=(nwalks, nsteps))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 150 }, { "cell_type": "code", "collapsed": false, "input": [ "steps" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 151, "text": [ "array([[ 0.08726702, 0.44660757, -0.20851034, ..., -0.32885954,\n", " -0.10377829, -0.55204768],\n", " [ 0.28219952, -0.15124127, -0.26097055, ..., 0.21983047,\n", " -0.01899429, 0.12845647],\n", " [ 0.10835411, 0.16839816, -0.0588874 , ..., -0.0136134 ,\n", " 0.31643727, 0.09701192],\n", " ..., \n", " [-0.08377433, -0.4545433 , -0.04472277, ..., -0.00461127,\n", " -0.03111517, 0.1789901 ],\n", " [ 0.06285865, -0.19800213, -0.28502572, ..., -0.20323394,\n", " 0.13771058, -0.11289319],\n", " [ 0.16258237, 0.0869184 , 0.29934197, ..., -0.10236161,\n", " -0.11827899, 0.00986353]])" ] } ], "prompt_number": 151 }, { "cell_type": "code", "collapsed": false, "input": [ "walks" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 152, "text": [ "array([[ -1, 0, -1, ..., 20, 19, 18],\n", " [ -1, 0, 1, ..., -14, -13, -14],\n", " [ 1, 2, 1, ..., 54, 55, 54],\n", " ..., \n", " [ -1, 0, -1, ..., -32, -31, -30],\n", " [ -1, -2, -3, ..., 12, 11, 10],\n", " [ -1, -2, -3, ..., -62, -61, -62]])" ] } ], "prompt_number": 152 }, { "cell_type": "code", "collapsed": false, "input": [ "walks.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 155, "text": [ "(5000, 1000)" ] } ], "prompt_number": 155 }, { "cell_type": "code", "collapsed": false, "input": [ "walks.ndim" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 156, "text": [ "2" ] } ], "prompt_number": 156 }, { "cell_type": "code", "collapsed": false, "input": [ "np.abs(walks)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 153, "text": [ "array([[ 1, 0, 1, ..., 20, 19, 18],\n", " [ 1, 0, 1, ..., 14, 13, 14],\n", " [ 1, 2, 1, ..., 54, 55, 54],\n", " ..., \n", " [ 1, 0, 1, ..., 32, 31, 30],\n", " [ 1, 2, 3, ..., 12, 11, 10],\n", " [ 1, 2, 3, ..., 62, 61, 62]])" ] } ], "prompt_number": 153 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## [About my IPython in github](https://github.com/re4lfl0w/ipython)" ] } ], "metadata": {} } ] }