Skip to content

Instantly share code, notes, and snippets.

@manujeevanprakash
Created October 31, 2014 14:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save manujeevanprakash/7e47301f0b50a98232ca to your computer and use it in GitHub Desktop.
Save manujeevanprakash/7e47301f0b50a98232ca to your computer and use it in GitHub Desktop.
Basics of Numpy
{
"metadata": {
"name": "",
"signature": "sha256:9d1a691e6a10ffdffa419c479c8bb56f33de1f4485cbaf78a2779853a120b619"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To know about Numpy check my [blog](http://www.bigdataexaminer.com/5-amazingly-powerful-python-libraries-for-data-science/)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#N- Dimensional array\n",
"\n",
"Arrays allows you to perform mathematical operations on whole blocks of data."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# easiest way to create an array is by using an array function\n",
"import numpy as np # I am importing numpy as np\n",
"\n",
"scores = [89,56.34, 76,89, 98]\n",
"first_arr =np.array(scores)\n",
"print first_arr\n",
"print first_arr.dtype # .dtype return the data type of the array object"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 89. 56.34 76. 89. 98. ]\n",
"float64\n"
]
}
],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Nested lists with equal length, will be converted into a multidimensional array\n",
"scores_1 = [[34,56,23,89], [11,45,76,34]]\n",
"second_arr = np.array(scores_1)\n",
"print second_arr\n",
"print second_arr.ndim #.ndim gives you the dimensions of an array.\n",
"print second_arr.shape #(number of rows, number of columns)\n",
"print second_arr.dtype "
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[34 56 23 89]\n",
" [11 45 76 34]]\n",
"2\n",
"(2L, 4L)\n",
"int32\n"
]
}
],
"prompt_number": 22
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x = np.zeros(10) # returns a array of zeros, the same applies for np.ones(10)\n",
"x"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 28,
"text": [
"array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])"
]
}
],
"prompt_number": 28
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"np.zeros((4,3)) # you can also mention the shape of the array"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 30,
"text": [
"array([[ 0., 0., 0.],\n",
" [ 0., 0., 0.],\n",
" [ 0., 0., 0.],\n",
" [ 0., 0., 0.]])"
]
}
],
"prompt_number": 30
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"np.arange(15)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 34,
"text": [
"array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])"
]
}
],
"prompt_number": 34
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"np.eye(6) # Create a square N x N identity matrix (1\u2019s on the diagonal and 0\u2019s elsewhere)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 36,
"text": [
"array([[ 1., 0., 0., 0., 0., 0.],\n",
" [ 0., 1., 0., 0., 0., 0.],\n",
" [ 0., 0., 1., 0., 0., 0.],\n",
" [ 0., 0., 0., 1., 0., 0.],\n",
" [ 0., 0., 0., 0., 1., 0.],\n",
" [ 0., 0., 0., 0., 0., 1.]])"
]
}
],
"prompt_number": 36
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#Batch operations on data can be performed without using for loops, this is called vectorization\n",
"scores = [89,56.34, 76,89, 98]\n",
"first_arr =np.array(scores)\n",
"print first_arr\n",
"print first_arr * first_arr\n",
"print first_arr - first_arr\n",
"print 1/(first_arr)\n",
"print first_arr ** 0.5"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 89. 56.34 76. 89. 98. ]\n",
"[ 7921. 3174.1956 5776. 7921. 9604. ]\n",
"[ 0. 0. 0. 0. 0.]\n",
"[ 0.01123596 0.01774938 0.01315789 0.01123596 0.01020408]\n",
"[ 9.43398113 7.5059976 8.71779789 9.43398113 9.89949494]\n"
]
}
],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#Indexing and Slicing"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# you may want to select a subset of your data, for which Numpy array indexing is really useful\n",
"new_arr = np.arange(12)\n",
"print new_arr\n",
"print new_arr[5]\n",
"print new_arr[4:9]\n",
"new_arr[4:9] = 99 #assign sequence of values from 4 to 9 as 99\n",
"print new_arr"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 0 1 2 3 4 5 6 7 8 9 10 11]\n",
"5\n",
"[4 5 6 7 8]\n",
"[ 0 1 2 3 99 99 99 99 99 9 10 11]\n"
]
}
],
"prompt_number": 26
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# A major diffence between lists and array is that, array slices are views on the original array. This means that\n",
"# the data is not copied, and any modifications to the view will be reflected in the source\n",
"# array. \n",
"modi_arr = new_arr[4:9] \n",
"modi_arr[1] = 123456\n",
"print new_arr # you can see the changes are refelected in main array. \n",
"modi_arr[:] # the sliced variable\n",
" "
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 0 1 2 3 99 123456 99 99 99 9\n",
" 10 11]\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 27,
"text": [
"array([ 99, 123456, 99, 99, 99])"
]
}
],
"prompt_number": 27
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# arrays can be treated like matrices\n",
"matrix_arr =np.array([[3,4,5],[6,7,8],[9,5,1]])\n",
"print matrix_arr\n",
"print matrix_arr[1]\n",
"print matrix_arr[0][2] #first row and third column\n",
"print matrix_arr[0,2] # This is same as the above operation\n",
"\n",
"from IPython.display import Image # importing a image from my computer.\n",
"i = Image(filename='Capture.png')\n",
"i # Blue print of a matrix "
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[3 4 5]\n",
" [6 7 8]\n",
" [9 5 1]]\n",
"[6 7 8]\n",
"5\n",
"5\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"png": "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\n",
"prompt_number": 9,
"text": [
"<IPython.core.display.Image at 0x4e41290>"
]
}
],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cd C:\\Users\\tk\\Desktop\\pics # changing my directory"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"C:\\Users\\tk\\Desktop\\pics\n"
]
}
],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# 3d arrays -> this is a 2x2x3 array\n",
"three_d_arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])\n",
"print three_d_arr\n",
"print \"returns the second list inside first list {}\".format(three_d_arr[0,1])\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[[ 1 2 3]\n",
" [ 4 5 6]]\n",
"\n",
" [[ 7 8 9]\n",
" [10 11 12]]]\n",
"returns the second list inside first list [4 5 6]\n"
]
}
],
"prompt_number": 37
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"three_d_arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])\n",
"print three_d_arr[0]\n",
"#if you omit later indices, the returned object will be a lowerdimensional\n",
"# ndarray consisting of all the data along the higher dimensions"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[1 2 3]\n",
" [4 5 6]]\n"
]
}
],
"prompt_number": 39
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I have used [format](https://docs.python.org/2/tutorial/inputoutput.html) function in the below cell."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"copied_values = three_d_arr[0].copy() # copy arr[0] value to copied_values\n",
"three_d_arr[0]= 99 # change all values of arr[0] to 99 \n",
"print \"New value of three_d_arr: {}\".format(three_d_arr) # check the new value of three_d_arr \n",
"three_d_arr[0] = copied_values # assign copied values back to three_d_arr[0]\n",
"print\" three_d_arr again: {}\".format(three_d_arr)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"New value of three_d_arr: [[[99 99 99]\n",
" [99 99 99]]\n",
"\n",
" [[ 7 8 9]\n",
" [10 11 12]]]\n",
" three_d_arr again: [[[99 99 99]\n",
" [99 99 99]]\n",
"\n",
" [[ 7 8 9]\n",
" [10 11 12]]]\n"
]
}
],
"prompt_number": 62
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"matrix_arr =np.array([[3,4,5],[6,7,8],[9,5,1]])\n",
"print \"The original matrix {}:\".format(matrix_arr)\n",
"print \"slices the first two rows:{}\".format(matrix_arr[:2]) # similar to list slicing. returns first two rows of the array\n",
"print \"Slices the first two rows and two columns:{}\".format(matrix_arr[:2, 1:])\n",
"print \"returns 6 and 7: {}\".format(matrix_arr[1,:2])\n",
"print \"Returns first column: {}\".format(matrix_arr[:,:1]) #Note that a colon by itself means to take the entire axis"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"The original matrix [[3 4 5]\n",
" [6 7 8]\n",
" [9 5 1]]:\n",
"slices the first two rows:[[3 4 5]\n",
" [6 7 8]]\n",
"Slices the first two rows and two columns:[[4 5]\n",
" [7 8]]\n",
"returns 6 and 7: [6 7]\n",
"Returns first column: [[3]\n",
" [6]\n",
" [9]]\n"
]
}
],
"prompt_number": 76
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import Image # importing a image from my computer.\n",
"j = Image(filename='Expre.png')\n",
"j # diagrammatic explanation of matrix array slicing works."
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"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",
"prompt_number": 80,
"text": [
"<IPython.core.display.Image at 0x3ab2ba8>"
]
}
],
"prompt_number": 80
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#Import random module from Numpy \n",
"personals = np.array(['Manu', 'Jeevan', 'Prakash', 'Manu', 'Prakash', 'Jeevan', 'Prakash'])\n",
"print personals == 'Manu' #checks for the string 'Manu' in personals. If present it returns true; else false#"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ True False False True False False False]\n"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from numpy import random \n",
"random_no = random.randn(7,4)\n",
"print random_no\n",
"random_no[personals =='Manu'] #The function returns the rows for which the value of manu is true\n",
"# Check the image displayed in the cell below. "
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[-0.129557 0.3684001 -0.15747451 -0.1196816 ]\n",
" [-0.35946571 -1.23477985 1.08186057 -0.61596683]\n",
" [ 1.67096505 1.11183755 -0.39640455 0.22848279]\n",
" [-0.27989438 -1.51275966 -0.48825407 1.32425359]\n",
" [-0.04493194 -1.10371501 -0.52742166 -1.06265549]\n",
" [ 1.16938298 -0.60478133 1.40615125 -1.35350336]\n",
" [ 0.86325448 1.97577081 0.05339779 0.71515521]]\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"array([[-0.129557 , 0.3684001 , -0.15747451, -0.1196816 ],\n",
" [-0.27989438, -1.51275966, -0.48825407, 1.32425359]])"
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cd C:\\Users\\Manu\\Desktop \n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"C:\\Users\\Manu\\Desktop\n"
]
}
],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import Image\n",
"k = Image(filename='Matrix.png')\n",
"k"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"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",
"prompt_number": 11,
"text": [
"<IPython.core.display.Image at 0x3a034e0>"
]
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"random_no[personals == 'Manu', 2:] #First two columns and first two rows."
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 12,
"text": [
"array([[-0.15747451, -0.1196816 ],\n",
" [-0.48825407, 1.32425359]])"
]
}
],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# To select everything except 'Manu', you can != or negate the condition using -:\n",
"print personals != 'Manu'\n",
"random_no[-(personals == 'Manu')] #get everything except 1st and 4th rows"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[False True True False True True True]\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 13,
"text": [
"array([[-0.35946571, -1.23477985, 1.08186057, -0.61596683],\n",
" [ 1.67096505, 1.11183755, -0.39640455, 0.22848279],\n",
" [-0.04493194, -1.10371501, -0.52742166, -1.06265549],\n",
" [ 1.16938298, -0.60478133, 1.40615125, -1.35350336],\n",
" [ 0.86325448, 1.97577081, 0.05339779, 0.71515521]])"
]
}
],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# you can use boolean operator &(and), |(or)\n",
"new_variable = (personals == 'Manu') | (personals == 'Jeevan')\n",
"print new_variable\n",
"random_no[new_variable] "
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ True True False True False True False]\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 18,
"text": [
"array([[-0.129557 , 0.3684001 , -0.15747451, -0.1196816 ],\n",
" [-0.35946571, -1.23477985, 1.08186057, -0.61596683],\n",
" [-0.27989438, -1.51275966, -0.48825407, 1.32425359],\n",
" [ 1.16938298, -0.60478133, 1.40615125, -1.35350336]])"
]
}
],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"random_no[random_no < 0] =0 \n",
"random_no # This will set all negative values to zero"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 22,
"text": [
"array([[ 0. , 0.3684001 , 0. , 0. ],\n",
" [ 0. , 0. , 1.08186057, 0. ],\n",
" [ 1.67096505, 1.11183755, 0. , 0.22848279],\n",
" [ 0. , 0. , 0. , 1.32425359],\n",
" [ 0. , 0. , 0. , 0. ],\n",
" [ 1.16938298, 0. , 1.40615125, 0. ],\n",
" [ 0.86325448, 1.97577081, 0.05339779, 0.71515521]])"
]
}
],
"prompt_number": 22
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"random_no[ personals != 'Manu'] = 9 # This will set all rows except 1 and 4 to 9. \n",
"random_no"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 24,
"text": [
"array([[ 0. , 0.3684001 , 0. , 0. ],\n",
" [ 9. , 9. , 9. , 9. ],\n",
" [ 9. , 9. , 9. , 9. ],\n",
" [ 0. , 0. , 0. , 1.32425359],\n",
" [ 9. , 9. , 9. , 9. ],\n",
" [ 9. , 9. , 9. , 9. ],\n",
" [ 9. , 9. , 9. , 9. ]])"
]
}
],
"prompt_number": 24
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#Fancy Indexing(Indexing using integer arrays)\n",
"Fancy indexing copies data into a new array\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from numpy import random\n",
"algebra = random.randn(7,4) # empty will return a matrix of size 7,4\n",
"for j in range(7):\n",
" algebra[j] = j\n",
"algebra"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 19,
"text": [
"array([[ 0., 0., 0., 0.],\n",
" [ 1., 1., 1., 1.],\n",
" [ 2., 2., 2., 2.],\n",
" [ 3., 3., 3., 3.],\n",
" [ 4., 4., 4., 4.],\n",
" [ 5., 5., 5., 5.],\n",
" [ 6., 6., 6., 6.]])"
]
}
],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# To select a subset of rows in particular order, you can simply pass a list.\n",
"algebra[[4,5,1]] #returns a subset of rows"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 23,
"text": [
"array([[ 4., 4., 4., 4.],\n",
" [ 5., 5., 5., 5.],\n",
" [ 1., 1., 1., 1.]])"
]
}
],
"prompt_number": 23
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fancy = np.arange(36).reshape(9,4) #reshape is to reshape an array\n",
"print fancy\n",
"fancy[[1,4,3,2],[3,2,1,0]] #the position of the output array are[(1,3),(4,2),(3,1),(2,0)]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[ 0 1 2 3]\n",
" [ 4 5 6 7]\n",
" [ 8 9 10 11]\n",
" [12 13 14 15]\n",
" [16 17 18 19]\n",
" [20 21 22 23]\n",
" [24 25 26 27]\n",
" [28 29 30 31]\n",
" [32 33 34 35]]\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 33,
"text": [
"array([ 7, 18, 13, 8])"
]
}
],
"prompt_number": 33
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"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."
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 39,
"text": [
"array([[ 4, 7, 5, 6],\n",
" [16, 19, 17, 18],\n",
" [32, 35, 33, 34],\n",
" [ 8, 11, 9, 10]])"
]
}
],
"prompt_number": 39
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# another way to do the above operation is by using np.ix_ function.\n",
"fancy[np.ix_([1,4,8,2],[0,3,1,2])]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 42,
"text": [
"array([[ 4, 7, 5, 6],\n",
" [16, 19, 17, 18],\n",
" [32, 35, 33, 34],\n",
" [ 8, 11, 9, 10]])"
]
}
],
"prompt_number": 42
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#Transposing Arrays"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"transpose= np.arange(12).reshape(3,4) \n",
"transpose.T # the shape has changed to 4,3"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 47,
"text": [
"array([[ 0, 4, 8],\n",
" [ 1, 5, 9],\n",
" [ 2, 6, 10],\n",
" [ 3, 7, 11]])"
]
}
],
"prompt_number": 47
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#you can use np.dot function to perform matrix computations. You can calculate X transpose X as follows:\n",
"np.dot(transpose.T, transpose)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 48,
"text": [
"array([[ 80, 92, 104, 116],\n",
" [ 92, 107, 122, 137],\n",
" [104, 122, 140, 158],\n",
" [116, 137, 158, 179]])"
]
}
],
"prompt_number": 48
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#universal functions\n",
"They perform element wise operations on data in arrays."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"funky =np.arange(8)\n",
"print np.sqrt(funky)\n",
"print np.exp(funky) #exponent of the array\n",
"# these are called as unary functions"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 0. 1. 1.41421356 1.73205081 2. 2.23606798\n",
" 2.44948974 2.64575131]\n",
"[ 1.00000000e+00 2.71828183e+00 7.38905610e+00 2.00855369e+01\n",
" 5.45981500e+01 1.48413159e+02 4.03428793e+02 1.09663316e+03]\n"
]
}
],
"prompt_number": 53
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Binary functions take two value, Others such as maximum, add\n",
"x = random.randn(10)\n",
"y = random.randn(10)\n",
"print x\n",
"print y\n",
"print np.maximum(x,y)# element wise operation\n",
"print np.modf(x)# function modf returns the fractional and integral parts of a floating point arrays"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[-0.47538326 -0.32308133 1.45505923 -0.53196376 -1.34427866 -2.14409558\n",
" -0.96296558 0.14068437 -0.29208196 -1.17537313]\n",
"[-1.68868842 -0.53788536 -1.01887225 -0.02972594 -1.04607062 -2.08636169\n",
" 0.34398903 -0.64183089 1.55401001 0.73270627]\n",
"[-0.47538326 -0.32308133 1.45505923 -0.02972594 -1.04607062 -2.08636169\n",
" 0.34398903 0.14068437 1.55401001 0.73270627]\n",
"(array([-0.47538326, -0.32308133, 0.45505923, -0.53196376, -0.34427866,\n",
" -0.14409558, -0.96296558, 0.14068437, -0.29208196, -0.17537313]), array([-0., -0., 1., -0., -1., -2., -0., 0., -0., -1.]))\n"
]
}
],
"prompt_number": 62
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# List of unary functions avaliable\n",
"from IPython.display import Image \n",
"l = Image(filename='unary functions.png')\n",
"l"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"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",
"prompt_number": 67,
"text": [
"<IPython.core.display.Image at 0x4eaf690>"
]
}
],
"prompt_number": 67
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#List of binary functions available\n",
"from IPython.display import Image \n",
"l = Image(filename='binary functions.png')\n",
"l\n",
"#logical operators , and greater, greater_equal,less, less_equal, equal, not_equal operations can also be performed"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"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",
"prompt_number": 69,
"text": [
"<IPython.core.display.Image at 0x4eafb50>"
]
}
],
"prompt_number": 69
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#Data processing using Arrays"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mtrices =np.arange(-5,5,1)\n",
"x, y = np.meshgrid(mtrices, mtrices) #mesh grid function takes two 1 d arrays and produces two 2d arrays\n",
"print \"Matrix values of y: {}\".format(y)\n",
"print \"Matrix values of x: {}\".format(x)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Matrix values of y: [[-5 -5 -5 -5 -5 -5 -5 -5 -5 -5]\n",
" [-4 -4 -4 -4 -4 -4 -4 -4 -4 -4]\n",
" [-3 -3 -3 -3 -3 -3 -3 -3 -3 -3]\n",
" [-2 -2 -2 -2 -2 -2 -2 -2 -2 -2]\n",
" [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1]\n",
" [ 0 0 0 0 0 0 0 0 0 0]\n",
" [ 1 1 1 1 1 1 1 1 1 1]\n",
" [ 2 2 2 2 2 2 2 2 2 2]\n",
" [ 3 3 3 3 3 3 3 3 3 3]\n",
" [ 4 4 4 4 4 4 4 4 4 4]]\n",
"Matrix values of x: [[-5 -4 -3 -2 -1 0 1 2 3 4]\n",
" [-5 -4 -3 -2 -1 0 1 2 3 4]\n",
" [-5 -4 -3 -2 -1 0 1 2 3 4]\n",
" [-5 -4 -3 -2 -1 0 1 2 3 4]\n",
" [-5 -4 -3 -2 -1 0 1 2 3 4]\n",
" [-5 -4 -3 -2 -1 0 1 2 3 4]\n",
" [-5 -4 -3 -2 -1 0 1 2 3 4]\n",
" [-5 -4 -3 -2 -1 0 1 2 3 4]\n",
" [-5 -4 -3 -2 -1 0 1 2 3 4]\n",
" [-5 -4 -3 -2 -1 0 1 2 3 4]]\n"
]
}
],
"prompt_number": 86
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[zip](http://stackoverflow.com/questions/13704860/zip-lists-in-python) function is clearly explained here."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x1= np.array([1,2,3,4,5])\n",
"y1 = np.array([6,7,8,9,10])\n",
"cond =[True, False, True, True, False]\n",
"#If you want to take a value from x1 whenever the corresponding value in cond is true, otherwise take value from y.\n",
"z1 = [(x,y,z) for x,y,z in zip(x1, y1, cond)] # I have used zip function To illustrate the concept\n",
"print z1\n",
"np.where(cond, x1, y1) "
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[(1, 6, True), (2, 7, False), (3, 8, True), (4, 9, True), (5, 10, False)]\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 124,
"text": [
"array([ 1, 7, 3, 4, 10])"
]
}
],
"prompt_number": 124
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ra = np.random.randn(5,5)\n",
"# If you want to replace negative values in ra with -1 and positive values with 1. You can do it using where function\n",
"print ra\n",
"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",
"# to set only positive values\n",
"np.where(ra >0, 1, ra) # same implies to negative values"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[-0.91593384 0.38253326 -0.13340929 -0.12353528 -0.90849552]\n",
" [ 2.23109011 -0.7980066 0.13600282 -0.2447923 1.32865533]\n",
" [-0.65568719 -1.48154609 0.8033841 -0.84157511 -0.19588005]\n",
" [ 1.42527047 0.63082249 -0.80092209 -0.69935209 0.20470869]\n",
" [ 0.18245815 -0.99953295 0.05586992 0.38031972 0.60522581]]\n",
"[[-1 1 -1 -1 -1]\n",
" [ 1 -1 1 -1 1]\n",
" [-1 -1 1 -1 -1]\n",
" [ 1 1 -1 -1 1]\n",
" [ 1 -1 1 1 1]]\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 132,
"text": [
"array([[-0.91593384, 1. , -0.13340929, -0.12353528, -0.90849552],\n",
" [ 1. , -0.7980066 , 1. , -0.2447923 , 1. ],\n",
" [-0.65568719, -1.48154609, 1. , -0.84157511, -0.19588005],\n",
" [ 1. , 1. , -0.80092209, -0.69935209, 1. ],\n",
" [ 1. , -0.99953295, 1. , 1. , 1. ]])"
]
}
],
"prompt_number": 132
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Statistical methods"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"thie = np.random.randn(5,5)\n",
"print thie.mean() # calculates the mean of thie\n",
"print np.mean(thie) # alternate method to calculate mean\n",
"print thie.sum()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"0.286291297223\n",
"0.286291297223\n",
"7.15728243058\n"
]
}
],
"prompt_number": 136
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"jp =np.arange(12).reshape(4,3)\n",
"print\"The arrays are: {}\".format(jp)\n",
"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",
"# remember this zero is for columns and one is for rows."
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"The arrays are: [[ 0 1 2]\n",
" [ 3 4 5]\n",
" [ 6 7 8]\n",
" [ 9 10 11]]\n",
"The sum of rows are :[18 22 26]\n"
]
}
],
"prompt_number": 36
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print jp.sum(1)#returns sum of rows"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 3 12 21 30]\n"
]
}
],
"prompt_number": 35
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"jp.cumsum(0) #cumulative sum of columns, try the same for jp.cumprod(0)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 37,
"text": [
"array([[ 0, 1, 2],\n",
" [ 3, 5, 7],\n",
" [ 9, 12, 15],\n",
" [18, 22, 26]])"
]
}
],
"prompt_number": 37
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"jp.cumsum(1)#cumulative sum of rows"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 38,
"text": [
"array([[ 0, 1, 3],\n",
" [ 3, 7, 12],\n",
" [ 6, 13, 21],\n",
" [ 9, 19, 30]])"
]
}
],
"prompt_number": 38
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"xp =np.random.randn(100)\n",
"print(xp > 0).sum() # sum of all positive values\n",
"print (xp < 0).sum()\n",
"tandf =np.array([True,False,True,False,True,False])\n",
"print tandf.any()#checks if any of the values are true\n",
"print tandf.all() #returns false even if a single value is false\n",
"#These methods also work with non-boolean arrays, where non-zero elements evaluate to True."
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"45\n",
"55\n",
"True\n",
"False\n"
]
}
],
"prompt_number": 47
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<b>Other array functions are:<br> </b>\n",
"std, var -> standard deviation and variance <br>\n",
"min, max -> Minimum and Maximum <br>\n",
"argmin, argmax -> Indices of minimum and maximum elements"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#Sorting"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"lp = np.random.randn(8)\n",
"print lp\n",
"lp.sort()\n",
"lp"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[-0.38465299 -0.84381465 -1.78393531 -0.80242681 -2.54136215 -0.47354742\n",
" -1.17517075 0.23759082]\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 55,
"text": [
"array([-2.54136215, -1.78393531, -1.17517075, -0.84381465, -0.80242681,\n",
" -0.47354742, -0.38465299, 0.23759082])"
]
}
],
"prompt_number": 55
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"tp = np.random.randn(4,4)\n",
"tp"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 57,
"text": [
"array([[ 0.4968525 , -0.65497365, -0.43687651, 0.51706412],\n",
" [-1.39148137, -0.0166924 , -0.82572908, 2.20839298],\n",
" [-0.5400157 , -0.8311936 , -1.92611011, 0.04556166],\n",
" [ 0.41679611, -1.1659837 , -1.7181857 , 0.15529182]])"
]
}
],
"prompt_number": 57
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"tp.sort(1) #check the rows are sorted\n",
"tp"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 60,
"text": [
"array([[-0.65497365, -0.43687651, 0.4968525 , 0.51706412],\n",
" [-1.39148137, -0.82572908, -0.0166924 , 2.20839298],\n",
" [-1.92611011, -0.8311936 , -0.5400157 , 0.04556166],\n",
" [-1.7181857 , -1.1659837 , 0.15529182, 0.41679611]])"
]
}
],
"prompt_number": 60
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"personals = np.array(['Manu', 'Jeevan', 'Prakash', 'Manu', 'Prakash', 'Jeevan', 'Prakash'])\n",
"np.unique(personals)# returns the unique elements in the array"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 61,
"text": [
"array(['Jeevan', 'Manu', 'Prakash'], \n",
" dtype='|S7')"
]
}
],
"prompt_number": 61
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"set(personals) # set is an alternative to unique function"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 65,
"text": [
"{'Jeevan', 'Manu', 'Prakash'}"
]
}
],
"prompt_number": 65
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"np.in1d(personals, ['Manu']) #in1d function checks for the value 'Manu' and returns True, other wise returns False"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 67,
"text": [
"array([ True, False, False, True, False, False, False], dtype=bool)"
]
}
],
"prompt_number": 67
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<b> Other Functions are :<br> </b>\n",
"intersect1d(x, y)-> Compute the sorted, common elements in x and y <br>\n",
"union1d(x,y) -> compute the sorted union of elements <br>\n",
"setdiff1d(x,y) -> set difference, elements in x that are not in y <br>\n",
"setxor1d(x, y) -> Set symmetric differences; elements that are in either of the arrays, but not both <br>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#Linear Algebra"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cp = np.array([[1,2,3],[4,5,6]])\n",
"dp = np.array([[7,8],[9,10],[11,12]])\n",
"print \"CP array :{}\".format(cp)\n",
"print \"DP array :{}\".format(dp)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"CP array :[[1 2 3]\n",
" [4 5 6]]\n",
"DP array :[[ 7 8]\n",
" [ 9 10]\n",
" [11 12]]\n"
]
}
],
"prompt_number": 75
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# element wise multiplication\n",
"cp.dot(dp) # this is equivalent to np.dot(x,y)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 73,
"text": [
"array([[ 58, 64],\n",
" [139, 154]])"
]
}
],
"prompt_number": 73
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"np.dot(cp, np.ones(3)) "
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 77,
"text": [
"array([ 6., 15.])"
]
}
],
"prompt_number": 77
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# numpy.linalg has standard matrix operations like determinants and inverse.\n",
"from numpy.linalg import inv, qr\n",
"cp = np.array([[1,2,3],[4,5,6]])\n",
"new_mat = cp.T.dot(cp) # multiply cp inverse and cp, this is element wise multiplication\n",
"print new_mat"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[17 22 27]\n",
" [22 29 36]\n",
" [27 36 45]]\n"
]
}
],
"prompt_number": 84
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sp = np.random.randn(5,5)\n",
"print inv(sp)\n",
"rt = inv(sp)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[ 8.42073934 -3.99404791 -1.02750024 -9.15141449 -11.83177632]\n",
" [ 0.99455489 0.12614541 0.97324631 0.13731371 1.83602625]\n",
" [ 7.22433965 -3.9236319 -1.72053933 -8.26352406 -11.80445805]\n",
" [ 4.35711911 -2.62701594 -0.75752399 -4.80133342 -6.89057351]\n",
" [ 4.97536913 -1.66709125 0.42132364 -4.00769704 -4.45711904]]\n"
]
}
],
"prompt_number": 90
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# to calculate the product of a matrix and its inverse\n",
"sp.dot(rt)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 91,
"text": [
"array([[ 1.00000000e+00, -6.66133815e-16, -3.88578059e-16,\n",
" -4.44089210e-16, -5.77315973e-15],\n",
" [ -8.88178420e-16, 1.00000000e+00, 1.11022302e-16,\n",
" 4.44089210e-16, 8.88178420e-16],\n",
" [ -2.66453526e-15, 2.22044605e-16, 1.00000000e+00,\n",
" -3.55271368e-15, 2.22044605e-15],\n",
" [ 8.88178420e-16, 0.00000000e+00, -1.11022302e-16,\n",
" 1.00000000e+00, -8.88178420e-16],\n",
" [ 0.00000000e+00, -6.66133815e-16, 1.66533454e-16,\n",
" 8.88178420e-16, 1.00000000e+00]])"
]
}
],
"prompt_number": 91
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"q,r = qr(sp)\n",
"print q\n",
"r"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[-0.50510571 0.0181599 0.07531349 0.59150958 -0.62368481]\n",
" [ 0.13921471 -0.40513763 0.84451738 0.24413444 0.20897736]\n",
" [ 0.53635022 -0.51829708 -0.46188958 0.47703793 -0.05281481]\n",
" [-0.66103319 -0.49468555 -0.25644088 0.01307464 0.50238278]\n",
" [ 0.02917284 0.56761612 -0.04488163 0.6023111 0.55871984]]\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 95,
"text": [
"array([[ 2.90927288, -0.76452754, -3.08539037, 0.77536573, -1.07156322],\n",
" [-0. , 2.28961296, 1.31005059, -0.44393071, -1.96748764],\n",
" [-0. , 0. , 1.48340931, -2.65558951, 0.18679631],\n",
" [ 0. , 0. , 0. , -0.37900614, 0.4507976 ],\n",
" [-0. , -0. , -0. , -0. , -0.12535448]])"
]
}
],
"prompt_number": 95
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<b>Other Matrix Functions</b> <br>\n",
"<li>diag : Return the diagonal (or off-diagonal) elements of a square matrix as a 1D array, or convert a 1D array into a square<br>\n",
"matrix with zeros on the off-diagonal\n",
"<li> trace: Compute the sum of the diagonal elements\n",
"<li> det: Compute the matrix determinant\n",
"<li> eig: Compute the eigenvalues and eigenvectors of a square matrix\n",
"<li> pinv: Compute the pseudo-inverse of a square matrix\n",
"<li> svd: Compute the singular value decomposition (SVD)\n",
"<li> solve: Solve the linear system Ax = b for x, where A is a square matrix\n",
"<li> lstsq: Compute the least-squares solution to y = Xb"
]
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment