data-science-ipython-notebooks/numpy/numpy.ipynb

667 lines
65 KiB
Plaintext
Raw Normal View History

{
"metadata": {
"name": "",
"signature": "sha256:3968461b55764bd352e164c8cf911ac5515f1616c26827bf2eadf78953616464"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# NumPy\n",
"\n",
"* NumPy Arrays, dtype, and shape\n",
"* Common Array Operations\n",
"* Reshape and Update In-Place\n",
"* Combine Arrays\n",
"* Create Sample Data"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## NumPy Arrays, dtypes, and shapes"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = np.array([1, 2, 3])\n",
"print(a)\n",
"print(a.shape)\n",
"print(a.dtype)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[1 2 3]\n",
"(3,)\n",
"int64\n"
]
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"b = np.array([[0, 2, 4], [1, 3, 5]])\n",
"print(b)\n",
"print(b.shape)\n",
"print(b.dtype)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[0 2 4]\n",
" [1 3 5]]\n",
"(2, 3)\n",
"int64\n"
]
}
],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"np.zeros(5)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": [
"array([ 0., 0., 0., 0., 0.])"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"np.ones(shape=(3, 4), dtype=np.int32)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"array([[1, 1, 1, 1],\n",
" [1, 1, 1, 1],\n",
" [1, 1, 1, 1]], dtype=int32)"
]
}
],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Common Array Operations"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"c = b * 0.5\n",
"print(c)\n",
"print(c.shape)\n",
"print(c.dtype)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[ 0. 1. 2. ]\n",
" [ 0.5 1.5 2.5]]\n",
"(2, 3)\n",
"float64\n"
]
}
],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"d = a + c\n",
"print(d)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[ 1. 3. 5. ]\n",
" [ 1.5 3.5 5.5]]\n"
]
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"d[0]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 8,
"text": [
"array([ 1., 3., 5.])"
]
}
],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"d[0, 0]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 9,
"text": [
"1.0"
]
}
],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"d[:, 0]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 10,
"text": [
"array([ 1. , 1.5])"
]
}
],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"d.sum()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 11,
"text": [
"19.5"
]
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"d.mean()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 12,
"text": [
"3.25"
]
}
],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"d.sum(axis=0)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 13,
"text": [
"array([ 2.5, 6.5, 10.5])"
]
}
],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"d.mean(axis=1)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 14,
"text": [
"array([ 3. , 3.5])"
]
}
],
"prompt_number": 14
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Reshape and Update In-Place"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"e = np.arange(12)\n",
"print(e)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 0 1 2 3 4 5 6 7 8 9 10 11]\n"
]
}
],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# f is a view of contents of e\n",
"f = e.reshape(3, 4)\n",
"print(f)"
],
"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"
]
}
],
"prompt_number": 16
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Set last five values of e to zero\n",
"e[5:] = 0\n",
"print(e)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[0 1 2 3 4 0 0 0 0 0 0 0]\n"
]
}
],
"prompt_number": 17
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# f is also updated\n",
"f"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 18,
"text": [
"array([[0, 1, 2, 3],\n",
" [4, 0, 0, 0],\n",
" [0, 0, 0, 0]])"
]
}
],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# OWNDATA shows f does not own its data\n",
"f.flags"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 19,
"text": [
" C_CONTIGUOUS : True\n",
" F_CONTIGUOUS : False\n",
" OWNDATA : False\n",
" WRITEABLE : True\n",
" ALIGNED : True\n",
" UPDATEIFCOPY : False"
]
}
],
"prompt_number": 19
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Combine Arrays"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 20,
"text": [
"array([1, 2, 3])"
]
}
],
"prompt_number": 20
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"b"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 21,
"text": [
"array([[0, 2, 4],\n",
" [1, 3, 5]])"
]
}
],
"prompt_number": 21
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"d"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 22,
"text": [
"array([[ 1. , 3. , 5. ],\n",
" [ 1.5, 3.5, 5.5]])"
]
}
],
"prompt_number": 22
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"np.concatenate([a, a, a])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 23,
"text": [
"array([1, 2, 3, 1, 2, 3, 1, 2, 3])"
]
}
],
"prompt_number": 23
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Use broadcasting when needed to do this automatically\n",
"np.vstack([a, b, d])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 24,
"text": [
"array([[ 1. , 2. , 3. ],\n",
" [ 0. , 2. , 4. ],\n",
" [ 1. , 3. , 5. ],\n",
" [ 1. , 3. , 5. ],\n",
" [ 1.5, 3.5, 5.5]])"
]
}
],
"prompt_number": 24
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# In machine learning, useful to enrich or \n",
"# add new/concatenate features with hstack\n",
"np.hstack([b, d])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 25,
"text": [
"array([[ 0. , 2. , 4. , 1. , 3. , 5. ],\n",
" [ 1. , 3. , 5. , 1.5, 3.5, 5.5]])"
]
}
],
"prompt_number": 25
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Create Sample Data"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import pylab as plt\n",
"import seaborn\n",
"\n",
"seaborn.set()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Create evenly spaced numbers over the specified interval\n",
"x = np.linspace(0, 2, 10)\n",
"plt.plot(x, 'o-');\n",
"plt.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAFXCAYAAABz8D0iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAH3hJREFUeJzt3W90VPd95/G3JED8U0ElEl4DwTbYv4gYvHYSm5TUMbup\nYxtijuvGiY97NontpNvCOtuz3XM2PWe3+6D7oOfAaUqbzbrFcf7YG7wJ65hivHi79glx9mDHNYY2\nkn+YGEUYGyIWAQKBQGj2wYxcWejPSDOae2fm/Xpi3dFl5nuPLH3m/vtMTSaTQZIkJas26QEkSZKB\nLElSKhjIkiSlgIEsSVIKGMiSJKWAgSxJUgpMGe2bIYRFwHeBZiAD/HWMcfMw620G7gR6gC/GGPdO\nwqySJFWssfaQLwJ/GGP8MLASWB9CaBm8QgjhLmBpjPFa4CvANydlUkmSKtiogRxjPBpjfD339Rmg\nDbhyyGp3A9/JrfMyMDeEMH8SZpUkqWLlfQ45hHAVcCPw8pBvLQAOD1p+G1hY8GSSJFWRvAI5hDAb\n+CHw1dye8lA1Q5bt45QkaRxGvagLIIQwFdgGPBFj/NEwqxwBFg1aXph7bESZTCZTUzM0wyVJqhyf\n+XfPvG/5bzetGzX4xrrKugZ4DGiNMX59hNW2AxuArSGElcDJGOOx0Z63pqaGzs7u0VZJvaamhrLf\nBnA70qQStgEqYzsqYRvA7UjKud4+nnrhzXH/u7H2kFcBvwvsDyEM3Mr0x8AHAWKMj8YYd4YQ7goh\nHATOAl8a9xSSJFWA2NHFY8+2cfzUeRY1z+bUmV5O91zM69+OGsgxxpfI4zxzjHFDfqNKklR5LvZd\n4undh9j1SgfUwJqPL2bdJ67mSOdZNm/bT1d376inciGPc8iSJGlkvzzazZYdrRw5fpbmxhk8vHYZ\nSxfMAWDxFQ1sWr+KpqaGMe8+MpAlSZqAS/397NzTwfaXDnGpP8PqmxZw321LqZ9WN6HnM5AlSRqn\noyd62LKjlbfeOc3c2dN48K4Wrr9mXkHPaSBLkpSn/kyGF187wg9ePMiFvn5WLpvPA7dfx6zpUwt+\nbgNZkqQ8nDh9nsd3tvHz9i5mTZ/Cg2tauLmleE3RBrIkSaPIZDLsaT3GE88f4FxvHyuWzOOLd36I\nubPri/o6BrIkSSPo7rnA93ZFXo2d1E+t4wt3BG694Uomo23SQJYkaRivHzzOt597g9NnL3Dtwjk8\ntKaF5saZk/Z6BrIkSYMMVF/u3vcuU+pq+OzqJXz6Yx+ktnZyP4PBQJYkKWdo9eWX1y5jYfPskry2\ngSxJqnojVV9OqcvrU4qLwkCWJFW10aovS8lAliRVpcuqL29cwH2rJ159WSgDWZJUdSaj+rJQBrIk\nqWpMZvVloQxkSVJVmOzqy0IZyJKkilaq6stCGciSpIpVyurLQhnIkqSKVOrqy0IZyJKkipJU9WWh\nDGRJUsVIsvqyUAayJKnspaH6slAGsiSprKWl+rJQBrIkqSylrfqyUAayJKnspLH6slAGsiSpbKS5\n+rJQBrIkqSykvfqyUAayJCmVNm7dS1t7F9TAlfNmcaK7l3O9fSy/Jlt92diQrurLQhnIkqTU2bh1\nL63tXdmFDBw5fhaAtR9fzD23XpPK6stClc8NWpKkqtE2EMZD/PQfj1ZkGIOBLElKmXO9fWSSHiIB\nHrKWJKXGQPXlcBob6nnk3hUlnqh0DGRJUuKGq7786T+8y8kzF4BsGG9avyrhKSeXgSxJStRI1Zcf\nDc1s3raf2toaNtyzPOkxJ52BLElKxFjVl4uvaGDT+lU0NTXQ2dmd8LSTz0CWJJVcJVZfFspAliSV\nTCVXXxbKQJYklUSlV18WykCWJE2qTCbDntZjPPH8Ac719rFiSbb6cu7syqq+LJSBLEmaNN09F/je\nrsirsZP6qXV84Y7ArTdcWbFtW4UwkCVJk+L1g8f59nNvcPrsBa5dOIeH1rTQ3Dgz6bFSy0CWJBXV\nud4+nnrhTXbve5cpdTV8dvUSPv2xD1Jb617xaAxkSVLRDFRfHj91nkXNs/ny2mUsbJ6d9FhlwUCW\nJBVsuOrLdZ+4mil1foZRvgxkSVJBRqq+1PgYyJKkCbms+vKmBdx32z9VX2p8DGRJ0rhZfVl8BrIk\nKW9WX04eA1mSlBerLyeXgSxJGpXVl6VhIEuSRmT1ZekYyJKkYV1Wfbl2Gc1zZyQ9VsUykCVJ72P1\nZTIMZEnSe6y+TI6BLEmy+jIFDGRJqnJWX6aDgSxJVcrqy3QxkCWpCll9mT4GsiRVEasv08tAlqQq\nYfVluhnIklThrL4sDwayJFWYjVv30tbeBTVw7cK5/NrMqVZflgEDWZIqyMate2lt78ouZODA4ZMA\nLGqezfrfXm71ZYp5x7ckVZC2gTAe4kzPRcM45QxkSaogmZG+4RHq1POQtSRVgIHqy+E0NtTzyL0r\nSjyRxstAlqQyN7T68lxvH909F4FsGG9avyrhCZUPA1mSytRI1ZdHT/Swedt+amtr2HDP8qTHVJ7G\nDOQQwreANcCvYoyX/WRDCLcBzwBv5R7aFmP802IOKUl6v9GqLxdf0cCm9atoamqgs7M74UmVr3z2\nkB8H/hL47ijr/DjGeHdxRpIkjcTqy8o1ZiDHGH8SQrhqjNW8fk+SJpnVl5WtGOeQM8BvhBD2AUeA\nP4oxthbheSVJWH1ZLYoRyK8Bi2KMPSGEO4EfAdcV4Xklqep191zge7ui1ZdVoCaTGfE28vfkDln/\n7XAXdQ2z7iHgIzHGE6OsNvaLSlKVe6X1KH/5P17nZHcvy67+df7w/pu4Yt6spMfSxIz5DqrgPeQQ\nwnyyV2BnQgg3AzVjhDFA2V/5VylXL7od6VEJ2wCVsR1Jb8O53j6eeuFNdu97lyl1NXx29RI+/bEP\nUtvfP665kt6OYqmE7WhqahhznXxue/o+8EngAyGEw8CfAFMBYoyPAr8D/H4IoQ/oAT5fwMySVNVi\nRxePPdvG8VPnWdQ8my+vXcbC5tlJj6USyOcq6/vH+P43gG8UbSJJqkID1Ze7XumAGljz8cWs+8TV\nTKnzIweqhU1dkpSwodWXD69dxtIFc5IeSyVmIEtSQkaqvqyfVpf0aEqAgSxJCRit+lLVyUCWpBLK\nZDK8YPWlhmEgS1KJWH2p0RjIkjTJrL5UPgxkSZpEVl8qXwayJE2SfQeP8+3n3uDU2Qtcu3AOD61d\nRvPcGUmPpZQykCWpyEasvqx1r1gjM5AlqYgOHD7Jlh2tVl9q3AxkSSoCqy9VKANZkgpk9aWKwUCW\npAm61N/Pc3s6eMbqSxWBgSxJE3AsV335C6svVSQGsiSNg9WXmiwGsiTlyepLTSYDWZLGMFB9+eTz\nB+ix+lKTxECWpFFYfalSMZAlKWfj1r20tXdBDbQsbuS3Prro/dWXa1pobpyZ9JiqUAayJJEN49b2\nruxCBlrbu2ht76KuFqsvVRIGsiRBds94GLOmT+XOWxaXeBpVIzvdJGkUdVZfqkT8P01S1es41s20\nqZf/OWxsqOeRe1ckMJGqkYesJVWtodWX9VNr6b3YD2TDeNP6VQlPqGpiIEuqSsNVXzbMnMbmbfup\nra1hwz3Lkx5RVcZAllRVxqq+3LR+FU1NDXR2dic8qaqNgSypalh9qTQzkCVVPKsvVQ4MZEkVzepL\nlQsDWVLF2nfwuNWXKhsGsqSKc663j6deeJPd+95lSl2N1ZcqCwaypIpy4PBJtuxo5fip8yxqns2X\n1y5jYfPspMeSxmQgS6oIF/su8fTuQ+x6pQNqYM3HF7PuE1czxepLlQkDWVLZ++XRbrbsaOXI8bM0\nN87g4bXLWLpgTtJjSeNiIEsqW5f6+9m5p4PtuerL1Tct4L7bllI/rS7p0aRxM5AllaWjuerLtwZV\nX15/zbykx5ImzECWVFbGqr6UypWBLKlsWH2pSmYgS0q9gerLJ54/wDmrL1WhDGRJqWb1paqFgSwp\ntV7PVV+eHqi+XLuM5rkzkh5L
"text": [
"<matplotlib.figure.Figure at 0x10bc25110>"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"np.random.normal?"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Create sample data, add some noise\n",
"x = np.random.uniform(1, 100, 1000)\n",
"y = np.log(x) + np.random.normal(0, .3, 1000)\n",
"\n",
"plt.scatter(x, y)\n",
"plt.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n+D3EY7Otq3euxcUHKShQxxGh
"text": [
"<matplotlib.figure.Figure at 0x10bd30110>"
]
}
],
"prompt_number": 6
}
],
"metadata": {}
}
]
}