{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# NumPy arrays"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nikolay Koldunov\n",
"\n",
"koldunovn@gmail.com"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"================"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- a powerful N-dimensional array object\n",
"- sophisticated (broadcasting) functions\n",
"- tools for integrating C/C++ and Fortran code\n",
"- useful linear algebra, Fourier transform, and random number capabilities\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"np.set_printoptions(precision=3 , suppress= True) # this is just to make the output look better"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Load data in to a variable:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"temp = np.loadtxt('Ham_3column.txt')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1891., 1., 1., -72.],\n",
" [1891., 1., 2., -43.],\n",
" [1891., 1., 3., -32.],\n",
" ...,\n",
" [2014., 8., 29., 216.],\n",
" [2014., 8., 30., 198.],\n",
" [2014., 8., 31., 184.]])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temp"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(45168, 4)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temp.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"180672"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temp.size"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So it's a *row-major* order. Matlab and Fortran use *column-major* order for arrays."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"numpy.ndarray"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(temp)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Numpy arrays are statically typed, which allow faster operations"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dtype('float64')"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temp.dtype"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can't assign value of different type to element of the numpy array:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"ename": "ValueError",
"evalue": "could not convert string to float: 'Year'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtemp\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'Year'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mValueError\u001b[0m: could not convert string to float: 'Year'"
]
}
],
"source": [
"temp[0,0] = 'Year'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Slicing works similarly to Matlab:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1891., 1., 1., -72.],\n",
" [1891., 1., 2., -43.],\n",
" [1891., 1., 3., -32.],\n",
" [1891., 1., 4., 12.],\n",
" [1891., 1., 5., -29.]])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temp[0:5,:]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[2014., 8., 27., 219.],\n",
" [2014., 8., 28., 234.],\n",
" [2014., 8., 29., 216.],\n",
" [2014., 8., 30., 198.]])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temp[-5:-1,:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"One can look at the data. This is done by matplotlib module:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"