{"metadata": {"signature": "sha256:886c499e6a2d59fe728d1ba67e31549bbba4ed30921ee6afa4fca90113067a13", "name": ""}, "nbformat": 3, "worksheets": [{"metadata": {}, "cells": [{"metadata": {}, "source": ["# Computing the Rank"], "cell_type": "markdown"}, {"metadata": {}, "input": ["import numpy as np"], "cell_type": "code", "prompt_number": 16, "collapsed": false, "language": "python", "outputs": []}, {"metadata": {}, "input": ["n = 5\n", "A = np.random.randn(n, n)"], "cell_type": "code", "prompt_number": 17, "collapsed": false, "language": "python", "outputs": []}, {"metadata": {}, "source": ["Now decrease the rank of `A`:"], "cell_type": "markdown"}, {"metadata": {}, "input": ["A[4] = A[0] + 5 * A[2]\n", "A[1] = 3 * A[0] -2 * A[2]"], "cell_type": "code", "prompt_number": 18, "collapsed": false, "language": "python", "outputs": []}, {"metadata": {}, "source": ["What should the rank be now?"], "cell_type": "markdown"}, {"metadata": {}, "source": ["-------------------\n", "Let's run Gaussian Elimination:"], "cell_type": "markdown"}, {"metadata": {}, "input": ["np.set_printoptions(precision=4)\n", "\n", "for i in range(n):\n", " # find biggest entry\n", " j = max(\n", " (j for j in range(i, n)),\n", " key=lambda j: abs(A[j, i]))\n", " \n", " # swap rows i and piv_row\n", " row_i = A[i].copy()\n", " row_j = A[j]\n", " A[i] = row_j\n", " A[j] = row_i\n", " \n", " # eliminate down\n", " for j in range(i+1, n):\n", " A[j] -= A[i] * A[j,i]/A[i,i]\n", " \n", " print(A)\n", " print()"], "cell_type": "code", "prompt_number": 19, "collapsed": false, "language": "python", "outputs": [{"text": ["[[ 6.2344e+00 -5.5712e+00 -2.7390e-01 -1.1447e+00 -4.1407e+00]\n", " [ 0.0000e+00 4.5908e+00 -3.3457e+00 2.1521e+00 5.3686e-01]\n", " [ -2.2204e-16 -2.7005e-01 1.9681e-01 -1.2660e-01 -3.1580e-02]\n", " [ 0.0000e+00 -1.5893e+00 -1.1484e+00 9.0711e-01 -1.9974e+00]\n", " [ 0.0000e+00 1.3502e+00 -9.8403e-01 6.3298e-01 1.5790e-01]]\n", "\n", "[[ 6.2344e+00 -5.5712e+00 -2.7390e-01 -1.1447e+00 -4.1407e+00]\n", " [ 0.0000e+00 4.5908e+00 -3.3457e+00 2.1521e+00 5.3686e-01]\n", " [ -2.2204e-16 0.0000e+00 -2.7756e-17 -2.7756e-17 1.0408e-16]\n", " [ 0.0000e+00 0.0000e+00 -2.3067e+00 1.6522e+00 -1.8116e+00]\n", " [ 0.0000e+00 0.0000e+00 2.2204e-16 0.0000e+00 5.5511e-17]]\n", "\n", "[[ 6.2344e+00 -5.5712e+00 -2.7390e-01 -1.1447e+00 -4.1407e+00]\n", " [ 0.0000e+00 4.5908e+00 -3.3457e+00 2.1521e+00 5.3686e-01]\n", " [ 0.0000e+00 0.0000e+00 -2.3067e+00 1.6522e+00 -1.8116e+00]\n", " [ -2.2204e-16 0.0000e+00 0.0000e+00 -4.7635e-17 1.2588e-16]\n", " [ 0.0000e+00 0.0000e+00 0.0000e+00 1.5904e-16 -1.1887e-16]]\n", "\n", "[[ 6.2344e+00 -5.5712e+00 -2.7390e-01 -1.1447e+00 -4.1407e+00]\n", " [ 0.0000e+00 4.5908e+00 -3.3457e+00 2.1521e+00 5.3686e-01]\n", " [ 0.0000e+00 0.0000e+00 -2.3067e+00 1.6522e+00 -1.8116e+00]\n", " [ 0.0000e+00 0.0000e+00 0.0000e+00 1.5904e-16 -1.1887e-16]\n", " [ -2.2204e-16 0.0000e+00 0.0000e+00 6.1630e-33 9.0277e-17]]\n", "\n", "[[ 6.2344e+00 -5.5712e+00 -2.7390e-01 -1.1447e+00 -4.1407e+00]\n", " [ 0.0000e+00 4.5908e+00 -3.3457e+00 2.1521e+00 5.3686e-01]\n", " [ 0.0000e+00 0.0000e+00 -2.3067e+00 1.6522e+00 -1.8116e+00]\n", " [ 0.0000e+00 0.0000e+00 0.0000e+00 1.5904e-16 -1.1887e-16]\n", " [ -2.2204e-16 0.0000e+00 0.0000e+00 6.1630e-33 9.0277e-17]]\n", "\n"], "output_type": "stream", "stream": "stdout"}]}, {"metadata": {}, "source": ["Now what is the rank of that matrix?"], "cell_type": "markdown"}]}], "nbformat_minor": 0}