├── Expre.PNG ├── Matrix.PNG ├── Capture.PNG ├── README.md ├── binary functions.PNG ├── unary functions.PNG ├── Python essentials.ipynb └── Numpy basics.ipynb /Expre.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manujeevanprakash/Python-and-Numpy-Basics/HEAD/Expre.PNG -------------------------------------------------------------------------------- /Matrix.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manujeevanprakash/Python-and-Numpy-Basics/HEAD/Matrix.PNG -------------------------------------------------------------------------------- /Capture.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manujeevanprakash/Python-and-Numpy-Basics/HEAD/Capture.PNG -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Python-and-Numpy-Basics 2 | ======================= 3 | 4 | Basics of Python and Numpy . 5 | -------------------------------------------------------------------------------- /binary functions.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manujeevanprakash/Python-and-Numpy-Basics/HEAD/binary functions.PNG -------------------------------------------------------------------------------- /unary functions.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manujeevanprakash/Python-and-Numpy-Basics/HEAD/unary functions.PNG -------------------------------------------------------------------------------- /Python essentials.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "metadata": { 3 | "name": "", 4 | "signature": "sha256:a51b3b37ac1462677a092c85aa330ed955aa25829fa4af7081ca091abf960c84" 5 | }, 6 | "nbformat": 3, 7 | "nbformat_minor": 0, 8 | "worksheets": [ 9 | { 10 | "cells": [ 11 | { 12 | "cell_type": "markdown", 13 | "metadata": {}, 14 | "source": [ 15 | "Before going through this tutorial. Work out the basic python programming exercises on [code academy](http://www.codecademy.com/en/tracks/python). " 16 | ] 17 | }, 18 | { 19 | "cell_type": "markdown", 20 | "metadata": {}, 21 | "source": [ 22 | "Python places an emphasis on readablity, simplicity and explicitiness.\n", 23 | "\n", 24 | "Every thing is an object in python. Every number, string, data structure, class are referred to as python objects." 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": {}, 30 | "source": [ 31 | "You can use comments to summarize a code. See the below example for comments. \n", 32 | "For printing a statement you can use 'print' command. Strings should be included in double quotes.\n" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "collapsed": false, 38 | "input": [ 39 | "print \"Big data examiner\" #Big data examiner is a one stop place to learn datascience. " 40 | ], 41 | "language": "python", 42 | "metadata": {}, 43 | "outputs": [ 44 | { 45 | "output_type": "stream", 46 | "stream": "stdout", 47 | "text": [ 48 | "Big data examiner\n" 49 | ] 50 | } 51 | ], 52 | "prompt_number": 39 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "metadata": {}, 57 | "source": [ 58 | "You can return type of an object using type command. You can check whether an object is an instance of a particular type\n", 59 | "using isinstance function." 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "collapsed": false, 65 | "input": [ 66 | "a= 'Big data'\n", 67 | "print type(a)\n", 68 | "\n", 69 | "b= 'Examiner'\n", 70 | "print type(b)\n", 71 | "\n", 72 | "c= 4.5 \n", 73 | "\n", 74 | "print isinstance(a, str)\n", 75 | "print isinstance(a,int)\n", 76 | "print isinstance(c, (int, float))" 77 | ], 78 | "language": "python", 79 | "metadata": {}, 80 | "outputs": [ 81 | { 82 | "output_type": "stream", 83 | "stream": "stdout", 84 | "text": [ 85 | "\n", 86 | "\n", 87 | "True\n", 88 | "False\n", 89 | "True\n" 90 | ] 91 | } 92 | ], 93 | "prompt_number": 9 94 | }, 95 | { 96 | "cell_type": "markdown", 97 | "metadata": {}, 98 | "source": [ 99 | "Objects and attributes of a python object can be accessed using object.attribute_name." 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "collapsed": false, 105 | "input": [ 106 | "a = 'Bill gates'\n", 107 | "a. # remove and press tab button" 108 | ], 109 | "language": "python", 110 | "metadata": {}, 111 | "outputs": [ 112 | { 113 | "ename": "SyntaxError", 114 | "evalue": "invalid syntax (, line 2)", 115 | "output_type": "pyerr", 116 | "traceback": [ 117 | "\u001b[1;36m File \u001b[1;32m\"\"\u001b[1;36m, line \u001b[1;32m2\u001b[0m\n\u001b[1;33m a. # remove and press tab button\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n" 118 | ] 119 | } 120 | ], 121 | "prompt_number": 15 122 | }, 123 | { 124 | "cell_type": "markdown", 125 | "metadata": {}, 126 | "source": [ 127 | "You can import a Python [module](https://docs.python.org/2/tutorial/modules.html) using import command.\n" 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "collapsed": false, 133 | "input": [ 134 | "import numpy as np # importing numpy as np\n", 135 | "data_new = [6, 7.5, 8, 0, 1]\n", 136 | "data = np.array(data1) # accessing numpy as np. Here I am converting a list to array\n", 137 | "data" 138 | ], 139 | "language": "python", 140 | "metadata": {}, 141 | "outputs": [ 142 | { 143 | "metadata": {}, 144 | "output_type": "pyout", 145 | "prompt_number": 19, 146 | "text": [ 147 | "array([ 6. , 7.5, 8. , 0. , 1. ])" 148 | ] 149 | } 150 | ], 151 | "prompt_number": 19 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": {}, 156 | "source": [ 157 | "try these functions, these are self explanatory" 158 | ] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "collapsed": false, 163 | "input": [ 164 | "x= [1,2,3,4]\n", 165 | "y = x \n", 166 | "z=list(x)\n", 167 | "print x is y\n", 168 | "print x is not z\n", 169 | "\n", 170 | "# you can use the following operators:\n", 171 | "# x // y -> this is called floor divide, it drops the fractional remainder\n", 172 | "# x** y -> raise x to the y the power.\n", 173 | "# x< =y, x True if y is less than or equal to y. Same implies with greater than symbol.\n", 174 | "# same applies to other logical operators such as &, |, ^, ==, !=" 175 | ], 176 | "language": "python", 177 | "metadata": {}, 178 | "outputs": [ 179 | { 180 | "output_type": "stream", 181 | "stream": "stdout", 182 | "text": [ 183 | "True\n", 184 | "True\n" 185 | ] 186 | } 187 | ], 188 | "prompt_number": 27 189 | }, 190 | { 191 | "cell_type": "heading", 192 | "level": 1, 193 | "metadata": {}, 194 | "source": [ 195 | "Mutable and immutable objects " 196 | ] 197 | }, 198 | { 199 | "cell_type": "markdown", 200 | "metadata": {}, 201 | "source": [ 202 | "Objects whose value can be changed, once they are created are called mutable objects.\n", 203 | "Objects whose value cannot be changed, once they are created are called immutable objects " 204 | ] 205 | }, 206 | { 207 | "cell_type": "code", 208 | "collapsed": false, 209 | "input": [ 210 | "# list, dict, arrays are a mutable\n", 211 | "programming = ['Python', 'R', 'Java', 'Php']\n", 212 | "programming[2] ='c++'\n", 213 | "print programming\n", 214 | "\n", 215 | "#Strings and tuples are immutable\n", 216 | "z_tuple = (9, 10, 11, 23)\n", 217 | "z_tuple[1] = 'twenty two' # you cant mutate a tuple\n" 218 | ], 219 | "language": "python", 220 | "metadata": {}, 221 | "outputs": [ 222 | { 223 | "output_type": "stream", 224 | "stream": "stdout", 225 | "text": [ 226 | "['Python', 'R', 'c++', 'Php']\n" 227 | ] 228 | }, 229 | { 230 | "ename": "TypeError", 231 | "evalue": "'tuple' object does not support item assignment", 232 | "output_type": "pyerr", 233 | "traceback": [ 234 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", 235 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;31m#Strings and tuples are immutable\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[0mz_tuple\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;36m9\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m10\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m11\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m23\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 8\u001b[1;33m \u001b[0mz_tuple\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'twenty two'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", 236 | "\u001b[1;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" 237 | ] 238 | } 239 | ], 240 | "prompt_number": 33 241 | }, 242 | { 243 | "cell_type": "heading", 244 | "level": 1, 245 | "metadata": {}, 246 | "source": [ 247 | " Strings" 248 | ] 249 | }, 250 | { 251 | "cell_type": "code", 252 | "collapsed": false, 253 | "input": [ 254 | "# you can write multiline strings using triple quotes ''' or \"\"\"\n", 255 | "\"\"\"\n", 256 | "Hi! learn Python it is fun \n", 257 | "Data science and machine learning are amazing\n", 258 | "\"\"\"" 259 | ], 260 | "language": "python", 261 | "metadata": {}, 262 | "outputs": [ 263 | { 264 | "metadata": {}, 265 | "output_type": "pyout", 266 | "prompt_number": 10, 267 | "text": [ 268 | "'\\nHi! learn Python it is fun \\nData science and machine learning are amazing\\n'" 269 | ] 270 | } 271 | ], 272 | "prompt_number": 10 273 | }, 274 | { 275 | "cell_type": "code", 276 | "collapsed": false, 277 | "input": [ 278 | "# As I said before python strings are immutable.\n", 279 | "x= ' This is big data examiner'\n", 280 | "x[10] = 'f'" 281 | ], 282 | "language": "python", 283 | "metadata": {}, 284 | "outputs": [ 285 | { 286 | "ename": "TypeError", 287 | "evalue": "'str' object does not support item assignment", 288 | "output_type": "pyerr", 289 | "traceback": [ 290 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", 291 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# As I said before python strings are immutable.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m=\u001b[0m \u001b[1;34m' This is big data examiner'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mx\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'f'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", 292 | "\u001b[1;31mTypeError\u001b[0m: 'str' object does not support item assignment" 293 | ] 294 | } 295 | ], 296 | "prompt_number": 43 297 | }, 298 | { 299 | "cell_type": "code", 300 | "collapsed": false, 301 | "input": [ 302 | "x = 'Java is a powerful programming language'\n", 303 | "y = x.replace('Java', 'Python')\n", 304 | "y" 305 | ], 306 | "language": "python", 307 | "metadata": {}, 308 | "outputs": [ 309 | { 310 | "metadata": {}, 311 | "output_type": "pyout", 312 | "prompt_number": 46, 313 | "text": [ 314 | "'Python is a powerful programming language'" 315 | ] 316 | } 317 | ], 318 | "prompt_number": 46 319 | }, 320 | { 321 | "cell_type": "code", 322 | "collapsed": false, 323 | "input": [ 324 | "# many python objects can be converted to a string using 'str' function\n", 325 | "x = 56664\n", 326 | "y = str(x)\n", 327 | "print y\n", 328 | "print type(y)\n", 329 | "# strings act like other sequences, such as lists and tuples\n", 330 | "a = 'Python'\n", 331 | "print list(a)\n", 332 | "print a[:3] # you can slice a python string \n", 333 | "print a[3:]" 334 | ], 335 | "language": "python", 336 | "metadata": {}, 337 | "outputs": [ 338 | { 339 | "output_type": "stream", 340 | "stream": "stdout", 341 | "text": [ 342 | "56664\n", 343 | "\n", 344 | "['P', 'y', 't', 'h', 'o', 'n']\n", 345 | "Pyt\n", 346 | "hon\n" 347 | ] 348 | } 349 | ], 350 | "prompt_number": 10 351 | }, 352 | { 353 | "cell_type": "code", 354 | "collapsed": false, 355 | "input": [ 356 | "#String concentation is very important\n", 357 | "p = \"P is the best programming language\"\n", 358 | "q = \", I have ever seen\"\n", 359 | "z = p+q\n", 360 | "z" 361 | ], 362 | "language": "python", 363 | "metadata": {}, 364 | "outputs": [ 365 | { 366 | "metadata": {}, 367 | "output_type": "pyout", 368 | "prompt_number": 18, 369 | "text": [ 370 | "'P is the best programming language, I have ever seen'" 371 | ] 372 | } 373 | ], 374 | "prompt_number": 18 375 | }, 376 | { 377 | "cell_type": "markdown", 378 | "metadata": {}, 379 | "source": [ 380 | "You have to do lot of string formatting while doing data analysis. You can format an argument as a string using %s, %d for an integer, %.3f for a number with 3 decimal points" 381 | ] 382 | }, 383 | { 384 | "cell_type": "code", 385 | "collapsed": false, 386 | "input": [ 387 | "print \"Hii space left is just %.3f gb, and the data base is %s\" %(0.987, 'mysql')\n", 388 | "print \"Hii space left is just %f gb, and the data base is %s\" %(0.987, 'mysql')\n", 389 | "print \"Hii space left is just %d gb, and the data base is %s\" %(0.987, 'mysql')\n", 390 | "\n" 391 | ], 392 | "language": "python", 393 | "metadata": {}, 394 | "outputs": [ 395 | { 396 | "output_type": "stream", 397 | "stream": "stdout", 398 | "text": [ 399 | "Hii space left is just 0.987 gb, and the data base is mysql\n", 400 | "Hii space left is just 0.987000 gb, and the data base is mysql\n", 401 | "Hii space left is just 0 gb, and the data base is mysql\n" 402 | ] 403 | } 404 | ], 405 | "prompt_number": 17 406 | }, 407 | { 408 | "cell_type": "heading", 409 | "level": 1, 410 | "metadata": {}, 411 | "source": [ 412 | "Boolean and date-time " 413 | ] 414 | }, 415 | { 416 | "cell_type": "code", 417 | "collapsed": false, 418 | "input": [ 419 | "# boolean values in python are written as True and False.\n", 420 | "print True and True\n", 421 | "print True or False\n", 422 | "print True and False" 423 | ], 424 | "language": "python", 425 | "metadata": {}, 426 | "outputs": [ 427 | { 428 | "output_type": "stream", 429 | "stream": "stdout", 430 | "text": [ 431 | "True\n", 432 | "True\n", 433 | "False\n" 434 | ] 435 | } 436 | ], 437 | "prompt_number": 25 438 | }, 439 | { 440 | "cell_type": "code", 441 | "collapsed": false, 442 | "input": [ 443 | "#Empty iterables(list, dict, strings, tuples etc) are treated as False ,if used with a control flow(if, for ,while.. etc)\n", 444 | "print bool([]), bool([1,2,3])\n", 445 | "print bool('Hello Python!'), bool('')\n", 446 | "bool(0), bool(1)" 447 | ], 448 | "language": "python", 449 | "metadata": {}, 450 | "outputs": [ 451 | { 452 | "output_type": "stream", 453 | "stream": "stdout", 454 | "text": [ 455 | "False True\n", 456 | "True False\n" 457 | ] 458 | }, 459 | { 460 | "metadata": {}, 461 | "output_type": "pyout", 462 | "prompt_number": 12, 463 | "text": [ 464 | "(False, True)" 465 | ] 466 | } 467 | ], 468 | "prompt_number": 12 469 | }, 470 | { 471 | "cell_type": "code", 472 | "collapsed": false, 473 | "input": [ 474 | "x = '1729'\n", 475 | "y = float(x)\n", 476 | "print type(y)\n", 477 | "print int(y)\n", 478 | "print bool(y)" 479 | ], 480 | "language": "python", 481 | "metadata": {}, 482 | "outputs": [ 483 | { 484 | "output_type": "stream", 485 | "stream": "stdout", 486 | "text": [ 487 | "\n", 488 | "1729\n", 489 | "True\n" 490 | ] 491 | } 492 | ], 493 | "prompt_number": 34 494 | }, 495 | { 496 | "cell_type": "code", 497 | "collapsed": false, 498 | "input": [ 499 | "#Python date and time module provides datetime, date and time types\n", 500 | "from datetime import datetime, date, time\n", 501 | "td = datetime(1989,6,9,5,1, 30)# do not write number 6 as 06, you will get an invalid token error.\n", 502 | "print td.day\n", 503 | "print td.minute\n", 504 | "print td.date()\n", 505 | "print td.time()\n", 506 | "td.strftime('%m/%d/%y %H:%M:%S')#strf method converts the date and time into a string" 507 | ], 508 | "language": "python", 509 | "metadata": {}, 510 | "outputs": [ 511 | { 512 | "output_type": "stream", 513 | "stream": "stdout", 514 | "text": [ 515 | "9\n", 516 | "1\n", 517 | "1989-06-09\n", 518 | "05:01:30\n" 519 | ] 520 | }, 521 | { 522 | "metadata": {}, 523 | "output_type": "pyout", 524 | "prompt_number": 20, 525 | "text": [ 526 | "'06/09/89 05:01:30'" 527 | ] 528 | } 529 | ], 530 | "prompt_number": 20 531 | }, 532 | { 533 | "cell_type": "code", 534 | "collapsed": false, 535 | "input": [ 536 | "from datetime import datetime, date, time\n", 537 | "datetime.strptime('1989911', '%Y%m%d') # strings can be converted to date and time objects using strptime\n", 538 | "td = datetime(1989,6,9,5,1, 30)\n", 539 | "td.replace(hour =0 ,minute=0, second=30)#you can replace function to edit datetim function" 540 | ], 541 | "language": "python", 542 | "metadata": {}, 543 | "outputs": [ 544 | { 545 | "metadata": {}, 546 | "output_type": "pyout", 547 | "prompt_number": 33, 548 | "text": [ 549 | "datetime.datetime(1989, 6, 9, 0, 0, 30)" 550 | ] 551 | } 552 | ], 553 | "prompt_number": 33 554 | }, 555 | { 556 | "cell_type": "code", 557 | "collapsed": false, 558 | "input": [ 559 | "from datetime import datetime, date, time\n", 560 | "td = datetime(1989,6,9,5,1, 30)\n", 561 | "td1 = datetime(1988,8, 31, 11, 2, 23)\n", 562 | "new_time =td1 - td # you can subtract two different date and time functions\n", 563 | "print new_time \n", 564 | "print type(new_time) # the type is date and time\n", 565 | "print td +new_time" 566 | ], 567 | "language": "python", 568 | "metadata": {}, 569 | "outputs": [ 570 | { 571 | "output_type": "stream", 572 | "stream": "stdout", 573 | "text": [ 574 | "-282 days, 6:00:53\n", 575 | "\n", 576 | "1988-08-31 11:02:23\n" 577 | ] 578 | } 579 | ], 580 | "prompt_number": 43 581 | }, 582 | { 583 | "cell_type": "heading", 584 | "level": 1, 585 | "metadata": {}, 586 | "source": [ 587 | "Handling Exceptions" 588 | ] 589 | }, 590 | { 591 | "cell_type": "markdown", 592 | "metadata": {}, 593 | "source": [ 594 | "Handling Exceptions is only a fancy name for handling python errors. In Python many functions work ony on certain type of input. For example, float function returns a value error, when you feed it with a string." 595 | ] 596 | }, 597 | { 598 | "cell_type": "code", 599 | "collapsed": false, 600 | "input": [ 601 | "print float('7.968')\n", 602 | "float('Big data')" 603 | ], 604 | "language": "python", 605 | "metadata": {}, 606 | "outputs": [ 607 | { 608 | "output_type": "stream", 609 | "stream": "stdout", 610 | "text": [ 611 | "7.968\n" 612 | ] 613 | }, 614 | { 615 | "ename": "ValueError", 616 | "evalue": "could not convert string to float: Big data", 617 | "output_type": "pyerr", 618 | "traceback": [ 619 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", 620 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mprint\u001b[0m \u001b[0mfloat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'7.968'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mfloat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'Big data'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", 621 | "\u001b[1;31mValueError\u001b[0m: could not convert string to float: Big data" 622 | ] 623 | } 624 | ], 625 | "prompt_number": 8 626 | }, 627 | { 628 | "cell_type": "code", 629 | "collapsed": false, 630 | "input": [ 631 | "# suppose we want our float function to return the input value, we can do this using the folowing code.\n", 632 | "def return_float(x):\n", 633 | " try:\n", 634 | " return float(x)\n", 635 | " except:\n", 636 | " return x\n", 637 | "\n", 638 | "print return_float('4.55')\n", 639 | "print return_float('big data') # This time it didnt return a value error" 640 | ], 641 | "language": "python", 642 | "metadata": {}, 643 | "outputs": [ 644 | { 645 | "output_type": "stream", 646 | "stream": "stdout", 647 | "text": [ 648 | "4.55\n", 649 | "big data\n" 650 | ] 651 | } 652 | ], 653 | "prompt_number": 15 654 | }, 655 | { 656 | "cell_type": "code", 657 | "collapsed": false, 658 | "input": [ 659 | "#print float((9,8)) ->this will return a type error, remove the comment and check the output.\n", 660 | "def return_float(x):\n", 661 | " try:\n", 662 | " return float(x)\n", 663 | " except(TypeError, ValueError):# type error and value error are mentioned as a exception values\n", 664 | " return x\n", 665 | "print return_float((9,8)) #now you can see it returns 9,8" 666 | ], 667 | "language": "python", 668 | "metadata": {}, 669 | "outputs": [ 670 | { 671 | "output_type": "stream", 672 | "stream": "stdout", 673 | "text": [ 674 | "(9, 8)\n" 675 | ] 676 | } 677 | ], 678 | "prompt_number": 13 679 | }, 680 | { 681 | "cell_type": "code", 682 | "collapsed": false, 683 | "input": [ 684 | "# these are called ternary expressions\n", 685 | "x = 'Life is short use python'\n", 686 | "'This is my favourite quote' if x == 'Life is short use python' else 'I hate R'" 687 | ], 688 | "language": "python", 689 | "metadata": {}, 690 | "outputs": [ 691 | { 692 | "metadata": {}, 693 | "output_type": "pyout", 694 | "prompt_number": 29, 695 | "text": [ 696 | "'This is my favourite quote'" 697 | ] 698 | } 699 | ], 700 | "prompt_number": 29 701 | }, 702 | { 703 | "cell_type": "markdown", 704 | "metadata": {}, 705 | "source": [ 706 | "### Go through loops in Python(if, for and while). Refer Codeacademy" 707 | ] 708 | }, 709 | { 710 | "cell_type": "heading", 711 | "level": 1, 712 | "metadata": {}, 713 | "source": [ 714 | " Tuples" 715 | ] 716 | }, 717 | { 718 | "cell_type": "code", 719 | "collapsed": false, 720 | "input": [ 721 | "#Tuples are one dimensional, fixed length, imutable sequence of Python Objects.\n", 722 | "machine_learning = 77, 45, 67\n", 723 | "print machine_learning\n", 724 | "pythonista = (87, 56, 98), (78, 45, 33) #Nested Tuples\n", 725 | "print pythonista" 726 | ], 727 | "language": "python", 728 | "metadata": {}, 729 | "outputs": [ 730 | { 731 | "output_type": "stream", 732 | "stream": "stdout", 733 | "text": [ 734 | "(77, 45, 67)\n", 735 | "((87, 56, 98), (78, 45, 33))\n" 736 | ] 737 | } 738 | ], 739 | "prompt_number": 7 740 | }, 741 | { 742 | "cell_type": "code", 743 | "collapsed": false, 744 | "input": [ 745 | "#You can convert any sequence to a tuple by using 'tuple' keyword\n", 746 | "print tuple([4,0,2])\n", 747 | "pythonista = tuple('Python')\n", 748 | "print pythonista\n", 749 | "pythonista[0] # you can accessing each element in a tuple, " 750 | ], 751 | "language": "python", 752 | "metadata": {}, 753 | "outputs": [ 754 | { 755 | "output_type": "stream", 756 | "stream": "stdout", 757 | "text": [ 758 | "(4, 0, 2)\n", 759 | "('P', 'y', 't', 'h', 'o', 'n')\n" 760 | ] 761 | }, 762 | { 763 | "metadata": {}, 764 | "output_type": "pyout", 765 | "prompt_number": 14, 766 | "text": [ 767 | "'P'" 768 | ] 769 | } 770 | ], 771 | "prompt_number": 14 772 | }, 773 | { 774 | "cell_type": "code", 775 | "collapsed": false, 776 | "input": [ 777 | "x = tuple(['Manu',[99,88], 'Jeevan'])\n", 778 | "#x[2] = 'Prakash' # you cant modify a tuple like this\n", 779 | "x[1].append(77)# But you can append to a object to a tuple\n", 780 | "x" 781 | ], 782 | "language": "python", 783 | "metadata": {}, 784 | "outputs": [ 785 | { 786 | "metadata": {}, 787 | "output_type": "pyout", 788 | "prompt_number": 23, 789 | "text": [ 790 | "('Manu', [99, 88, 77], 'Jeevan')" 791 | ] 792 | } 793 | ], 794 | "prompt_number": 23 795 | }, 796 | { 797 | "cell_type": "code", 798 | "collapsed": false, 799 | "input": [ 800 | "y = ('Mean', 'Median', 'Mode')+('Chisquare', 'Annova') + ('statistical significance',) # you can concatenate a tuple using'+' symbol. \n", 801 | "print y\n", 802 | "('Mean', 'Median') *4 # try printing a tuple using a number" 803 | ], 804 | "language": "python", 805 | "metadata": {}, 806 | "outputs": [ 807 | { 808 | "output_type": "stream", 809 | "stream": "stdout", 810 | "text": [ 811 | "('Mean', 'Median', 'Mode', 'Chisquare', 'Annova', 'statistical significance')\n" 812 | ] 813 | }, 814 | { 815 | "metadata": {}, 816 | "output_type": "pyout", 817 | "prompt_number": 29, 818 | "text": [ 819 | "('Mean', 'Median', 'Mean', 'Median', 'Mean', 'Median', 'Mean', 'Median')" 820 | ] 821 | } 822 | ], 823 | "prompt_number": 29 824 | }, 825 | { 826 | "cell_type": "code", 827 | "collapsed": false, 828 | "input": [ 829 | "deep_learning =('Theano', 'Open cv', 'Torch') # you can un pack a tuple\n", 830 | "x,y,z= deep_learning\n", 831 | "print x\n", 832 | "print y\n", 833 | "print z" 834 | ], 835 | "language": "python", 836 | "metadata": {}, 837 | "outputs": [ 838 | { 839 | "output_type": "stream", 840 | "stream": "stdout", 841 | "text": [ 842 | "Theano\n", 843 | "Open cv\n", 844 | "Torch\n" 845 | ] 846 | } 847 | ], 848 | "prompt_number": 35 849 | }, 850 | { 851 | "cell_type": "code", 852 | "collapsed": false, 853 | "input": [ 854 | "countries ='Usa', 'India', ('Afghanistan',' Pakistan'), \n", 855 | "a,b,(c,d) = countries\n", 856 | "print a\n", 857 | "print b\n", 858 | "print c\n", 859 | "print d" 860 | ], 861 | "language": "python", 862 | "metadata": {}, 863 | "outputs": [ 864 | { 865 | "output_type": "stream", 866 | "stream": "stdout", 867 | "text": [ 868 | "Usa\n", 869 | "India\n", 870 | "Afghanistan\n", 871 | " Pakistan\n" 872 | ] 873 | } 874 | ], 875 | "prompt_number": 20 876 | }, 877 | { 878 | "cell_type": "code", 879 | "collapsed": false, 880 | "input": [ 881 | "countries ='Usa', 'India', ('Afghanistan',' Pakistan'), 'Usa', 'Usa'\n", 882 | "countries.count('Usa') # .count can be used to count how many values are ther in a tuple" 883 | ], 884 | "language": "python", 885 | "metadata": {}, 886 | "outputs": [ 887 | { 888 | "metadata": {}, 889 | "output_type": "pyout", 890 | "prompt_number": 50, 891 | "text": [ 892 | "3" 893 | ] 894 | } 895 | ], 896 | "prompt_number": 50 897 | }, 898 | { 899 | "cell_type": "markdown", 900 | "metadata": {}, 901 | "source": [ 902 | "#Lists\n", 903 | "I havent discussed lists, as it is covered in depth in code academy tutorials.\n", 904 | "I am going through the concepts that are not discussed in code academy.\n", 905 | "Some important list concepts are:\n", 906 | "
  • adding and removing elements from a list
  • \n", 907 | "
  • combining and conctenating lists
  • \n", 908 | "
  • sorting
  • \n", 909 | "
  • list slicing
  • \n", 910 | "\n" 911 | ] 912 | }, 913 | { 914 | "cell_type": "code", 915 | "collapsed": false, 916 | "input": [ 917 | "countries =['Usa', 'India','Afghanistan',' Pakistan']\n", 918 | "y = countries.extend(['Britian', 'Canada', 'Uzbekistan', 'Turkey'])\n", 919 | "z = countries.sort(key=len) # countries are sorted according to number of characters\n", 920 | "print countries \n", 921 | "# extend can be a handy feature when your lists are large." 922 | ], 923 | "language": "python", 924 | "metadata": {}, 925 | "outputs": [ 926 | { 927 | "output_type": "stream", 928 | "stream": "stdout", 929 | "text": [ 930 | "['Usa', 'India', 'Canada', 'Turkey', 'Britian', ' Pakistan', 'Uzbekistan', 'Afghanistan']\n" 931 | ] 932 | } 933 | ], 934 | "prompt_number": 63 935 | }, 936 | { 937 | "cell_type": "code", 938 | "collapsed": false, 939 | "input": [ 940 | "import bisect\n", 941 | "b = [9,9,9,9,5,6,3,5,3,2,1,4,7,8]\n", 942 | "b.sort()\n", 943 | "x =bisect.bisect(b,2) # bisect.bisect finds the location where an element should be inserted to keep it sorted.\n", 944 | "y= bisect.bisect(b, 5)\n", 945 | "print x\n", 946 | "print y" 947 | ], 948 | "language": "python", 949 | "metadata": {}, 950 | "outputs": [ 951 | { 952 | "output_type": "stream", 953 | "stream": "stdout", 954 | "text": [ 955 | "2\n", 956 | "7\n" 957 | ] 958 | } 959 | ], 960 | "prompt_number": 83 961 | }, 962 | { 963 | "cell_type": "code", 964 | "collapsed": false, 965 | "input": [ 966 | "# When iterating over a sequence; to keep track of the index of the current element, you can use 'enumerate'\n", 967 | "languages = ['Bigdata', 'Hadoop', 'mapreduce', 'Nosql']\n", 968 | "\n", 969 | "for i,val in enumerate(languages):\n", 970 | " print i,val" 971 | ], 972 | "language": "python", 973 | "metadata": {}, 974 | "outputs": [ 975 | { 976 | "output_type": "stream", 977 | "stream": "stdout", 978 | "text": [ 979 | "0 Bigdata\n", 980 | "1 Hadoop\n", 981 | "2 mapreduce\n", 982 | "3 Nosql\n" 983 | ] 984 | } 985 | ], 986 | "prompt_number": 97 987 | }, 988 | { 989 | "cell_type": "code", 990 | "collapsed": false, 991 | "input": [ 992 | "#Sorted function returns a new sorted list from a sequence\n", 993 | "print sorted([89, 99,45,63,25,53,34,56])\n", 994 | "print sorted('Big data examiner')" 995 | ], 996 | "language": "python", 997 | "metadata": {}, 998 | "outputs": [ 999 | { 1000 | "output_type": "stream", 1001 | "stream": "stdout", 1002 | "text": [ 1003 | "[25, 34, 45, 53, 56, 63, 89, 99]\n", 1004 | "[' ', ' ', 'B', 'a', 'a', 'a', 'd', 'e', 'e', 'g', 'i', 'i', 'm', 'n', 'r', 't', 'x']\n" 1005 | ] 1006 | } 1007 | ], 1008 | "prompt_number": 101 1009 | }, 1010 | { 1011 | "cell_type": "code", 1012 | "collapsed": false, 1013 | "input": [ 1014 | "hot_job = ['Big_data', 'data science', 'data scientist', 'data base developer']\n", 1015 | "languages = ['c', 'c++', 'java', 'python']\n", 1016 | "statistics = ['Mean', 'Median', 'Mode', 'Chi square']\n", 1017 | "print zip(hot_job, languages, statistics)\n", 1018 | "\n", 1019 | "for i, (x,y) in enumerate(zip(hot_job, languages)): #See how I use zip and enumerate together\n", 1020 | " print('%d: %s, %s' %(i,x,y))" 1021 | ], 1022 | "language": "python", 1023 | "metadata": {}, 1024 | "outputs": [ 1025 | { 1026 | "output_type": "stream", 1027 | "stream": "stdout", 1028 | "text": [ 1029 | "[('Big_data', 'c', 'Mean'), ('data science', 'c++', 'Median'), ('data scientist', 'java', 'Mode'), ('data base developer', 'python', 'Chi square')]\n", 1030 | "0: Big_data, c\n", 1031 | "1: data science, c++\n", 1032 | "2: data scientist, java\n", 1033 | "3: data base developer, python\n" 1034 | ] 1035 | } 1036 | ], 1037 | "prompt_number": 106 1038 | }, 1039 | { 1040 | "cell_type": "code", 1041 | "collapsed": false, 1042 | "input": [ 1043 | "# you can unzip a zipped sequence as follows\n", 1044 | "rockers = [('Jame', 'Manu'), ('Govind', 'Dheepan'),('Partha', 'Reddy')]\n", 1045 | "first_names, last_names = zip(*rockers)\n", 1046 | "print first_names\n", 1047 | "print last_names" 1048 | ], 1049 | "language": "python", 1050 | "metadata": {}, 1051 | "outputs": [ 1052 | { 1053 | "output_type": "stream", 1054 | "stream": "stdout", 1055 | "text": [ 1056 | "('Jame', 'Govind', 'Partha')\n", 1057 | "('Manu', 'Dheepan', 'Reddy')\n" 1058 | ] 1059 | } 1060 | ], 1061 | "prompt_number": 113 1062 | }, 1063 | { 1064 | "cell_type": "code", 1065 | "collapsed": false, 1066 | "input": [ 1067 | "#Use reversed keyword to reverse a sequence\n", 1068 | "list(reversed(range(20)))" 1069 | ], 1070 | "language": "python", 1071 | "metadata": {}, 1072 | "outputs": [ 1073 | { 1074 | "metadata": {}, 1075 | "output_type": "pyout", 1076 | "prompt_number": 114, 1077 | "text": [ 1078 | "[19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]" 1079 | ] 1080 | } 1081 | ], 1082 | "prompt_number": 114 1083 | }, 1084 | { 1085 | "cell_type": "markdown", 1086 | "metadata": {}, 1087 | "source": [ 1088 | "#Dictionaries\n", 1089 | "Some key concepts to remember in dictionary are:\n", 1090 | "
  • How to access elements in a dictionary
  • \n", 1091 | "
  • .keys() and .values() methods
  • \n", 1092 | "
  • pop and del methods
  • \n", 1093 | "\n", 1094 | "##Also Go through List and dictionary comphrehensions\n" 1095 | ] 1096 | }, 1097 | { 1098 | "cell_type": "code", 1099 | "collapsed": false, 1100 | "input": [ 1101 | "# you can combine two dictionaries using 'update' method \n", 1102 | "d1 = {'a' : 'octave', 'b' : 'Java'}\n", 1103 | "d1.update({'c' : 'foo', 'd' : 12})\n", 1104 | "print d1\n", 1105 | "d2 = {'a' : 'octave', 'b' : 'Java'}\n", 1106 | "d2.update({'b' : 'foo', 'c' : 12}) #the dictionary inside brackets, overrides the value 'b' in d2\n", 1107 | "print d2" 1108 | ], 1109 | "language": "python", 1110 | "metadata": {}, 1111 | "outputs": [ 1112 | { 1113 | "output_type": "stream", 1114 | "stream": "stdout", 1115 | "text": [ 1116 | "{'a': 'octave', 'c': 'foo', 'b': 'Java', 'd': 12}\n", 1117 | "{'a': 'octave', 'c': 12, 'b': 'foo'}\n" 1118 | ] 1119 | } 1120 | ], 1121 | "prompt_number": 135 1122 | }, 1123 | { 1124 | "cell_type": "code", 1125 | "collapsed": false, 1126 | "input": [ 1127 | "# dict type function accepts a tuple\n", 1128 | "data_science = dict(zip(range(10), reversed(range(10)))) # see how I am using zip and dict to create a key- value pair\n", 1129 | "data_science" 1130 | ], 1131 | "language": "python", 1132 | "metadata": {}, 1133 | "outputs": [ 1134 | { 1135 | "metadata": {}, 1136 | "output_type": "pyout", 1137 | "prompt_number": 137, 1138 | "text": [ 1139 | "{0: 9, 1: 8, 2: 7, 3: 6, 4: 5, 5: 4, 6: 3, 7: 2, 8: 1, 9: 0}" 1140 | ] 1141 | } 1142 | ], 1143 | "prompt_number": 137 1144 | }, 1145 | { 1146 | "cell_type": "code", 1147 | "collapsed": false, 1148 | "input": [ 1149 | "# The keys of a dictionary should be immutable(int, string, float, tuples). The technical term for this is hashability\n", 1150 | "print hash('string')\n", 1151 | "print hash((1,2,3))\n", 1152 | "print hash([1,2,4]) # generates an error as lists are immutable" 1153 | ], 1154 | "language": "python", 1155 | "metadata": {}, 1156 | "outputs": [ 1157 | { 1158 | "output_type": "stream", 1159 | "stream": "stdout", 1160 | "text": [ 1161 | "-1542666171\n", 1162 | "-378539185\n" 1163 | ] 1164 | }, 1165 | { 1166 | "ename": "TypeError", 1167 | "evalue": "unhashable type: 'list'", 1168 | "output_type": "pyerr", 1169 | "traceback": [ 1170 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", 1171 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mprint\u001b[0m \u001b[0mhash\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'string'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;32mprint\u001b[0m \u001b[0mhash\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[1;32mprint\u001b[0m \u001b[0mhash\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m4\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", 1172 | "\u001b[1;31mTypeError\u001b[0m: unhashable type: 'list'" 1173 | ] 1174 | } 1175 | ], 1176 | "prompt_number": 148 1177 | }, 1178 | { 1179 | "cell_type": "code", 1180 | "collapsed": false, 1181 | "input": [ 1182 | "# An easy way to convert a list into a key is to convert it to a tuple\n", 1183 | "fg ={}\n", 1184 | "fg[tuple([3,4,5])] = 45\n", 1185 | "fg" 1186 | ], 1187 | "language": "python", 1188 | "metadata": {}, 1189 | "outputs": [ 1190 | { 1191 | "metadata": {}, 1192 | "output_type": "pyout", 1193 | "prompt_number": 152, 1194 | "text": [ 1195 | "{(3, 4, 5): 45}" 1196 | ] 1197 | } 1198 | ], 1199 | "prompt_number": 152 1200 | }, 1201 | { 1202 | "cell_type": "heading", 1203 | "level": 1, 1204 | "metadata": {}, 1205 | "source": [ 1206 | "set " 1207 | ] 1208 | }, 1209 | { 1210 | "cell_type": "code", 1211 | "collapsed": false, 1212 | "input": [ 1213 | "# a set is an unordered collection of unique elements.\n", 1214 | "set([3,3,4,4,4,6,7,7,7,8])" 1215 | ], 1216 | "language": "python", 1217 | "metadata": {}, 1218 | "outputs": [ 1219 | { 1220 | "metadata": {}, 1221 | "output_type": "pyout", 1222 | "prompt_number": 155, 1223 | "text": [ 1224 | "{3, 4, 6, 7, 8}" 1225 | ] 1226 | } 1227 | ], 1228 | "prompt_number": 155 1229 | }, 1230 | { 1231 | "cell_type": "code", 1232 | "collapsed": false, 1233 | "input": [ 1234 | "#Sets support mathematical set operations like union, intersection, difference, and symmetric difference\n", 1235 | "a = {1, 2, 3, 4, 5}\n", 1236 | "b = {3, 4, 5, 6, 7, 8}\n", 1237 | "print a|b # union\n", 1238 | "print a&b #intersection-> common elements in two dictionaries\n", 1239 | "print a-b\n", 1240 | "print a^b # symmetric difference\n", 1241 | "print {1,2,3} =={3,2,1} # if values are equal so True" 1242 | ], 1243 | "language": "python", 1244 | "metadata": {}, 1245 | "outputs": [ 1246 | { 1247 | "output_type": "stream", 1248 | "stream": "stdout", 1249 | "text": [ 1250 | "set([1, 2, 3, 4, 5, 6, 7, 8])\n", 1251 | "set([3, 4, 5])\n", 1252 | "set([1, 2])\n", 1253 | "set([1, 2, 6, 7, 8])\n", 1254 | "True\n" 1255 | ] 1256 | } 1257 | ], 1258 | "prompt_number": 166 1259 | }, 1260 | { 1261 | "cell_type": "markdown", 1262 | "metadata": {}, 1263 | "source": [ 1264 | "#Default dict" 1265 | ] 1266 | }, 1267 | { 1268 | "cell_type": "code", 1269 | "collapsed": false, 1270 | "input": [ 1271 | "football_clubs = ['Manchester', 'Liverpool', 'Arsenal', 'Chelsea', 'Mancity', 'Tottenham', 'Barcelona','Dortmund']\n", 1272 | "\n", 1273 | "football ={}\n", 1274 | "for clubs in football_clubs: \n", 1275 | " club = clubs[0] # gets the first character of football_clubs\n", 1276 | " if club not in football_clubs: \n", 1277 | " football[club] = [clubs]\n", 1278 | " else:\n", 1279 | " football[club].append(clubs)\n", 1280 | "print football " 1281 | ], 1282 | "language": "python", 1283 | "metadata": {}, 1284 | "outputs": [ 1285 | { 1286 | "output_type": "stream", 1287 | "stream": "stdout", 1288 | "text": [ 1289 | "{'A': ['Arsenal'], 'C': ['Chelsea'], 'B': ['Barcelona'], 'D': ['Dortmund'], 'M': ['Mancity'], 'L': ['Liverpool'], 'T': ['Tottenham']}\n" 1290 | ] 1291 | } 1292 | ], 1293 | "prompt_number": 35 1294 | }, 1295 | { 1296 | "cell_type": "code", 1297 | "collapsed": false, 1298 | "input": [ 1299 | "# Usually, a Python dictionary throws a KeyError if you try to get an item with a key that is not currently in the dictionary. \n", 1300 | "#The defaultdict in contrast will simply create any items that you try to access (provided of course they do not exist yet). To create such a \"default\" item, it calls the function object that you pass in the constructor \n", 1301 | "#(more precisely, it's an arbitrary \"callable\" object, which includes function and type objects).\n", 1302 | "\n", 1303 | "# The Same operation can be done using default dict\n", 1304 | "from collections import defaultdict # default dict is present in collections library\n", 1305 | "soccer = defaultdict(list)\n", 1306 | "\n", 1307 | "for clubs in football_clubs:\n", 1308 | " soccer[clubs[0]].append(clubs)\n", 1309 | "print soccer" 1310 | ], 1311 | "language": "python", 1312 | "metadata": {}, 1313 | "outputs": [ 1314 | { 1315 | "output_type": "stream", 1316 | "stream": "stdout", 1317 | "text": [ 1318 | "defaultdict(, {'A': ['Arsenal'], 'C': ['Chelsea'], 'B': ['Barcelona'], 'D': ['Dortmund'], 'M': ['Manchester', 'Mancity'], 'L': ['Liverpool'], 'T': ['Tottenham']})\n" 1319 | ] 1320 | } 1321 | ], 1322 | "prompt_number": 37 1323 | }, 1324 | { 1325 | "cell_type": "markdown", 1326 | "metadata": {}, 1327 | "source": [ 1328 | "#Functions" 1329 | ] 1330 | }, 1331 | { 1332 | "cell_type": "code", 1333 | "collapsed": false, 1334 | "input": [ 1335 | "# a function can return multiple values\n", 1336 | "def b():\n", 1337 | " x =34\n", 1338 | " y =45\n", 1339 | " z =89\n", 1340 | " return x,y,z" 1341 | ], 1342 | "language": "python", 1343 | "metadata": {}, 1344 | "outputs": [], 1345 | "prompt_number": 1 1346 | }, 1347 | { 1348 | "cell_type": "markdown", 1349 | "metadata": {}, 1350 | "source": [ 1351 | "Technically closure functions are called as dynamically-generated function returned by another function. The main property is that the returned function has access to the local variables in local namespace, where it was created. In laymans term a closure function is a function within main function." 1352 | ] 1353 | }, 1354 | { 1355 | "cell_type": "code", 1356 | "collapsed": false, 1357 | "input": [ 1358 | "# Example of a closure function. The function returns True, if a element is repeated in the list.\n", 1359 | "def dict_funct():\n", 1360 | " new_dict = {} # create a new dictionary\n", 1361 | " def modifier(z): \n", 1362 | " if z in new_dict: # if z is in dictionary\n", 1363 | " return True \n", 1364 | " else: \n", 1365 | " new_dict[z]=True\n", 1366 | " return False\n", 1367 | " return modifier\n", 1368 | "\n", 1369 | "x = dict_funct()\n", 1370 | "list_func = [5,4,6,5,3,4,6,2,1,5]\n", 1371 | "y = [x(i) for i in list_func]\n", 1372 | "print y " 1373 | ], 1374 | "language": "python", 1375 | "metadata": {}, 1376 | "outputs": [ 1377 | { 1378 | "output_type": "stream", 1379 | "stream": "stdout", 1380 | "text": [ 1381 | "[False, False, False, True, False, True, True, False, False, True]\n" 1382 | ] 1383 | } 1384 | ], 1385 | "prompt_number": 14 1386 | }, 1387 | { 1388 | "cell_type": "markdown", 1389 | "metadata": {}, 1390 | "source": [ 1391 | "# Cleaning data\n", 1392 | "\n", 1393 | "Raw data is messy. So you have to clean the data set, to make it ready for analysis. Here we have a list of states that consists of unnecessary punctuations,capilitalization and white space. First, I am importing a python module called [regular expression](https://docs.python.org/2/library/re.html). Second, I am creating a funtion called remove_functions, to remove the unnecessary punctuations, re.sub is used to remove unnecessary punctuations in the function. Third, I am creating a list of three functions [str.strip](http://www.tutorialspoint.com/python/string_strip.htm, remove_functions and [str.title](http://www.tutorialspoint.com/python/string_title.htm). \n" 1394 | ] 1395 | }, 1396 | { 1397 | "cell_type": "code", 1398 | "collapsed": false, 1399 | "input": [ 1400 | "# If we are doing some data cleaning, we will be having a messy data set like this. \n", 1401 | "import re\n", 1402 | "\n", 1403 | "states = [' Kerala', 'Gujarat!', 'Delhi', 'Telengana', 'TriPUra', 'Tamil Nadu##', 'West Bengal?']\n", 1404 | "\n", 1405 | "\n", 1406 | "def remove_functions(strp): \n", 1407 | " return re.sub('[!#?]', '', strp) \n", 1408 | "\n", 1409 | "ooops = [str.strip, remove_functions, str.title] # create a list of functions\n", 1410 | "\n", 1411 | "def clean_data(oops, funky): # function takes two arguments\n", 1412 | " result = [] # create a empty list\n", 1413 | " for data in oops: # loop over(go to each and every element) in states\n", 1414 | " for fun in funky: # loop over ooops list\n", 1415 | " data = fun(data) # apply each and every function in ooops to states.\n", 1416 | " result.append(data) # attach formmated states data to a new list\n", 1417 | " return result # return the list \n", 1418 | " \n", 1419 | "x = clean_data(states, ooops)\n", 1420 | "print x\n" 1421 | ], 1422 | "language": "python", 1423 | "metadata": {}, 1424 | "outputs": [ 1425 | { 1426 | "output_type": "stream", 1427 | "stream": "stdout", 1428 | "text": [ 1429 | "['Kerala', 'Gujarat', 'Delhi', 'Telengana', 'Tripura', 'Tamil Nadu', 'West Bengal']\n" 1430 | ] 1431 | } 1432 | ], 1433 | "prompt_number": 50 1434 | }, 1435 | { 1436 | "cell_type": "code", 1437 | "collapsed": false, 1438 | "input": [ 1439 | "# Lambda is short form of writing a function. \n", 1440 | "def f(x):\n", 1441 | " return x**2\n", 1442 | "print f(8)\n", 1443 | "#same function using lambda\n", 1444 | "y = lambda x: x**2 \n", 1445 | "print y(9)\n" 1446 | ], 1447 | "language": "python", 1448 | "metadata": {}, 1449 | "outputs": [ 1450 | { 1451 | "output_type": "stream", 1452 | "stream": "stdout", 1453 | "text": [ 1454 | "64\n", 1455 | "81\n" 1456 | ] 1457 | } 1458 | ], 1459 | "prompt_number": 21 1460 | }, 1461 | { 1462 | "cell_type": "markdown", 1463 | "metadata": {}, 1464 | "source": [ 1465 | "#Generator Expressions" 1466 | ] 1467 | }, 1468 | { 1469 | "cell_type": "code", 1470 | "collapsed": false, 1471 | "input": [ 1472 | "def new_objjj():\n", 1473 | " for x in xrange(100):\n", 1474 | " yield x**2 #when using generator functions, Use yield instead of return.\n", 1475 | "some_variable = new_objjj()\n", 1476 | "\n", 1477 | "# The above function can be written as follows\n", 1478 | "new_obj = (x**2 for x in range(100)) \n", 1479 | "\n", 1480 | "#Generator expressions can be used inside any Python function that will accept a generator\n", 1481 | "y = sum(x**2 for x in xrange(100))\n", 1482 | "print y\n", 1483 | "\n", 1484 | "dict((i,i**2) for i in xrange(5)) #xrange is faster than range\n" 1485 | ], 1486 | "language": "python", 1487 | "metadata": {}, 1488 | "outputs": [ 1489 | { 1490 | "output_type": "stream", 1491 | "stream": "stdout", 1492 | "text": [ 1493 | "328350\n" 1494 | ] 1495 | }, 1496 | { 1497 | "metadata": {}, 1498 | "output_type": "pyout", 1499 | "prompt_number": 9, 1500 | "text": [ 1501 | "{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}" 1502 | ] 1503 | } 1504 | ], 1505 | "prompt_number": 9 1506 | }, 1507 | { 1508 | "cell_type": "code", 1509 | "collapsed": false, 1510 | "input": [], 1511 | "language": "python", 1512 | "metadata": {}, 1513 | "outputs": [] 1514 | } 1515 | ], 1516 | "metadata": {} 1517 | } 1518 | ] 1519 | } -------------------------------------------------------------------------------- /Numpy basics.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "metadata": { 3 | "name": "numpy basics.ipynb", 4 | "signature": "sha256:9d1a691e6a10ffdffa419c479c8bb56f33de1f4485cbaf78a2779853a120b619" 5 | }, 6 | "nbformat": 3, 7 | "nbformat_minor": 0, 8 | "worksheets": [ 9 | { 10 | "cells": [ 11 | { 12 | "cell_type": "markdown", 13 | "metadata": {}, 14 | "source": [ 15 | "To know about Numpy check my [blog](http://www.bigdataexaminer.com/5-amazingly-powerful-python-libraries-for-data-science/)" 16 | ] 17 | }, 18 | { 19 | "cell_type": "markdown", 20 | "metadata": {}, 21 | "source": [ 22 | "#N- Dimensional array\n", 23 | "\n", 24 | "Arrays allows you to perform mathematical operations on whole blocks of data." 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "collapsed": false, 30 | "input": [ 31 | "# easiest way to create an array is by using an array function\n", 32 | "import numpy as np # I am importing numpy as np\n", 33 | "\n", 34 | "scores = [89,56.34, 76,89, 98]\n", 35 | "first_arr =np.array(scores)\n", 36 | "print first_arr\n", 37 | "print first_arr.dtype # .dtype return the data type of the array object" 38 | ], 39 | "language": "python", 40 | "metadata": {}, 41 | "outputs": [ 42 | { 43 | "output_type": "stream", 44 | "stream": "stdout", 45 | "text": [ 46 | "[ 89. 56.34 76. 89. 98. ]\n", 47 | "float64\n" 48 | ] 49 | } 50 | ], 51 | "prompt_number": 1 52 | }, 53 | { 54 | "cell_type": "code", 55 | "collapsed": false, 56 | "input": [ 57 | "# Nested lists with equal length, will be converted into a multidimensional array\n", 58 | "scores_1 = [[34,56,23,89], [11,45,76,34]]\n", 59 | "second_arr = np.array(scores_1)\n", 60 | "print second_arr\n", 61 | "print second_arr.ndim #.ndim gives you the dimensions of an array.\n", 62 | "print second_arr.shape #(number of rows, number of columns)\n", 63 | "print second_arr.dtype " 64 | ], 65 | "language": "python", 66 | "metadata": {}, 67 | "outputs": [ 68 | { 69 | "output_type": "stream", 70 | "stream": "stdout", 71 | "text": [ 72 | "[[34 56 23 89]\n", 73 | " [11 45 76 34]]\n", 74 | "2\n", 75 | "(2L, 4L)\n", 76 | "int32\n" 77 | ] 78 | } 79 | ], 80 | "prompt_number": 22 81 | }, 82 | { 83 | "cell_type": "code", 84 | "collapsed": false, 85 | "input": [ 86 | "x = np.zeros(10) # returns a array of zeros, the same applies for np.ones(10)\n", 87 | "x" 88 | ], 89 | "language": "python", 90 | "metadata": {}, 91 | "outputs": [ 92 | { 93 | "metadata": {}, 94 | "output_type": "pyout", 95 | "prompt_number": 28, 96 | "text": [ 97 | "array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])" 98 | ] 99 | } 100 | ], 101 | "prompt_number": 28 102 | }, 103 | { 104 | "cell_type": "code", 105 | "collapsed": false, 106 | "input": [ 107 | "np.zeros((4,3)) # you can also mention the shape of the array" 108 | ], 109 | "language": "python", 110 | "metadata": {}, 111 | "outputs": [ 112 | { 113 | "metadata": {}, 114 | "output_type": "pyout", 115 | "prompt_number": 30, 116 | "text": [ 117 | "array([[ 0., 0., 0.],\n", 118 | " [ 0., 0., 0.],\n", 119 | " [ 0., 0., 0.],\n", 120 | " [ 0., 0., 0.]])" 121 | ] 122 | } 123 | ], 124 | "prompt_number": 30 125 | }, 126 | { 127 | "cell_type": "code", 128 | "collapsed": false, 129 | "input": [ 130 | "np.arange(15)" 131 | ], 132 | "language": "python", 133 | "metadata": {}, 134 | "outputs": [ 135 | { 136 | "metadata": {}, 137 | "output_type": "pyout", 138 | "prompt_number": 34, 139 | "text": [ 140 | "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])" 141 | ] 142 | } 143 | ], 144 | "prompt_number": 34 145 | }, 146 | { 147 | "cell_type": "code", 148 | "collapsed": false, 149 | "input": [ 150 | "np.eye(6) # Create a square N x N identity matrix (1\u2019s on the diagonal and 0\u2019s elsewhere)" 151 | ], 152 | "language": "python", 153 | "metadata": {}, 154 | "outputs": [ 155 | { 156 | "metadata": {}, 157 | "output_type": "pyout", 158 | "prompt_number": 36, 159 | "text": [ 160 | "array([[ 1., 0., 0., 0., 0., 0.],\n", 161 | " [ 0., 1., 0., 0., 0., 0.],\n", 162 | " [ 0., 0., 1., 0., 0., 0.],\n", 163 | " [ 0., 0., 0., 1., 0., 0.],\n", 164 | " [ 0., 0., 0., 0., 1., 0.],\n", 165 | " [ 0., 0., 0., 0., 0., 1.]])" 166 | ] 167 | } 168 | ], 169 | "prompt_number": 36 170 | }, 171 | { 172 | "cell_type": "code", 173 | "collapsed": false, 174 | "input": [ 175 | "#Batch operations on data can be performed without using for loops, this is called vectorization\n", 176 | "scores = [89,56.34, 76,89, 98]\n", 177 | "first_arr =np.array(scores)\n", 178 | "print first_arr\n", 179 | "print first_arr * first_arr\n", 180 | "print first_arr - first_arr\n", 181 | "print 1/(first_arr)\n", 182 | "print first_arr ** 0.5" 183 | ], 184 | "language": "python", 185 | "metadata": {}, 186 | "outputs": [ 187 | { 188 | "output_type": "stream", 189 | "stream": "stdout", 190 | "text": [ 191 | "[ 89. 56.34 76. 89. 98. ]\n", 192 | "[ 7921. 3174.1956 5776. 7921. 9604. ]\n", 193 | "[ 0. 0. 0. 0. 0.]\n", 194 | "[ 0.01123596 0.01774938 0.01315789 0.01123596 0.01020408]\n", 195 | "[ 9.43398113 7.5059976 8.71779789 9.43398113 9.89949494]\n" 196 | ] 197 | } 198 | ], 199 | "prompt_number": 10 200 | }, 201 | { 202 | "cell_type": "markdown", 203 | "metadata": {}, 204 | "source": [ 205 | "#Indexing and Slicing" 206 | ] 207 | }, 208 | { 209 | "cell_type": "code", 210 | "collapsed": false, 211 | "input": [ 212 | "# you may want to select a subset of your data, for which Numpy array indexing is really useful\n", 213 | "new_arr = np.arange(12)\n", 214 | "print new_arr\n", 215 | "print new_arr[5]\n", 216 | "print new_arr[4:9]\n", 217 | "new_arr[4:9] = 99 #assign sequence of values from 4 to 9 as 99\n", 218 | "print new_arr" 219 | ], 220 | "language": "python", 221 | "metadata": {}, 222 | "outputs": [ 223 | { 224 | "output_type": "stream", 225 | "stream": "stdout", 226 | "text": [ 227 | "[ 0 1 2 3 4 5 6 7 8 9 10 11]\n", 228 | "5\n", 229 | "[4 5 6 7 8]\n", 230 | "[ 0 1 2 3 99 99 99 99 99 9 10 11]\n" 231 | ] 232 | } 233 | ], 234 | "prompt_number": 26 235 | }, 236 | { 237 | "cell_type": "code", 238 | "collapsed": false, 239 | "input": [ 240 | "# A major diffence between lists and array is that, array slices are views on the original array. This means that\n", 241 | "# the data is not copied, and any modifications to the view will be reflected in the source\n", 242 | "# array. \n", 243 | "modi_arr = new_arr[4:9] \n", 244 | "modi_arr[1] = 123456\n", 245 | "print new_arr # you can see the changes are refelected in main array. \n", 246 | "modi_arr[:] # the sliced variable\n", 247 | " " 248 | ], 249 | "language": "python", 250 | "metadata": {}, 251 | "outputs": [ 252 | { 253 | "output_type": "stream", 254 | "stream": "stdout", 255 | "text": [ 256 | "[ 0 1 2 3 99 123456 99 99 99 9\n", 257 | " 10 11]\n" 258 | ] 259 | }, 260 | { 261 | "metadata": {}, 262 | "output_type": "pyout", 263 | "prompt_number": 27, 264 | "text": [ 265 | "array([ 99, 123456, 99, 99, 99])" 266 | ] 267 | } 268 | ], 269 | "prompt_number": 27 270 | }, 271 | { 272 | "cell_type": "code", 273 | "collapsed": false, 274 | "input": [ 275 | "# arrays can be treated like matrices\n", 276 | "matrix_arr =np.array([[3,4,5],[6,7,8],[9,5,1]])\n", 277 | "print matrix_arr\n", 278 | "print matrix_arr[1]\n", 279 | "print matrix_arr[0][2] #first row and third column\n", 280 | "print matrix_arr[0,2] # This is same as the above operation\n", 281 | "\n", 282 | "from IPython.display import Image # importing a image from my computer.\n", 283 | "i = Image(filename='Capture.png')\n", 284 | "i # Blue print of a matrix " 285 | ], 286 | "language": "python", 287 | "metadata": {}, 288 | "outputs": [ 289 | { 290 | "output_type": "stream", 291 | "stream": "stdout", 292 | "text": [ 293 | "[[3 4 5]\n", 294 | " [6 7 8]\n", 295 | " [9 5 1]]\n", 296 | "[6 7 8]\n", 297 | "5\n", 298 | "5\n" 299 | ] 300 | }, 301 | { 302 | "metadata": {}, 303 | "output_type": "pyout", 304 | "png": "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\n", 305 | "prompt_number": 9, 306 | "text": [ 307 | "" 308 | ] 309 | } 310 | ], 311 | "prompt_number": 9 312 | }, 313 | { 314 | "cell_type": "code", 315 | "collapsed": false, 316 | "input": [ 317 | "cd C:\\Users\\tk\\Desktop\\pics # changing my directory" 318 | ], 319 | "language": "python", 320 | "metadata": {}, 321 | "outputs": [ 322 | { 323 | "output_type": "stream", 324 | "stream": "stdout", 325 | "text": [ 326 | "C:\\Users\\tk\\Desktop\\pics\n" 327 | ] 328 | } 329 | ], 330 | "prompt_number": 8 331 | }, 332 | { 333 | "cell_type": "code", 334 | "collapsed": false, 335 | "input": [ 336 | "# 3d arrays -> this is a 2x2x3 array\n", 337 | "three_d_arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])\n", 338 | "print three_d_arr\n", 339 | "print \"returns the second list inside first list {}\".format(three_d_arr[0,1])\n" 340 | ], 341 | "language": "python", 342 | "metadata": {}, 343 | "outputs": [ 344 | { 345 | "output_type": "stream", 346 | "stream": "stdout", 347 | "text": [ 348 | "[[[ 1 2 3]\n", 349 | " [ 4 5 6]]\n", 350 | "\n", 351 | " [[ 7 8 9]\n", 352 | " [10 11 12]]]\n", 353 | "returns the second list inside first list [4 5 6]\n" 354 | ] 355 | } 356 | ], 357 | "prompt_number": 37 358 | }, 359 | { 360 | "cell_type": "code", 361 | "collapsed": false, 362 | "input": [ 363 | "three_d_arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])\n", 364 | "print three_d_arr[0]\n", 365 | "#if you omit later indices, the returned object will be a lowerdimensional\n", 366 | "# ndarray consisting of all the data along the higher dimensions" 367 | ], 368 | "language": "python", 369 | "metadata": {}, 370 | "outputs": [ 371 | { 372 | "output_type": "stream", 373 | "stream": "stdout", 374 | "text": [ 375 | "[[1 2 3]\n", 376 | " [4 5 6]]\n" 377 | ] 378 | } 379 | ], 380 | "prompt_number": 39 381 | }, 382 | { 383 | "cell_type": "markdown", 384 | "metadata": {}, 385 | "source": [ 386 | "I have used [format](https://docs.python.org/2/tutorial/inputoutput.html) function in the below cell." 387 | ] 388 | }, 389 | { 390 | "cell_type": "code", 391 | "collapsed": false, 392 | "input": [ 393 | "copied_values = three_d_arr[0].copy() # copy arr[0] value to copied_values\n", 394 | "three_d_arr[0]= 99 # change all values of arr[0] to 99 \n", 395 | "print \"New value of three_d_arr: {}\".format(three_d_arr) # check the new value of three_d_arr \n", 396 | "three_d_arr[0] = copied_values # assign copied values back to three_d_arr[0]\n", 397 | "print\" three_d_arr again: {}\".format(three_d_arr)" 398 | ], 399 | "language": "python", 400 | "metadata": {}, 401 | "outputs": [ 402 | { 403 | "output_type": "stream", 404 | "stream": "stdout", 405 | "text": [ 406 | "New value of three_d_arr: [[[99 99 99]\n", 407 | " [99 99 99]]\n", 408 | "\n", 409 | " [[ 7 8 9]\n", 410 | " [10 11 12]]]\n", 411 | " three_d_arr again: [[[99 99 99]\n", 412 | " [99 99 99]]\n", 413 | "\n", 414 | " [[ 7 8 9]\n", 415 | " [10 11 12]]]\n" 416 | ] 417 | } 418 | ], 419 | "prompt_number": 62 420 | }, 421 | { 422 | "cell_type": "code", 423 | "collapsed": false, 424 | "input": [ 425 | "matrix_arr =np.array([[3,4,5],[6,7,8],[9,5,1]])\n", 426 | "print \"The original matrix {}:\".format(matrix_arr)\n", 427 | "print \"slices the first two rows:{}\".format(matrix_arr[:2]) # similar to list slicing. returns first two rows of the array\n", 428 | "print \"Slices the first two rows and two columns:{}\".format(matrix_arr[:2, 1:])\n", 429 | "print \"returns 6 and 7: {}\".format(matrix_arr[1,:2])\n", 430 | "print \"Returns first column: {}\".format(matrix_arr[:,:1]) #Note that a colon by itself means to take the entire axis" 431 | ], 432 | "language": "python", 433 | "metadata": {}, 434 | "outputs": [ 435 | { 436 | "output_type": "stream", 437 | "stream": "stdout", 438 | "text": [ 439 | "The original matrix [[3 4 5]\n", 440 | " [6 7 8]\n", 441 | " [9 5 1]]:\n", 442 | "slices the first two rows:[[3 4 5]\n", 443 | " [6 7 8]]\n", 444 | "Slices the first two rows and two columns:[[4 5]\n", 445 | " [7 8]]\n", 446 | "returns 6 and 7: [6 7]\n", 447 | "Returns first column: [[3]\n", 448 | " [6]\n", 449 | " [9]]\n" 450 | ] 451 | } 452 | ], 453 | "prompt_number": 76 454 | }, 455 | { 456 | "cell_type": "code", 457 | "collapsed": false, 458 | "input": [ 459 | "from IPython.display import Image # importing a image from my computer.\n", 460 | "j = Image(filename='Expre.png')\n", 461 | "j # diagrammatic explanation of matrix array slicing works." 462 | ], 463 | "language": "python", 464 | "metadata": {}, 465 | "outputs": [ 466 | { 467 | "metadata": {}, 468 | "output_type": "pyout", 469 | "png": "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\n9l7Qz1SEpxXKf5YeygqHog/Z/bJi66irWQor++y9oJ+pCE8rlP8sPZQVDkUfsvtlxdZRV7MUVvbZ\ne0E/UxGeVij/WXooKxyKPmT3y4qto65mKazss/eCfqYiPK1Q/rP0UFY4FH3I7pcVW0ddzVJY2Wfv\nBf1MRXhaofzfqYfO+p+IH0j0P/NzKPqQ3S8rto66mqWwss/eC/qZivC0Qvm/Uw/JUGw/AaN8XmOR\n3/98nONj3zgUfcjulxVbR13NUljZZ+8F/UxFeFqh/N+phx6Gonx2ovlQ73VAnvtZiqPBoehDdr+s\n2DrqapbCyj57L+hnKsLTCuX/0EP6Ib7rcdH9J7PrELmUtx5lOPWOLWyc4/GzF+tfTdP7SbFCz3sf\nZHq+zV81U/P4WA7FV5FrejYID0t2v6zYOupqlsLKPnsv6GcqwtMK5V/30DIo2p/Mbl/LEJHH25/U\nNo5tnaP9lP7OkNsdis3zORQ5FL3I7pcVW0ddzVJY2WfvBf1MRXhaofx3e0iHVhlC6wCs/02vd6xh\n5xw6MM2T94di/xeevg6H4qsgXncQHpbsflmxddTVLIWVffZe0M9UhKcVyr/tofY/bLn/ZPb8UNw+\nhx2E65Czz90bikd+KnwODsVXkWt6NggPS3a/rNg66mqWwso+ey/oZyrC0wrlX/VQ9+3Ng0Nx9xwL\n5ev2+MLWUPQfiAKH4qsgXncQHpbsflmxddTVLIWVffZe0M9UhKcVyr/qod6/2d2+fm0o1ucQ1p8Q\nxbf9haePQ/H62I2B2A5L/bo5Z6F97HKEQ/FFqp45CYSHJbtfVmwddTVLYWWfvRf0MxXhaYXyb3to\nHWKrPi+XZXAcHIoL2+dYKW+v9p5XDUUdsPdz3XR9Yjvo9GsOxdORa3A2CA9Ldr+s2DrqapbCyj57\nL+hnKsLTCuUf0kPtW6xXHobiETpvx+7DofgqiJ5B92V2v6zYOupqlsLKPnsv6GcqwtMK5R/RQ1s/\n0elx/Z6ODLcV+enz6YF6+wmUQ/EVED2D7svsflmxddTVLIWVffZe0M9UhKcVyh/fQ/23XMlrcCj6\nkN0vK7aOupqlsLLP3gv6mYrwtEL5z9JDWeFQ9CG7X1ZsHT8kDHJA/swu2Sd1nno1p6gt9XqIOq5e\nbaljsnXU8SgHZkA2jCbC04Lyj94n+RtZs4HeV3a/rNgZyKF4MtFNi/JnOMcmazbQ+8rulxUORSDR\nTYvyZzjHJms20PvK7pcVDkUg0U2L8mc4xyZrNtD7yu6XFQ5FINFNi/JnOMcmazbQ+8rulxUORSDR\nTYvyZzjHJms20PvK7pcVDkUg0U2L8mc4xyZrNtD7yu6XFQ5FINFNi/JnOMcmazbQ+8rulxUORSDR\nTYvyZzjHJms20PvK7pcVDkUg0U2L8mc4xyZrNtD7yu6XFQ5FINFNi/JnOMcmazbQ+8rulxUORSDR\nTYvyZzjHJms20PvK7pcVDkUg0U2L8mc4xyZrNtD7yu6XFQ5FINFNi/JnOMcmazbQ+8rulxUORSDR\nTYvyZzjHJms20PvK7pcVDkUg0U2L8mc4xyZrNtD7yu6XFQ5FINFNi/JnOMcmazbQ+8rulxUORSDR\nTYvyZzjHJms20PvK7pcVDkUg0U2L8mc4xyZrNtD7yu6XlWooSlHlAEVRFEVNL5mMs9xtROwzurYo\n/1l6KCtZs4HeV3a/rNzr+PPzf0qL1SO/zfN8AAAAAElFTkSuQmCC\n", 470 | "prompt_number": 80, 471 | "text": [ 472 | "" 473 | ] 474 | } 475 | ], 476 | "prompt_number": 80 477 | }, 478 | { 479 | "cell_type": "code", 480 | "collapsed": false, 481 | "input": [ 482 | "#Import random module from Numpy \n", 483 | "personals = np.array(['Manu', 'Jeevan', 'Prakash', 'Manu', 'Prakash', 'Jeevan', 'Prakash'])\n", 484 | "print personals == 'Manu' #checks for the string 'Manu' in personals. If present it returns true; else false#" 485 | ], 486 | "language": "python", 487 | "metadata": {}, 488 | "outputs": [ 489 | { 490 | "output_type": "stream", 491 | "stream": "stdout", 492 | "text": [ 493 | "[ True False False True False False False]\n" 494 | ] 495 | } 496 | ], 497 | "prompt_number": 4 498 | }, 499 | { 500 | "cell_type": "code", 501 | "collapsed": false, 502 | "input": [ 503 | "from numpy import random \n", 504 | "random_no = random.randn(7,4)\n", 505 | "print random_no\n", 506 | "random_no[personals =='Manu'] #The function returns the rows for which the value of manu is true\n", 507 | "# Check the image displayed in the cell below. " 508 | ], 509 | "language": "python", 510 | "metadata": {}, 511 | "outputs": [ 512 | { 513 | "output_type": "stream", 514 | "stream": "stdout", 515 | "text": [ 516 | "[[-0.129557 0.3684001 -0.15747451 -0.1196816 ]\n", 517 | " [-0.35946571 -1.23477985 1.08186057 -0.61596683]\n", 518 | " [ 1.67096505 1.11183755 -0.39640455 0.22848279]\n", 519 | " [-0.27989438 -1.51275966 -0.48825407 1.32425359]\n", 520 | " [-0.04493194 -1.10371501 -0.52742166 -1.06265549]\n", 521 | " [ 1.16938298 -0.60478133 1.40615125 -1.35350336]\n", 522 | " [ 0.86325448 1.97577081 0.05339779 0.71515521]]\n" 523 | ] 524 | }, 525 | { 526 | "metadata": {}, 527 | "output_type": "pyout", 528 | "prompt_number": 5, 529 | "text": [ 530 | "array([[-0.129557 , 0.3684001 , -0.15747451, -0.1196816 ],\n", 531 | " [-0.27989438, -1.51275966, -0.48825407, 1.32425359]])" 532 | ] 533 | } 534 | ], 535 | "prompt_number": 5 536 | }, 537 | { 538 | "cell_type": "code", 539 | "collapsed": false, 540 | "input": [ 541 | "cd C:\\Users\\Manu\\Desktop \n" 542 | ], 543 | "language": "python", 544 | "metadata": {}, 545 | "outputs": [ 546 | { 547 | "output_type": "stream", 548 | "stream": "stdout", 549 | "text": [ 550 | "C:\\Users\\Manu\\Desktop\n" 551 | ] 552 | } 553 | ], 554 | "prompt_number": 10 555 | }, 556 | { 557 | "cell_type": "code", 558 | "collapsed": false, 559 | "input": [ 560 | "from IPython.display import Image\n", 561 | "k = Image(filename='Matrix.png')\n", 562 | "k" 563 | ], 564 | "language": "python", 565 | "metadata": {}, 566 | "outputs": [ 567 | { 568 | "metadata": {}, 569 | "output_type": "pyout", 570 | "png": "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\na3DCHiwO08vKlwCw7ZFg84OdF9ieyfOpal+KefBMX+9IlnV1weMyJj5BJ3v06A13L9EBjQvVj2w7\nth5MxoMBWz/oOtGYr6MeAsQJ5ada9RMIfl0ok8l88803169ff/DgQUlJbVlWyQyxZcuWTCazurr6\n97///a9//StXQ5cuOvErS1u3bm1oaEin0zU1NVw6tLa29q9//esPf/iDbdsbN27MZDJLS0v8AhT/\ncCdGYlkW72fz5s2bN29mjN29e/fWrVvJZLKxsTGdTjPGnj59+vDhw6dPn9bU1DQ0NDQ2Nj7//PPN\nzc2bN2+ur6/nKqHy1KLNHNYgBLTXNNWUTCOgsQRrHAphKNICmR/svKD2WGNSGONQZOYcH0OOjiHK\nlJFJB5140GCPL6zhB2mgAs0/qjhZqb20TipuXkLDT9O1tbWbNm3atm3bzp07d+3atVPg5SIvvPAC\nPyO/+OKLra2tpWYvvfQSb7Z79+6XX36Zv5Hnd502Nja2tLS0trbu2bOnpaWFMTYzM5PP51OpFJcX\nvSTAe9u1a1d7e3tnZ2dbW1tbW9vevXs7Ozv5QwAfPXr04MGD+fn5hoaGHTt27Nq1a8+ePZ2dnT/4\nwQ+2bdvGlwf39OwARGkQkrXXM9U4elIYS/QNOcHa40DmBzsvafsgxiScMUYpjNEHbcjBGaKCGYci\nNVaFSJGuoQtr+MEZqKCjRR4nNKy6fmLmh+BwS0Q+n7979+74+PgXX3wxOjo6OjqazWa//PLLycnJ\n6enpubk5rhvK5/P37t3L5XJffPFFNpvlzf72t79NTU3dv3//6dOnawK8/TfffJPL5UZHRz/55JMr\nV65cuXLlk08+uX79+qiTbDZ78+bNr776anp6enZ2dm5u7uHDh19//fXY2Njnn3/+pz/96fLly5cv\nX7569epf/vKXsbGxf/7zn/zzxMrKytramndelu1rs/My3Ns+/q6eKJkgCMIocT3/2La9srLC/Qr8\nbMu38ys/dXV1yWQylUrZts3NdEtLS1w6xJvxO1z5RwfxvbzYfnl5eXV1ld80lUgkXE/IsIq/pUil\nUvwilWVZq6urKysrS0tLKysrpX35WKlUqra2lrd0dVUi4PcQkyf2WSfaBkZj+GciCOJZZbjXOnye\nsbaBd6sdiQS+EiSTSX7SF1cIxhj/+rd0OxpfM8Q36KWXvN3yE3ptba3Ys2W539/zfcWb3hhjfMd0\n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\nQmCC\n", 571 | "prompt_number": 11, 572 | "text": [ 573 | "" 574 | ] 575 | } 576 | ], 577 | "prompt_number": 11 578 | }, 579 | { 580 | "cell_type": "code", 581 | "collapsed": false, 582 | "input": [ 583 | "random_no[personals == 'Manu', 2:] #First two columns and first two rows." 584 | ], 585 | "language": "python", 586 | "metadata": {}, 587 | "outputs": [ 588 | { 589 | "metadata": {}, 590 | "output_type": "pyout", 591 | "prompt_number": 12, 592 | "text": [ 593 | "array([[-0.15747451, -0.1196816 ],\n", 594 | " [-0.48825407, 1.32425359]])" 595 | ] 596 | } 597 | ], 598 | "prompt_number": 12 599 | }, 600 | { 601 | "cell_type": "code", 602 | "collapsed": false, 603 | "input": [ 604 | "# To select everything except 'Manu', you can != or negate the condition using -:\n", 605 | "print personals != 'Manu'\n", 606 | "random_no[-(personals == 'Manu')] #get everything except 1st and 4th rows" 607 | ], 608 | "language": "python", 609 | "metadata": {}, 610 | "outputs": [ 611 | { 612 | "output_type": "stream", 613 | "stream": "stdout", 614 | "text": [ 615 | "[False True True False True True True]\n" 616 | ] 617 | }, 618 | { 619 | "metadata": {}, 620 | "output_type": "pyout", 621 | "prompt_number": 13, 622 | "text": [ 623 | "array([[-0.35946571, -1.23477985, 1.08186057, -0.61596683],\n", 624 | " [ 1.67096505, 1.11183755, -0.39640455, 0.22848279],\n", 625 | " [-0.04493194, -1.10371501, -0.52742166, -1.06265549],\n", 626 | " [ 1.16938298, -0.60478133, 1.40615125, -1.35350336],\n", 627 | " [ 0.86325448, 1.97577081, 0.05339779, 0.71515521]])" 628 | ] 629 | } 630 | ], 631 | "prompt_number": 13 632 | }, 633 | { 634 | "cell_type": "code", 635 | "collapsed": false, 636 | "input": [ 637 | "# you can use boolean operator &(and), |(or)\n", 638 | "new_variable = (personals == 'Manu') | (personals == 'Jeevan')\n", 639 | "print new_variable\n", 640 | "random_no[new_variable] " 641 | ], 642 | "language": "python", 643 | "metadata": {}, 644 | "outputs": [ 645 | { 646 | "output_type": "stream", 647 | "stream": "stdout", 648 | "text": [ 649 | "[ True True False True False True False]\n" 650 | ] 651 | }, 652 | { 653 | "metadata": {}, 654 | "output_type": "pyout", 655 | "prompt_number": 18, 656 | "text": [ 657 | "array([[-0.129557 , 0.3684001 , -0.15747451, -0.1196816 ],\n", 658 | " [-0.35946571, -1.23477985, 1.08186057, -0.61596683],\n", 659 | " [-0.27989438, -1.51275966, -0.48825407, 1.32425359],\n", 660 | " [ 1.16938298, -0.60478133, 1.40615125, -1.35350336]])" 661 | ] 662 | } 663 | ], 664 | "prompt_number": 18 665 | }, 666 | { 667 | "cell_type": "code", 668 | "collapsed": false, 669 | "input": [ 670 | "random_no[random_no < 0] =0 \n", 671 | "random_no # This will set all negative values to zero" 672 | ], 673 | "language": "python", 674 | "metadata": {}, 675 | "outputs": [ 676 | { 677 | "metadata": {}, 678 | "output_type": "pyout", 679 | "prompt_number": 22, 680 | "text": [ 681 | "array([[ 0. , 0.3684001 , 0. , 0. ],\n", 682 | " [ 0. , 0. , 1.08186057, 0. ],\n", 683 | " [ 1.67096505, 1.11183755, 0. , 0.22848279],\n", 684 | " [ 0. , 0. , 0. , 1.32425359],\n", 685 | " [ 0. , 0. , 0. , 0. ],\n", 686 | " [ 1.16938298, 0. , 1.40615125, 0. ],\n", 687 | " [ 0.86325448, 1.97577081, 0.05339779, 0.71515521]])" 688 | ] 689 | } 690 | ], 691 | "prompt_number": 22 692 | }, 693 | { 694 | "cell_type": "code", 695 | "collapsed": false, 696 | "input": [ 697 | "random_no[ personals != 'Manu'] = 9 # This will set all rows except 1 and 4 to 9. \n", 698 | "random_no" 699 | ], 700 | "language": "python", 701 | "metadata": {}, 702 | "outputs": [ 703 | { 704 | "metadata": {}, 705 | "output_type": "pyout", 706 | "prompt_number": 24, 707 | "text": [ 708 | "array([[ 0. , 0.3684001 , 0. , 0. ],\n", 709 | " [ 9. , 9. , 9. , 9. ],\n", 710 | " [ 9. , 9. , 9. , 9. ],\n", 711 | " [ 0. , 0. , 0. , 1.32425359],\n", 712 | " [ 9. , 9. , 9. , 9. ],\n", 713 | " [ 9. , 9. , 9. , 9. ],\n", 714 | " [ 9. , 9. , 9. , 9. ]])" 715 | ] 716 | } 717 | ], 718 | "prompt_number": 24 719 | }, 720 | { 721 | "cell_type": "markdown", 722 | "metadata": {}, 723 | "source": [ 724 | "#Fancy Indexing(Indexing using integer arrays)\n", 725 | "Fancy indexing copies data into a new array\n" 726 | ] 727 | }, 728 | { 729 | "cell_type": "code", 730 | "collapsed": false, 731 | "input": [ 732 | "from numpy import random\n", 733 | "algebra = random.randn(7,4) # empty will return a matrix of size 7,4\n", 734 | "for j in range(7):\n", 735 | " algebra[j] = j\n", 736 | "algebra" 737 | ], 738 | "language": "python", 739 | "metadata": {}, 740 | "outputs": [ 741 | { 742 | "metadata": {}, 743 | "output_type": "pyout", 744 | "prompt_number": 19, 745 | "text": [ 746 | "array([[ 0., 0., 0., 0.],\n", 747 | " [ 1., 1., 1., 1.],\n", 748 | " [ 2., 2., 2., 2.],\n", 749 | " [ 3., 3., 3., 3.],\n", 750 | " [ 4., 4., 4., 4.],\n", 751 | " [ 5., 5., 5., 5.],\n", 752 | " [ 6., 6., 6., 6.]])" 753 | ] 754 | } 755 | ], 756 | "prompt_number": 19 757 | }, 758 | { 759 | "cell_type": "code", 760 | "collapsed": false, 761 | "input": [ 762 | "# To select a subset of rows in particular order, you can simply pass a list.\n", 763 | "algebra[[4,5,1]] #returns a subset of rows" 764 | ], 765 | "language": "python", 766 | "metadata": {}, 767 | "outputs": [ 768 | { 769 | "metadata": {}, 770 | "output_type": "pyout", 771 | "prompt_number": 23, 772 | "text": [ 773 | "array([[ 4., 4., 4., 4.],\n", 774 | " [ 5., 5., 5., 5.],\n", 775 | " [ 1., 1., 1., 1.]])" 776 | ] 777 | } 778 | ], 779 | "prompt_number": 23 780 | }, 781 | { 782 | "cell_type": "code", 783 | "collapsed": false, 784 | "input": [ 785 | "fancy = np.arange(36).reshape(9,4) #reshape is to reshape an array\n", 786 | "print fancy\n", 787 | "fancy[[1,4,3,2],[3,2,1,0]] #the position of the output array are[(1,3),(4,2),(3,1),(2,0)]" 788 | ], 789 | "language": "python", 790 | "metadata": {}, 791 | "outputs": [ 792 | { 793 | "output_type": "stream", 794 | "stream": "stdout", 795 | "text": [ 796 | "[[ 0 1 2 3]\n", 797 | " [ 4 5 6 7]\n", 798 | " [ 8 9 10 11]\n", 799 | " [12 13 14 15]\n", 800 | " [16 17 18 19]\n", 801 | " [20 21 22 23]\n", 802 | " [24 25 26 27]\n", 803 | " [28 29 30 31]\n", 804 | " [32 33 34 35]]\n" 805 | ] 806 | }, 807 | { 808 | "metadata": {}, 809 | "output_type": "pyout", 810 | "prompt_number": 33, 811 | "text": [ 812 | "array([ 7, 18, 13, 8])" 813 | ] 814 | } 815 | ], 816 | "prompt_number": 33 817 | }, 818 | { 819 | "cell_type": "code", 820 | "collapsed": false, 821 | "input": [ 822 | "fancy[[1, 4, 8, 2]][:, [0, 3, 1, 2]] # entire first row is selected, but the elements are interchanged, same goes for 4th, 8th and 2 nd row." 823 | ], 824 | "language": "python", 825 | "metadata": {}, 826 | "outputs": [ 827 | { 828 | "metadata": {}, 829 | "output_type": "pyout", 830 | "prompt_number": 39, 831 | "text": [ 832 | "array([[ 4, 7, 5, 6],\n", 833 | " [16, 19, 17, 18],\n", 834 | " [32, 35, 33, 34],\n", 835 | " [ 8, 11, 9, 10]])" 836 | ] 837 | } 838 | ], 839 | "prompt_number": 39 840 | }, 841 | { 842 | "cell_type": "code", 843 | "collapsed": false, 844 | "input": [ 845 | "# another way to do the above operation is by using np.ix_ function.\n", 846 | "fancy[np.ix_([1,4,8,2],[0,3,1,2])]" 847 | ], 848 | "language": "python", 849 | "metadata": {}, 850 | "outputs": [ 851 | { 852 | "metadata": {}, 853 | "output_type": "pyout", 854 | "prompt_number": 42, 855 | "text": [ 856 | "array([[ 4, 7, 5, 6],\n", 857 | " [16, 19, 17, 18],\n", 858 | " [32, 35, 33, 34],\n", 859 | " [ 8, 11, 9, 10]])" 860 | ] 861 | } 862 | ], 863 | "prompt_number": 42 864 | }, 865 | { 866 | "cell_type": "markdown", 867 | "metadata": {}, 868 | "source": [ 869 | "#Transposing Arrays" 870 | ] 871 | }, 872 | { 873 | "cell_type": "code", 874 | "collapsed": false, 875 | "input": [ 876 | "transpose= np.arange(12).reshape(3,4) \n", 877 | "transpose.T # the shape has changed to 4,3" 878 | ], 879 | "language": "python", 880 | "metadata": {}, 881 | "outputs": [ 882 | { 883 | "metadata": {}, 884 | "output_type": "pyout", 885 | "prompt_number": 47, 886 | "text": [ 887 | "array([[ 0, 4, 8],\n", 888 | " [ 1, 5, 9],\n", 889 | " [ 2, 6, 10],\n", 890 | " [ 3, 7, 11]])" 891 | ] 892 | } 893 | ], 894 | "prompt_number": 47 895 | }, 896 | { 897 | "cell_type": "code", 898 | "collapsed": false, 899 | "input": [ 900 | "#you can use np.dot function to perform matrix computations. You can calculate X transpose X as follows:\n", 901 | "np.dot(transpose.T, transpose)" 902 | ], 903 | "language": "python", 904 | "metadata": {}, 905 | "outputs": [ 906 | { 907 | "metadata": {}, 908 | "output_type": "pyout", 909 | "prompt_number": 48, 910 | "text": [ 911 | "array([[ 80, 92, 104, 116],\n", 912 | " [ 92, 107, 122, 137],\n", 913 | " [104, 122, 140, 158],\n", 914 | " [116, 137, 158, 179]])" 915 | ] 916 | } 917 | ], 918 | "prompt_number": 48 919 | }, 920 | { 921 | "cell_type": "markdown", 922 | "metadata": {}, 923 | "source": [ 924 | "#Universal functions\n", 925 | "They perform element wise operations on data in arrays." 926 | ] 927 | }, 928 | { 929 | "cell_type": "code", 930 | "collapsed": false, 931 | "input": [ 932 | "funky =np.arange(8)\n", 933 | "print np.sqrt(funky)\n", 934 | "print np.exp(funky) #exponent of the array\n", 935 | "# these are called as unary functions" 936 | ], 937 | "language": "python", 938 | "metadata": {}, 939 | "outputs": [ 940 | { 941 | "output_type": "stream", 942 | "stream": "stdout", 943 | "text": [ 944 | "[ 0. 1. 1.41421356 1.73205081 2. 2.23606798\n", 945 | " 2.44948974 2.64575131]\n", 946 | "[ 1.00000000e+00 2.71828183e+00 7.38905610e+00 2.00855369e+01\n", 947 | " 5.45981500e+01 1.48413159e+02 4.03428793e+02 1.09663316e+03]\n" 948 | ] 949 | } 950 | ], 951 | "prompt_number": 53 952 | }, 953 | { 954 | "cell_type": "code", 955 | "collapsed": false, 956 | "input": [ 957 | "# Binary functions take two value, Others such as maximum, add\n", 958 | "x = random.randn(10)\n", 959 | "y = random.randn(10)\n", 960 | "print x\n", 961 | "print y\n", 962 | "print np.maximum(x,y)# element wise operation\n", 963 | "print np.modf(x)# function modf returns the fractional and integral parts of a floating point arrays" 964 | ], 965 | "language": "python", 966 | "metadata": {}, 967 | "outputs": [ 968 | { 969 | "output_type": "stream", 970 | "stream": "stdout", 971 | "text": [ 972 | "[-0.47538326 -0.32308133 1.45505923 -0.53196376 -1.34427866 -2.14409558\n", 973 | " -0.96296558 0.14068437 -0.29208196 -1.17537313]\n", 974 | "[-1.68868842 -0.53788536 -1.01887225 -0.02972594 -1.04607062 -2.08636169\n", 975 | " 0.34398903 -0.64183089 1.55401001 0.73270627]\n", 976 | "[-0.47538326 -0.32308133 1.45505923 -0.02972594 -1.04607062 -2.08636169\n", 977 | " 0.34398903 0.14068437 1.55401001 0.73270627]\n", 978 | "(array([-0.47538326, -0.32308133, 0.45505923, -0.53196376, -0.34427866,\n", 979 | " -0.14409558, -0.96296558, 0.14068437, -0.29208196, -0.17537313]), array([-0., -0., 1., -0., -1., -2., -0., 0., -0., -1.]))\n" 980 | ] 981 | } 982 | ], 983 | "prompt_number": 62 984 | }, 985 | { 986 | "cell_type": "code", 987 | "collapsed": false, 988 | "input": [ 989 | "# List of unary functions avaliable\n", 990 | "from IPython.display import Image \n", 991 | "l = Image(filename='unary functions.png')\n", 992 | "l" 993 | ], 994 | "language": "python", 995 | "metadata": {}, 996 | "outputs": [ 997 | { 998 | "metadata": {}, 999 | "output_type": "pyout", 1000 | "png": "iVBORw0KGgoAAAANSUhEUgAAAicAAAHRCAYAAACxcxlEAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\njwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAIVISURBVHhe7f2xjjQ5tl4Nn3uS9V2DzLblj6UL\nGECAXKF9AePKGUfmAHKPXKFNAXLkjCHvuMc+/7+6e00/vZuMjMzKqoqsehZAxA5yc3OT3GQwst43\n85/+rZRSSinlQvRwUkoppZRL0cNJKaWUUi7FP/2///f//q2pqampqamp6bOT9HDS1NTU1NTUdIkk\nPZw0NTU1NTU1XSJJDydNTU1NTU1Nl0jSw0lTU1NTU1PTJZL0cNLU1NTU1NR0iSQ9nDQ1NTU1NTVd\nIkkPJ01NTU1NTU2XSHLqcPJP//RPv0v/+3//76XeW9J//I//8d/+y3/5L8uypqaZ/sN/+A8/x+K/\n+3f/7ufY+V//638t9R5N98YjutRZlTU1NTU1nUty+nDy7//9v/+3//bf/tvP6f/+3/+71LsnccDB\nlvc9nDTdkzImOaCQnhGXpjPxyIHov//3//6z3MNJU1NT09uTnD6cPHvjxR52V2VNTbdSxiQHBO7z\nsPsR6T3WRVNTU9N3TvLw4STzVjJvsrzZ+ieg//E//sfP95TzEOFq+p//83/+ox66lKOLDR84lPFR\nPol87JHf9D1TxgufmHD/n/7Tf/r5nk8xiBHKKSMZk//1v/7Xn3UyHo0/6qMz41FZm+RxJd/kvf5o\ni3w/0VHP2G4MNzU1Nf0+yd1/1vFjbDfalUziAeGVj7+ROVjwcODefzPAg8CHCzZ8MKBHQmYTpwzZ\nBw/+6F/T90vGy7z34EvMECccEjKOiK8Zj8YfibiyfMY0triyBtIGNo1P9I19P9HhPu3oT2O4qamp\n6fdJ7v4HsW6oyLl5H8lu1vkPaXMzT10fADwwfGiQl/qzbtP3S8bLvOewQCLPTy/ycEL+Kh65z8NC\n2lfOeJw6XLlHxo4+cMWHI/2mpqampl+SvNufdVImIVuXNPN2uqv8qdP0/ZJxgcwhg3sPHTNxqOCQ\ngMynGav44V578/6MzJX7R/Kbmpqamn5J8iGHEz8N6ScnTc9Kxgvy/FMOn1zwpxaTdfwUYxWPaW/e\nK5/95IQ28pOT1aeNqd/U1NTU9EuShw8nvon6tmr5SuYBgUwd/8bvAyL/5o8uDxjz/Th+/k0/5abv\n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\nestHn89q2w2XOupo617YDHxoYWP2D9urzRv/fbg8yrPafuZ4fAb4Sx/Y1BkToH/Egf1hbOgfefaX\nqzLsZMaLxD1xBMjYSxgzyq2bMg9VfNI/5458ytFLtG85tvXfcvtGvg9/wC7rgD6jn3324b6qp/1V\nPUgZ++jPuFvpZ5vkUY81S13aUJ8xQRcdxyltzPGbuuhhm3zkHF/jmXa1RR+AcuxAtqcM9/R3ylzT\nL2zQvmOQMUU9yPpn+oodrtyDNkv5CvyyEg4g4F0IiQvDBZELyw2UTTAX9b08s211eOAAMnmPwGbB\nxkVbK6Zt/YH09RGe1bbyM8bjM8Bfk34zNsr2LcuVSciwk2XW3407sabuyubqoKNdyTxlEv0y5rMd\nZWxn310D3FsHVvXMA/W9Zt5uLcJKf7bpFby3fXTTp5W9nS5X7a5k/ebquGQ52AZ2le/t75S5cp8y\nc+RBQlLP+vf0FZsc9lZ+lvLK/LKSDnDBTGb+vPftLDfNe3lm21MH2bJ7YSPggGAb84E1bXOvzvTj\nXp7V9vRj1rs6+jvfhjPtNvTs+072QWYdSFl4iPlJgOUrm5kH5iWZp+xDkpjmrTvLUuY6k/liXsqZ\nl/fWW+VNVvqSdblC3q90M/+WrtfMS1mdTFkO6qSceZOV/pS1kXLmSealDldZ1VdmPyAusqyUr8B6\n9QVu8PNkbj6bJ7AweFgmnPrzI9x7eWbb6KQfyG9dzPlgSqbtvJ9+PMpb255+zHpXR3+NBd8wV4c1\n86yzGwdlDwTaJh9SFh4MHJBsn/KVzfQTVrYyL2UfPrQDltnm9FO4J19u1VM/6ymr65pLVvqCnHZh\n2sSf9Gllb6fLVbsrOeslqWsbKVvvnv6mzJX7lDNPMk+de/sKxAZ5pXwVTkUzD34ehBwSWCRu9uSz\nKHybd/PknoXDlb+R5sHBjZ/8MzyrbRe+5OK+1yc+msWX2QZ2yMMWb7pubNnW9OOz2p5+pB7wQCTN\nTf0q6G9u3sQJiTzGArhnnCi3juPEWOam7pioq57jkrKQ55xYrh1IWV0/lVnZMi9lfcxDFnOctukn\n68B+M/9ZDsjYIt+4yTFzrLJeyq45dDMu7PuuTfL0j3o55thkTNKno/anrvaPZHQZL9q+Z11Qb9Xf\n1NnFElftK+cY3PLjbF8Ze6B/1i3lK3AqmlkAvr2RWAjms3DIy4crm6j51HMBAQvTsjM8q22u2Say\n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\nciH+7d/+fxweby6X4jE2AAAAAElFTkSuQmCC\n", 1001 | "prompt_number": 67, 1002 | "text": [ 1003 | "" 1004 | ] 1005 | } 1006 | ], 1007 | "prompt_number": 67 1008 | }, 1009 | { 1010 | "cell_type": "code", 1011 | "collapsed": false, 1012 | "input": [ 1013 | "#List of binary functions available\n", 1014 | "from IPython.display import Image \n", 1015 | "l = Image(filename='binary functions.png')\n", 1016 | "l\n", 1017 | "#logical operators , and greater, greater_equal,less, less_equal, equal, not_equal operations can also be performed" 1018 | ], 1019 | "language": "python", 1020 | "metadata": {}, 1021 | "outputs": [ 1022 | { 1023 | "metadata": {}, 1024 | "output_type": "pyout", 1025 | "png": "iVBORw0KGgoAAAANSUhEUgAAAdQAAADrCAYAAADQfGegAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\njwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAADjJSURBVHhe7Z29jmQ71YbPPRFxDYTE5ERcABIX\ngMiRSElICJFIIUWESCQkBGSkxOfjmXMe5p312buqund1V/W8j2R52V5e/lu2964Z9f7m21JKKaW8\nmm/+9a9/fdvQ0NDQ0NDwutALtaGhoaGh4YTQC7WhoaGhoeGE0Au1oaGhoaHhhNALtaGhoaGh4YTQ\nC7WhoaGhoeGE0Au1oaGhoaHhhNALtaGhoaGh4YTQC7WhoaGhoeGEcHihfvPNN1+Ev/3tb0u914Sf\n/exn3/7yl79cljU0zPCTn/zkky/+4Ac/+OQ7f/nLX5Z6Lw23+iO61FmVNTQ0fF3h4oX6ox/96Nvf\n/va3n8I//vGPpd4tgUsZW6Z7oTbcEtInuVQJZ/il4Rp/5BL//e9//0nuhdrQ0GC4eKGefVhgD7ur\nsoaGSyF9kkuNdD6gvUW4x75oaGh4/nDzhZp5K5k3Bt4g/Hn4j3/846c05Rx8xIY///nP/6uHLuXo\nYsNDkjJ+5iOQjz3yG77OkP7CmynpX/ziF5/SvC3iI5RTRtAnf/3rX3/SSX/U/6iPzvRHZW2SR0y+\nwbT90Rb5vjmrp2/XhxsaPma4+idff+LycFjJBA41Y34aQ+Yy5EAj7b+BcXh5IGLDwww9AjIHD2XI\nHpb0x/41fH1Bf5lpH9bwGfyEiy39CP+a/qj/EfAry6dPY4uYPZA2sKl/oq/v++ZMOu3Yn/pwQ8PH\nDFf/pyQPAeQ8cI5kD5j8z0x5AKWuhxaHnAcdeak/6zZ8fUF/mWkuOAJ5viXmhUr+yh9J5wWX9pXT\nH6cOMWlk7NgHYvpwpN/Q0PCxwuk/+aZMQLYuYebtdFf5U6fh6wv6BTIXI2kvyhm4CLnYkHlrXPkP\nae3N9DUyMemX5Dc0NHyscNcL1bfOvqE2nBX0F+T5My9viPwMa7COb4srf0x7M6187RsqbeQb6upX\nndRvaGj4WOHmC9Unft8KLF/JHGrI1PHfrDzU8t+w0OVQNN+f6ua/UaXc8HUG1p+LSh/xAtMfeRPF\nb/i3TmL8ystt5Y+k9Vvtm0Ym6LP+dMzFSZhvvdkHYtLTZn24oeHjhpsvVN8GPKTy8FnJvEV4AHHI\n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\n", 1026 | "prompt_number": 69, 1027 | "text": [ 1028 | "" 1029 | ] 1030 | } 1031 | ], 1032 | "prompt_number": 69 1033 | }, 1034 | { 1035 | "cell_type": "markdown", 1036 | "metadata": {}, 1037 | "source": [ 1038 | "#Data processing using Arrays" 1039 | ] 1040 | }, 1041 | { 1042 | "cell_type": "code", 1043 | "collapsed": false, 1044 | "input": [ 1045 | "mtrices =np.arange(-5,5,1)\n", 1046 | "x, y = np.meshgrid(mtrices, mtrices) #mesh grid function takes two 1 d arrays and produces two 2d arrays\n", 1047 | "print \"Matrix values of y: {}\".format(y)\n", 1048 | "print \"Matrix values of x: {}\".format(x)" 1049 | ], 1050 | "language": "python", 1051 | "metadata": {}, 1052 | "outputs": [ 1053 | { 1054 | "output_type": "stream", 1055 | "stream": "stdout", 1056 | "text": [ 1057 | "Matrix values of y: [[-5 -5 -5 -5 -5 -5 -5 -5 -5 -5]\n", 1058 | " [-4 -4 -4 -4 -4 -4 -4 -4 -4 -4]\n", 1059 | " [-3 -3 -3 -3 -3 -3 -3 -3 -3 -3]\n", 1060 | " [-2 -2 -2 -2 -2 -2 -2 -2 -2 -2]\n", 1061 | " [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1]\n", 1062 | " [ 0 0 0 0 0 0 0 0 0 0]\n", 1063 | " [ 1 1 1 1 1 1 1 1 1 1]\n", 1064 | " [ 2 2 2 2 2 2 2 2 2 2]\n", 1065 | " [ 3 3 3 3 3 3 3 3 3 3]\n", 1066 | " [ 4 4 4 4 4 4 4 4 4 4]]\n", 1067 | "Matrix values of x: [[-5 -4 -3 -2 -1 0 1 2 3 4]\n", 1068 | " [-5 -4 -3 -2 -1 0 1 2 3 4]\n", 1069 | " [-5 -4 -3 -2 -1 0 1 2 3 4]\n", 1070 | " [-5 -4 -3 -2 -1 0 1 2 3 4]\n", 1071 | " [-5 -4 -3 -2 -1 0 1 2 3 4]\n", 1072 | " [-5 -4 -3 -2 -1 0 1 2 3 4]\n", 1073 | " [-5 -4 -3 -2 -1 0 1 2 3 4]\n", 1074 | " [-5 -4 -3 -2 -1 0 1 2 3 4]\n", 1075 | " [-5 -4 -3 -2 -1 0 1 2 3 4]\n", 1076 | " [-5 -4 -3 -2 -1 0 1 2 3 4]]\n" 1077 | ] 1078 | } 1079 | ], 1080 | "prompt_number": 86 1081 | }, 1082 | { 1083 | "cell_type": "markdown", 1084 | "metadata": {}, 1085 | "source": [ 1086 | "[zip](http://stackoverflow.com/questions/13704860/zip-lists-in-python) function is clearly explained here." 1087 | ] 1088 | }, 1089 | { 1090 | "cell_type": "code", 1091 | "collapsed": false, 1092 | "input": [ 1093 | "x1= np.array([1,2,3,4,5])\n", 1094 | "y1 = np.array([6,7,8,9,10])\n", 1095 | "cond =[True, False, True, True, False]\n", 1096 | "#If you want to take a value from x1 whenever the corresponding value in cond is true, otherwise take value from y.\n", 1097 | "z1 = [(x,y,z) for x,y,z in zip(x1, y1, cond)] # I have used zip function To illustrate the concept\n", 1098 | "print z1\n", 1099 | "np.where(cond, x1, y1) " 1100 | ], 1101 | "language": "python", 1102 | "metadata": {}, 1103 | "outputs": [ 1104 | { 1105 | "output_type": "stream", 1106 | "stream": "stdout", 1107 | "text": [ 1108 | "[(1, 6, True), (2, 7, False), (3, 8, True), (4, 9, True), (5, 10, False)]\n" 1109 | ] 1110 | }, 1111 | { 1112 | "metadata": {}, 1113 | "output_type": "pyout", 1114 | "prompt_number": 124, 1115 | "text": [ 1116 | "array([ 1, 7, 3, 4, 10])" 1117 | ] 1118 | } 1119 | ], 1120 | "prompt_number": 124 1121 | }, 1122 | { 1123 | "cell_type": "code", 1124 | "collapsed": false, 1125 | "input": [ 1126 | "ra = np.random.randn(5,5)\n", 1127 | "# If you want to replace negative values in ra with -1 and positive values with 1. You can do it using where function\n", 1128 | "print ra\n", 1129 | "print np.where(ra>0, 1, -1) # If values in ra are greater than zero, replace it with 1, else replace it with -1.\n", 1130 | "# to set only positive values\n", 1131 | "np.where(ra >0, 1, ra) # same implies to negative values" 1132 | ], 1133 | "language": "python", 1134 | "metadata": {}, 1135 | "outputs": [ 1136 | { 1137 | "output_type": "stream", 1138 | "stream": "stdout", 1139 | "text": [ 1140 | "[[-0.91593384 0.38253326 -0.13340929 -0.12353528 -0.90849552]\n", 1141 | " [ 2.23109011 -0.7980066 0.13600282 -0.2447923 1.32865533]\n", 1142 | " [-0.65568719 -1.48154609 0.8033841 -0.84157511 -0.19588005]\n", 1143 | " [ 1.42527047 0.63082249 -0.80092209 -0.69935209 0.20470869]\n", 1144 | " [ 0.18245815 -0.99953295 0.05586992 0.38031972 0.60522581]]\n", 1145 | "[[-1 1 -1 -1 -1]\n", 1146 | " [ 1 -1 1 -1 1]\n", 1147 | " [-1 -1 1 -1 -1]\n", 1148 | " [ 1 1 -1 -1 1]\n", 1149 | " [ 1 -1 1 1 1]]\n" 1150 | ] 1151 | }, 1152 | { 1153 | "metadata": {}, 1154 | "output_type": "pyout", 1155 | "prompt_number": 132, 1156 | "text": [ 1157 | "array([[-0.91593384, 1. , -0.13340929, -0.12353528, -0.90849552],\n", 1158 | " [ 1. , -0.7980066 , 1. , -0.2447923 , 1. ],\n", 1159 | " [-0.65568719, -1.48154609, 1. , -0.84157511, -0.19588005],\n", 1160 | " [ 1. , 1. , -0.80092209, -0.69935209, 1. ],\n", 1161 | " [ 1. , -0.99953295, 1. , 1. , 1. ]])" 1162 | ] 1163 | } 1164 | ], 1165 | "prompt_number": 132 1166 | }, 1167 | { 1168 | "cell_type": "markdown", 1169 | "metadata": {}, 1170 | "source": [ 1171 | "# Statistical methods" 1172 | ] 1173 | }, 1174 | { 1175 | "cell_type": "code", 1176 | "collapsed": false, 1177 | "input": [ 1178 | "thie = np.random.randn(5,5)\n", 1179 | "print thie.mean() # calculates the mean of thie\n", 1180 | "print np.mean(thie) # alternate method to calculate mean\n", 1181 | "print thie.sum()" 1182 | ], 1183 | "language": "python", 1184 | "metadata": {}, 1185 | "outputs": [ 1186 | { 1187 | "output_type": "stream", 1188 | "stream": "stdout", 1189 | "text": [ 1190 | "0.286291297223\n", 1191 | "0.286291297223\n", 1192 | "7.15728243058\n" 1193 | ] 1194 | } 1195 | ], 1196 | "prompt_number": 136 1197 | }, 1198 | { 1199 | "cell_type": "code", 1200 | "collapsed": false, 1201 | "input": [ 1202 | "jp =np.arange(12).reshape(4,3)\n", 1203 | "print\"The arrays are: {}\".format(jp)\n", 1204 | "print \"The sum of rows are :{}\".format(np.sum(jp, axis =0)) #axis =0, gives you sum of the columns. axis =1 , gives sum of rows.\n", 1205 | "# remember this zero is for columns and one is for rows." 1206 | ], 1207 | "language": "python", 1208 | "metadata": {}, 1209 | "outputs": [ 1210 | { 1211 | "output_type": "stream", 1212 | "stream": "stdout", 1213 | "text": [ 1214 | "The arrays are: [[ 0 1 2]\n", 1215 | " [ 3 4 5]\n", 1216 | " [ 6 7 8]\n", 1217 | " [ 9 10 11]]\n", 1218 | "The sum of rows are :[18 22 26]\n" 1219 | ] 1220 | } 1221 | ], 1222 | "prompt_number": 36 1223 | }, 1224 | { 1225 | "cell_type": "code", 1226 | "collapsed": false, 1227 | "input": [ 1228 | "print jp.sum(1)#returns sum of rows" 1229 | ], 1230 | "language": "python", 1231 | "metadata": {}, 1232 | "outputs": [ 1233 | { 1234 | "output_type": "stream", 1235 | "stream": "stdout", 1236 | "text": [ 1237 | "[ 3 12 21 30]\n" 1238 | ] 1239 | } 1240 | ], 1241 | "prompt_number": 35 1242 | }, 1243 | { 1244 | "cell_type": "code", 1245 | "collapsed": false, 1246 | "input": [ 1247 | "jp.cumsum(0) #cumulative sum of columns, try the same for jp.cumprod(0)" 1248 | ], 1249 | "language": "python", 1250 | "metadata": {}, 1251 | "outputs": [ 1252 | { 1253 | "metadata": {}, 1254 | "output_type": "pyout", 1255 | "prompt_number": 37, 1256 | "text": [ 1257 | "array([[ 0, 1, 2],\n", 1258 | " [ 3, 5, 7],\n", 1259 | " [ 9, 12, 15],\n", 1260 | " [18, 22, 26]])" 1261 | ] 1262 | } 1263 | ], 1264 | "prompt_number": 37 1265 | }, 1266 | { 1267 | "cell_type": "code", 1268 | "collapsed": false, 1269 | "input": [ 1270 | "jp.cumsum(1)#cumulative sum of rows" 1271 | ], 1272 | "language": "python", 1273 | "metadata": {}, 1274 | "outputs": [ 1275 | { 1276 | "metadata": {}, 1277 | "output_type": "pyout", 1278 | "prompt_number": 38, 1279 | "text": [ 1280 | "array([[ 0, 1, 3],\n", 1281 | " [ 3, 7, 12],\n", 1282 | " [ 6, 13, 21],\n", 1283 | " [ 9, 19, 30]])" 1284 | ] 1285 | } 1286 | ], 1287 | "prompt_number": 38 1288 | }, 1289 | { 1290 | "cell_type": "code", 1291 | "collapsed": false, 1292 | "input": [ 1293 | "xp =np.random.randn(100)\n", 1294 | "print(xp > 0).sum() # sum of all positive values\n", 1295 | "print (xp < 0).sum()\n", 1296 | "tandf =np.array([True,False,True,False,True,False])\n", 1297 | "print tandf.any()#checks if any of the values are true\n", 1298 | "print tandf.all() #returns false even if a single value is false\n", 1299 | "#These methods also work with non-boolean arrays, where non-zero elements evaluate to True." 1300 | ], 1301 | "language": "python", 1302 | "metadata": {}, 1303 | "outputs": [ 1304 | { 1305 | "output_type": "stream", 1306 | "stream": "stdout", 1307 | "text": [ 1308 | "45\n", 1309 | "55\n", 1310 | "True\n", 1311 | "False\n" 1312 | ] 1313 | } 1314 | ], 1315 | "prompt_number": 47 1316 | }, 1317 | { 1318 | "cell_type": "markdown", 1319 | "metadata": {}, 1320 | "source": [ 1321 | "Other array functions are:
    \n", 1322 | "std, var -> standard deviation and variance
    \n", 1323 | "min, max -> Minimum and Maximum
    \n", 1324 | "argmin, argmax -> Indices of minimum and maximum elements" 1325 | ] 1326 | }, 1327 | { 1328 | "cell_type": "markdown", 1329 | "metadata": {}, 1330 | "source": [ 1331 | "#Sorting" 1332 | ] 1333 | }, 1334 | { 1335 | "cell_type": "code", 1336 | "collapsed": false, 1337 | "input": [ 1338 | "lp = np.random.randn(8)\n", 1339 | "print lp\n", 1340 | "lp.sort()\n", 1341 | "lp" 1342 | ], 1343 | "language": "python", 1344 | "metadata": {}, 1345 | "outputs": [ 1346 | { 1347 | "output_type": "stream", 1348 | "stream": "stdout", 1349 | "text": [ 1350 | "[-0.38465299 -0.84381465 -1.78393531 -0.80242681 -2.54136215 -0.47354742\n", 1351 | " -1.17517075 0.23759082]\n" 1352 | ] 1353 | }, 1354 | { 1355 | "metadata": {}, 1356 | "output_type": "pyout", 1357 | "prompt_number": 55, 1358 | "text": [ 1359 | "array([-2.54136215, -1.78393531, -1.17517075, -0.84381465, -0.80242681,\n", 1360 | " -0.47354742, -0.38465299, 0.23759082])" 1361 | ] 1362 | } 1363 | ], 1364 | "prompt_number": 55 1365 | }, 1366 | { 1367 | "cell_type": "code", 1368 | "collapsed": false, 1369 | "input": [ 1370 | "tp = np.random.randn(4,4)\n", 1371 | "tp" 1372 | ], 1373 | "language": "python", 1374 | "metadata": {}, 1375 | "outputs": [ 1376 | { 1377 | "metadata": {}, 1378 | "output_type": "pyout", 1379 | "prompt_number": 57, 1380 | "text": [ 1381 | "array([[ 0.4968525 , -0.65497365, -0.43687651, 0.51706412],\n", 1382 | " [-1.39148137, -0.0166924 , -0.82572908, 2.20839298],\n", 1383 | " [-0.5400157 , -0.8311936 , -1.92611011, 0.04556166],\n", 1384 | " [ 0.41679611, -1.1659837 , -1.7181857 , 0.15529182]])" 1385 | ] 1386 | } 1387 | ], 1388 | "prompt_number": 57 1389 | }, 1390 | { 1391 | "cell_type": "code", 1392 | "collapsed": false, 1393 | "input": [ 1394 | "tp.sort(1) #check the rows are sorted\n", 1395 | "tp" 1396 | ], 1397 | "language": "python", 1398 | "metadata": {}, 1399 | "outputs": [ 1400 | { 1401 | "metadata": {}, 1402 | "output_type": "pyout", 1403 | "prompt_number": 60, 1404 | "text": [ 1405 | "array([[-0.65497365, -0.43687651, 0.4968525 , 0.51706412],\n", 1406 | " [-1.39148137, -0.82572908, -0.0166924 , 2.20839298],\n", 1407 | " [-1.92611011, -0.8311936 , -0.5400157 , 0.04556166],\n", 1408 | " [-1.7181857 , -1.1659837 , 0.15529182, 0.41679611]])" 1409 | ] 1410 | } 1411 | ], 1412 | "prompt_number": 60 1413 | }, 1414 | { 1415 | "cell_type": "code", 1416 | "collapsed": false, 1417 | "input": [ 1418 | "personals = np.array(['Manu', 'Jeevan', 'Prakash', 'Manu', 'Prakash', 'Jeevan', 'Prakash'])\n", 1419 | "np.unique(personals)# returns the unique elements in the array" 1420 | ], 1421 | "language": "python", 1422 | "metadata": {}, 1423 | "outputs": [ 1424 | { 1425 | "metadata": {}, 1426 | "output_type": "pyout", 1427 | "prompt_number": 61, 1428 | "text": [ 1429 | "array(['Jeevan', 'Manu', 'Prakash'], \n", 1430 | " dtype='|S7')" 1431 | ] 1432 | } 1433 | ], 1434 | "prompt_number": 61 1435 | }, 1436 | { 1437 | "cell_type": "code", 1438 | "collapsed": false, 1439 | "input": [ 1440 | "set(personals) # set is an alternative to unique function" 1441 | ], 1442 | "language": "python", 1443 | "metadata": {}, 1444 | "outputs": [ 1445 | { 1446 | "metadata": {}, 1447 | "output_type": "pyout", 1448 | "prompt_number": 65, 1449 | "text": [ 1450 | "{'Jeevan', 'Manu', 'Prakash'}" 1451 | ] 1452 | } 1453 | ], 1454 | "prompt_number": 65 1455 | }, 1456 | { 1457 | "cell_type": "code", 1458 | "collapsed": false, 1459 | "input": [ 1460 | "np.in1d(personals, ['Manu']) #in1d function checks for the value 'Manu' and returns True, other wise returns False" 1461 | ], 1462 | "language": "python", 1463 | "metadata": {}, 1464 | "outputs": [ 1465 | { 1466 | "metadata": {}, 1467 | "output_type": "pyout", 1468 | "prompt_number": 67, 1469 | "text": [ 1470 | "array([ True, False, False, True, False, False, False], dtype=bool)" 1471 | ] 1472 | } 1473 | ], 1474 | "prompt_number": 67 1475 | }, 1476 | { 1477 | "cell_type": "markdown", 1478 | "metadata": {}, 1479 | "source": [ 1480 | " Other Functions are :
    \n", 1481 | "intersect1d(x, y)-> Compute the sorted, common elements in x and y
    \n", 1482 | "union1d(x,y) -> compute the sorted union of elements
    \n", 1483 | "setdiff1d(x,y) -> set difference, elements in x that are not in y
    \n", 1484 | "setxor1d(x, y) -> Set symmetric differences; elements that are in either of the arrays, but not both
    " 1485 | ] 1486 | }, 1487 | { 1488 | "cell_type": "markdown", 1489 | "metadata": {}, 1490 | "source": [ 1491 | "#Linear Algebra" 1492 | ] 1493 | }, 1494 | { 1495 | "cell_type": "code", 1496 | "collapsed": false, 1497 | "input": [ 1498 | "cp = np.array([[1,2,3],[4,5,6]])\n", 1499 | "dp = np.array([[7,8],[9,10],[11,12]])\n", 1500 | "print \"CP array :{}\".format(cp)\n", 1501 | "print \"DP array :{}\".format(dp)" 1502 | ], 1503 | "language": "python", 1504 | "metadata": {}, 1505 | "outputs": [ 1506 | { 1507 | "output_type": "stream", 1508 | "stream": "stdout", 1509 | "text": [ 1510 | "CP array :[[1 2 3]\n", 1511 | " [4 5 6]]\n", 1512 | "DP array :[[ 7 8]\n", 1513 | " [ 9 10]\n", 1514 | " [11 12]]\n" 1515 | ] 1516 | } 1517 | ], 1518 | "prompt_number": 75 1519 | }, 1520 | { 1521 | "cell_type": "code", 1522 | "collapsed": false, 1523 | "input": [ 1524 | "# element wise multiplication\n", 1525 | "cp.dot(dp) # this is equivalent to np.dot(x,y)" 1526 | ], 1527 | "language": "python", 1528 | "metadata": {}, 1529 | "outputs": [ 1530 | { 1531 | "metadata": {}, 1532 | "output_type": "pyout", 1533 | "prompt_number": 73, 1534 | "text": [ 1535 | "array([[ 58, 64],\n", 1536 | " [139, 154]])" 1537 | ] 1538 | } 1539 | ], 1540 | "prompt_number": 73 1541 | }, 1542 | { 1543 | "cell_type": "code", 1544 | "collapsed": false, 1545 | "input": [ 1546 | "np.dot(cp, np.ones(3)) " 1547 | ], 1548 | "language": "python", 1549 | "metadata": {}, 1550 | "outputs": [ 1551 | { 1552 | "metadata": {}, 1553 | "output_type": "pyout", 1554 | "prompt_number": 77, 1555 | "text": [ 1556 | "array([ 6., 15.])" 1557 | ] 1558 | } 1559 | ], 1560 | "prompt_number": 77 1561 | }, 1562 | { 1563 | "cell_type": "code", 1564 | "collapsed": false, 1565 | "input": [ 1566 | "# numpy.linalg has standard matrix operations like determinants and inverse.\n", 1567 | "from numpy.linalg import inv, qr\n", 1568 | "cp = np.array([[1,2,3],[4,5,6]])\n", 1569 | "new_mat = cp.T.dot(cp) # multiply cp inverse and cp, this is element wise multiplication\n", 1570 | "print new_mat" 1571 | ], 1572 | "language": "python", 1573 | "metadata": {}, 1574 | "outputs": [ 1575 | { 1576 | "output_type": "stream", 1577 | "stream": "stdout", 1578 | "text": [ 1579 | "[[17 22 27]\n", 1580 | " [22 29 36]\n", 1581 | " [27 36 45]]\n" 1582 | ] 1583 | } 1584 | ], 1585 | "prompt_number": 84 1586 | }, 1587 | { 1588 | "cell_type": "code", 1589 | "collapsed": false, 1590 | "input": [ 1591 | "sp = np.random.randn(5,5)\n", 1592 | "print inv(sp)\n", 1593 | "rt = inv(sp)" 1594 | ], 1595 | "language": "python", 1596 | "metadata": {}, 1597 | "outputs": [ 1598 | { 1599 | "output_type": "stream", 1600 | "stream": "stdout", 1601 | "text": [ 1602 | "[[ 8.42073934 -3.99404791 -1.02750024 -9.15141449 -11.83177632]\n", 1603 | " [ 0.99455489 0.12614541 0.97324631 0.13731371 1.83602625]\n", 1604 | " [ 7.22433965 -3.9236319 -1.72053933 -8.26352406 -11.80445805]\n", 1605 | " [ 4.35711911 -2.62701594 -0.75752399 -4.80133342 -6.89057351]\n", 1606 | " [ 4.97536913 -1.66709125 0.42132364 -4.00769704 -4.45711904]]\n" 1607 | ] 1608 | } 1609 | ], 1610 | "prompt_number": 90 1611 | }, 1612 | { 1613 | "cell_type": "code", 1614 | "collapsed": false, 1615 | "input": [ 1616 | "# to calculate the product of a matrix and its inverse\n", 1617 | "sp.dot(rt)" 1618 | ], 1619 | "language": "python", 1620 | "metadata": {}, 1621 | "outputs": [ 1622 | { 1623 | "metadata": {}, 1624 | "output_type": "pyout", 1625 | "prompt_number": 91, 1626 | "text": [ 1627 | "array([[ 1.00000000e+00, -6.66133815e-16, -3.88578059e-16,\n", 1628 | " -4.44089210e-16, -5.77315973e-15],\n", 1629 | " [ -8.88178420e-16, 1.00000000e+00, 1.11022302e-16,\n", 1630 | " 4.44089210e-16, 8.88178420e-16],\n", 1631 | " [ -2.66453526e-15, 2.22044605e-16, 1.00000000e+00,\n", 1632 | " -3.55271368e-15, 2.22044605e-15],\n", 1633 | " [ 8.88178420e-16, 0.00000000e+00, -1.11022302e-16,\n", 1634 | " 1.00000000e+00, -8.88178420e-16],\n", 1635 | " [ 0.00000000e+00, -6.66133815e-16, 1.66533454e-16,\n", 1636 | " 8.88178420e-16, 1.00000000e+00]])" 1637 | ] 1638 | } 1639 | ], 1640 | "prompt_number": 91 1641 | }, 1642 | { 1643 | "cell_type": "code", 1644 | "collapsed": false, 1645 | "input": [ 1646 | "q,r = qr(sp)\n", 1647 | "print q\n", 1648 | "r" 1649 | ], 1650 | "language": "python", 1651 | "metadata": {}, 1652 | "outputs": [ 1653 | { 1654 | "output_type": "stream", 1655 | "stream": "stdout", 1656 | "text": [ 1657 | "[[-0.50510571 0.0181599 0.07531349 0.59150958 -0.62368481]\n", 1658 | " [ 0.13921471 -0.40513763 0.84451738 0.24413444 0.20897736]\n", 1659 | " [ 0.53635022 -0.51829708 -0.46188958 0.47703793 -0.05281481]\n", 1660 | " [-0.66103319 -0.49468555 -0.25644088 0.01307464 0.50238278]\n", 1661 | " [ 0.02917284 0.56761612 -0.04488163 0.6023111 0.55871984]]\n" 1662 | ] 1663 | }, 1664 | { 1665 | "metadata": {}, 1666 | "output_type": "pyout", 1667 | "prompt_number": 95, 1668 | "text": [ 1669 | "array([[ 2.90927288, -0.76452754, -3.08539037, 0.77536573, -1.07156322],\n", 1670 | " [-0. , 2.28961296, 1.31005059, -0.44393071, -1.96748764],\n", 1671 | " [-0. , 0. , 1.48340931, -2.65558951, 0.18679631],\n", 1672 | " [ 0. , 0. , 0. , -0.37900614, 0.4507976 ],\n", 1673 | " [-0. , -0. , -0. , -0. , -0.12535448]])" 1674 | ] 1675 | } 1676 | ], 1677 | "prompt_number": 95 1678 | }, 1679 | { 1680 | "cell_type": "code", 1681 | "collapsed": false, 1682 | "input": [], 1683 | "language": "python", 1684 | "metadata": {}, 1685 | "outputs": [] 1686 | }, 1687 | { 1688 | "cell_type": "markdown", 1689 | "metadata": {}, 1690 | "source": [ 1691 | "Other Matrix Functions
    \n", 1692 | "
  • diag : Return the diagonal (or off-diagonal) elements of a square matrix as a 1D array, or convert a 1D array into a square
    \n", 1693 | "matrix with zeros on the off-diagonal\n", 1694 | "
  • trace: Compute the sum of the diagonal elements\n", 1695 | "
  • det: Compute the matrix determinant\n", 1696 | "
  • eig: Compute the eigenvalues and eigenvectors of a square matrix\n", 1697 | "
  • pinv: Compute the pseudo-inverse of a square matrix\n", 1698 | "
  • svd: Compute the singular value decomposition (SVD)\n", 1699 | "
  • solve: Solve the linear system Ax = b for x, where A is a square matrix\n", 1700 | "
  • lstsq: Compute the least-squares solution to y = Xb" 1701 | ] 1702 | } 1703 | ], 1704 | "metadata": {} 1705 | } 1706 | ] 1707 | } --------------------------------------------------------------------------------