{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fyrirlestur 6\n",
    "\n",
    "Dagsetning: 9. febrúar\n",
    "\n",
    "Python uppsetning"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Skoðum einfalda vigra, vigrar eru af taginu `ndarray`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "a = np.arange(1,10)\n",
    "print(a)\n",
    "print(type(a))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Hver `ndarray` hlutur hefur nokkra eiginleika\n",
    "\n",
    "- `ndarray.ndim`\n",
    "Fjöldi vídda, 1 fyrir vigra, 2 fyrir fylki\n",
    "- `ndarray.shape`\n",
    "Stærðin á fylkinu sem `tuple`, fyrsta stak fyrir fyrstu vídd o.s.frv\n",
    "Lengdin á svarinu er `ndim`.\n",
    "- `ndarray.size`\n",
    "Fjöldi staka, jafnt margfeldi allra staka í `shape`\n",
    "- `ndarray.dtype`\n",
    "Tagið á gildunum\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "print(a.ndim)\n",
    "print(a.shape)\n",
    "print(a.size)\n",
    "print(a.dtype)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Nýir vigrar\n",
    "Við getum búið til nýja vigra úr listum með `array` fallinu"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "a = np.array([0,-1,5,2.0])\n",
    "print(a)\n",
    "print(type(a))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "a = np.array([1,2,3])\n",
    "print(a)\n",
    "print(a.dtype)\n",
    "b = np.array(a,dtype=float) # sömu gildi, nema float64\n",
    "print(b)\n",
    "print(b.dtype)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Mikilvægir vigrar\n",
    "Höfum sérföll eins og `zeros`, `ones`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "a = np.ones(4)\n",
    "b = np.zeros(4)\n",
    "print(a)\n",
    "print(b)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Fallið `linspace` er gott til að búa til punkta á bili með föstum fjölda. `arange` fallið getur búið til mislanga vigra"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "n = 10\n",
    "a = np.linspace(1/3.0,10/3.0,n)\n",
    "print(a)\n",
    "print(len(a)) # len skilar lengdinni líka\n",
    "b = np.arange(1/3.0,10/3.0, (3.0/(n-1)))\n",
    "print(b)\n",
    "print(len(b)) # síðasta talan varð ekki með :("
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Einfaldar aðgerðir\n",
    "Reikniaðgerðirnar + og - gera það sem við höldum að þær gera, líka margföldun með tölu"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "a = np.array([0,3,1])\n",
    "b = np.array([1,-2,-5])\n",
    "\n",
    "print('a+b =',a+b)\n",
    "print('a-b =',a-b)\n",
    "\n",
    "a += b # breytir a\n",
    "print('a = ',a)\n",
    "c = 2*a\n",
    "print('c = ',c)\n",
    "d = 2*a + 3*b\n",
    "print('d = ',d)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## slicing\n",
    "Sömu reglur og fyrir lista og strengi\n",
    "\n",
    "- `a[0]`  - fyrsta stakið\n",
    "- `a[:]` - allur vigurinn\n",
    "- `a[:i]` - i fyrstu stök\n",
    "- `a[i:]` - allt nema i fyrstu\n",
    "- `a[i:j]` - frá i til j-1, j ekki með\n",
    "- `a[i:j:k]` - k-ta hvert stak frá i og minna en j\n",
    "- `a[-1]` - síðasta stak\n",
    "\n",
    "Þegar við fjöllum um fylki þá verða reglurnar svipaðar en örlítið flóknari\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Innfeldi\n",
    "\n",
    "Innfeldi er reiknað milli tveggja vigra með `dot` fallinu, athugið að útkoman verður alltaf tala, ekki vigur."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "a = np.array([0.0,1,-1,2,6])\n",
    "b = np.array([1.0,1,5,3,-1])\n",
    "print('a = ',a)\n",
    "print('b = ',b)\n",
    "print('a^Tb = ',np.dot(a,b))\n",
    "dp = np.dot(a,b)\n",
    "print(type(dp))\n",
    "# "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Staflaðir vigrar\n",
    "\n",
    "Við getum staflað upp vigrum til að búa til lengri vigra með `hstack` fallinu, "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "print(a)\n",
    "print(b)\n",
    "print(np.hstack((a,b))) # athugið inntakið er tuple eða listi\n",
    "print(np.hstack([a,b]))\n",
    "#print(np.hstack(a,b)) -- virkar ekki"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "print(np.hstack((np.zeros(5),np.ones(3),np.zeros(5))))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Fallið `vstack` virkar á svipaðan hátt, en allir vigrar verða að vera jafnstórir og vigrunum er staflað \"ofan á hvern annan\" í fylki, þ.e. vigrarnir verða raðirnar í fylkinu"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "X = np.vstack((np.zeros(5),np.ones(5)))\n",
    "print(X)\n",
    "print(type(X))\n",
    "print('ndim =',X.ndim)\n",
    "print('shape =',X.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Fallið `column_stack` staflar vigrunum upp í dálka í fylki, \"hlið við hlið\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "Y = np.column_stack((np.zeros(5),np.ones(5)))\n",
    "print(Y)\n",
    "print(type(Y))\n",
    "print('ndim =',Y.ndim)\n",
    "print('shape =',Y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
