Repository: fastai/numerical-linear-algebra Branch: master Commit: 694453e105b2 Files: 20 Total size: 3.7 MB Directory structure: gitextract_8s6cyyht/ ├── .gitignore ├── README.md ├── excel/ │ └── britlit.xlsx └── nbs/ ├── 0. Course Logistics.ipynb ├── 1. Why are we here.ipynb ├── 2. Topic Modeling with NMF and SVD.ipynb ├── 3. Background Removal with Robust PCA.ipynb ├── 4. Compressed Sensing of CT Scans with Robust Regression.ipynb ├── 5. Health Outcomes with Linear Regression.ipynb ├── 6. How to Implement Linear Regression.ipynb ├── 7. PageRank with Eigen Decompositions.ipynb ├── 8. Implementing QR Factorization.ipynb ├── Homework 1.ipynb ├── Homework 2.ipynb ├── Homework 3.ipynb ├── Project_ideas.txt ├── convolution-intro.ipynb ├── graddesc.xlsm ├── gradient-descent-intro.ipynb └── images/ └── AF1QipMKlINdas9JzCH0FUrOj7FyVKhQUAGBSHTLSbK9.url ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ nbs/.ipynb_checkpoints ================================================ FILE: README.md ================================================ ## Computational Linear Algebra for Coders This course is focused on the question: **How do we do matrix computations with acceptable speed and acceptable accuracy?** This course was taught in the [University of San Francisco's Masters of Science in Analytics](https://www.usfca.edu/arts-sciences/graduate-programs/analytics) program, summer 2017 (for graduate students studying to become data scientists). The course is taught in Python with Jupyter Notebooks, using libraries such as Scikit-Learn and Numpy for most lessons, as well as Numba (a library that compiles Python to C for faster performance) and PyTorch (an alternative to Numpy for the GPU) in a few lessons. Accompanying the notebooks is a [playlist of lecture videos, available on YouTube](https://www.youtube.com/playlist?list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY). If you are ever confused by a lecture or it goes too quickly, check out the beginning of the next video, where I review concepts from the previous lecture, often explaining things from a new perspective or with different illustrations, and answer questions. ## Getting Help You can ask questions or share your thoughts and resources using the [**Computational Linear Algebra** category on our fast.ai discussion forums](http://forums.fast.ai/c/lin-alg). ## Table of Contents The following listing links to the notebooks in this repository, rendered through the [nbviewer](http://nbviewer.jupyter.org) service. Topics Covered: ### [0. Course Logistics](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/0.%20Course%20Logistics.ipynb) ([Video 1](https://www.youtube.com/watch?v=8iGzBMboA0I&index=1&list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY)) - [My background](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/0.%20Course%20Logistics.ipynb#Intro) - [Teaching Approach](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/0.%20Course%20Logistics.ipynb#Teaching) - [Importance of Technical Writing](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/0.%20Course%20Logistics.ipynb#Writing-Assignment) - [List of Excellent Technical Blogs](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/0.%20Course%20Logistics.ipynb#Excellent-Technical-Blogs) - [Linear Algebra Review Resources](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/0.%20Course%20Logistics.ipynb#Linear-Algebra) ### [1. Why are we here?](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/1.%20Why%20are%20we%20here.ipynb) ([Video 1](https://www.youtube.com/watch?v=8iGzBMboA0I&index=1&list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY)) We start with a high level overview of some foundational concepts in numerical linear algebra. - [Matrix and Tensor Products](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/1.%20Why%20are%20we%20here.ipynb#Matrix-and-Tensor-Products) - [Matrix Decompositions](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/1.%20Why%20are%20we%20here.ipynb#Matrix-Decompositions) - [Accuracy](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/1.%20Why%20are%20we%20here.ipynb#Accuracy) - [Memory use](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/1.%20Why%20are%20we%20here.ipynb#Memory-Use) - [Speed](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/1.%20Why%20are%20we%20here.ipynb#Speed) - [Parallelization & Vectorization](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/1.%20Why%20are%20we%20here.ipynb#Scalability-/-parallelization) ### [2. Topic Modeling with NMF and SVD](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/2.%20Topic%20Modeling%20with%20NMF%20and%20SVD.ipynb) ([Video 2](https://www.youtube.com/watch?v=kgd40iDT8yY&list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY&index=2) and [Video 3](https://www.youtube.com/watch?v=C8KEtrWjjyo&index=3&list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY)) We will use the newsgroups dataset to try to identify the topics of different posts. We use a term-document matrix that represents the frequency of the vocabulary in the documents. We factor it using NMF, and then with SVD. - [Topic Frequency-Inverse Document Frequency (TF-IDF)](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/2.%20Topic%20Modeling%20with%20NMF%20and%20SVD.ipynb#TF-IDF) - [Singular Value Decomposition (SVD)](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/2.%20Topic%20Modeling%20with%20NMF%20and%20SVD.ipynb#Singular-Value-Decomposition-(SVD)) - [Non-negative Matrix Factorization (NMF)](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/2.%20Topic%20Modeling%20with%20NMF%20and%20SVD.ipynb#Non-negative-Matrix-Factorization-(NMF)) - [Stochastic Gradient Descent (SGD)](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/2.%20Topic%20Modeling%20with%20NMF%20and%20SVD.ipynb#Gradient-Descent) - [Intro to PyTorch](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/2.%20Topic%20Modeling%20with%20NMF%20and%20SVD.ipynb#PyTorch) - [Truncated SVD](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/2.%20Topic%20Modeling%20with%20NMF%20and%20SVD.ipynb#Truncated-SVD) ### [3. Background Removal with Robust PCA](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/3.%20Background%20Removal%20with%20Robust%20PCA.ipynb) ([Video 3](https://www.youtube.com/watch?v=C8KEtrWjjyo&index=3&list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY), [Video 4](https://www.youtube.com/watch?v=Ys8R2nUTOAk&index=4&list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY), and [Video 5](https://www.youtube.com/watch?v=O2x5KPJr5ag&list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY&index=5)) Another application of SVD is to identify the people and remove the background of a surveillance video. We will cover robust PCA, which uses randomized SVD. And Randomized SVD uses the LU factorization. - [Load and View Video Data](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/3.%20Background%20Removal%20with%20Robust%20PCA.ipynb#Load-and-view-the-data) - [SVD](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/3.%20Background%20Removal%20with%20Robust%20PCA.ipynb#SVD) - [Principal Component Analysis (PCA)](https://github.com/fastai/numerical-linear-algebra/blob/master/nbs/3.%20Background%20Removal%20with%20Robust%20PCA.ipynb) - [L1 Norm Induces Sparsity](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/3.%20Background%20Removal%20with%20Robust%20PCA.ipynb#L1-norm-induces-sparsity) - [Robust PCA](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/3.%20Background%20Removal%20with%20Robust%20PCA.ipynb#Robust-PCA-(via-Primary-Component-Pursuit)) - [LU factorization](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/3.%20Background%20Removal%20with%20Robust%20PCA.ipynb#LU-Factorization) - [Stability of LU](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/3.%20Background%20Removal%20with%20Robust%20PCA.ipynb#Stability) - [LU factorization with Pivoting](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/3.%20Background%20Removal%20with%20Robust%20PCA.ipynb#LU-factorization-with-Partial-Pivoting) - [History of Gaussian Elimination](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/3.%20Background%20Removal%20with%20Robust%20PCA.ipynb#History-of-Gaussian-Elimination) - [Block Matrix Multiplication](https://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/3.%20Background%20Removal%20with%20Robust%20PCA.ipynb#Block-Matrices) ### [4. Compressed Sensing with Robust Regression](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/4.%20Compressed%20Sensing%20of%20CT%20Scans%20with%20Robust%20Regression.ipynb#4.-Compressed-Sensing-of-CT-Scans-with-Robust-Regression) ([Video 6](https://www.youtube.com/watch?v=YY9_EYNj5TY&list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY&index=6) and [Video 7](https://www.youtube.com/watch?v=ZUGkvIM6ehM&list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY&index=7)) Compressed sensing is critical to allowing CT scans with lower radiation-- the image can be reconstructed with less data. Here we will learn the technique and apply it to CT images. - [Broadcasting](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/4.%20Compressed%20Sensing%20of%20CT%20Scans%20with%20Robust%20Regression.ipynb#Broadcasting) - [Sparse matrices](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/4.%20Compressed%20Sensing%20of%20CT%20Scans%20with%20Robust%20Regression.ipynb#Sparse-Matrices-(in-Scipy)) - [CT Scans and Compressed Sensing](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/4.%20Compressed%20Sensing%20of%20CT%20Scans%20with%20Robust%20Regression.ipynb#Sparse-Matrices-(in-Scipy)) - [L1 and L2 regression](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/4.%20Compressed%20Sensing%20of%20CT%20Scans%20with%20Robust%20Regression.ipynb#Regresssion) ### [5. Predicting Health Outcomes with Linear Regressions](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/5.%20Health%20Outcomes%20with%20Linear%20Regression.ipynb) ([Video 8](https://www.youtube.com/watch?v=SjX55V8zDXI&index=8&list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY)) - [Linear regression in sklearn](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/5.%20Health%20Outcomes%20with%20Linear%20Regression.ipynb#Linear-regression-in-Scikit-Learn) - [Polynomial Features](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/5.%20Health%20Outcomes%20with%20Linear%20Regression.ipynb#Polynomial-Features) - [Speeding up with Numba](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/5.%20Health%20Outcomes%20with%20Linear%20Regression.ipynb#Speeding-up-feature-generation) - [Regularization and Noise](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/5.%20Health%20Outcomes%20with%20Linear%20Regression.ipynb#Regularization-and-noise) ### [6. How to Implement Linear Regression](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/6.%20How%20to%20Implement%20Linear%20Regression.ipynb)([Video 8](https://www.youtube.com/watch?v=SjX55V8zDXI&index=8&list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY)) - [How did Scikit Learn do it?](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/6.%20How%20to%20Implement%20Linear%20Regression.ipynb#How-did-sklearn-do-it?) - [Naive solution](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/6.%20How%20to%20Implement%20Linear%20Regression.ipynb#Naive-Solution) - [Normal equations and Cholesky factorization](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/6.%20How%20to%20Implement%20Linear%20Regression.ipynb#Normal-Equations-(Cholesky)) - [QR factorization](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/6.%20How%20to%20Implement%20Linear%20Regression.ipynb#QR-Factorization) - [SVD](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/6.%20How%20to%20Implement%20Linear%20Regression.ipynb#SVD) - [Timing Comparison](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/6.%20How%20to%20Implement%20Linear%20Regression.ipynb#Timing-Comparison) - [Conditioning & Stability](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/6.%20How%20to%20Implement%20Linear%20Regression.ipynb#Conditioning-&-stability) - [Full vs Reduced Factorizations](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/6.%20How%20to%20Implement%20Linear%20Regression.ipynb#Full-vs-Reduced-Factorizations) - [Matrix Inversion is Unstable](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/6.%20How%20to%20Implement%20Linear%20Regression.ipynb#Matrix-Inversion-is-Unstable) ### [7. PageRank with Eigen Decompositions](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/7.%20PageRank%20with%20Eigen%20Decompositions.ipynb) ([Video 9](https://www.youtube.com/watch?v=AbB-w77yxD0&list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY&index=9) and [Video 10](https://www.youtube.com/watch?v=1kw8bpA9QmQ&index=10&list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY)) We have applied SVD to topic modeling, background removal, and linear regression. SVD is intimately connected to the eigen decomposition, so we will now learn how to calculate eigenvalues for a large matrix. We will use DBpedia data, a large dataset of Wikipedia links, because here the principal eigenvector gives the relative importance of different Wikipedia pages (this is the basic idea of Google's PageRank algorithm). We will look at 3 different methods for calculating eigenvectors, of increasing complexity (and increasing usefulness!). - [SVD](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/7.%20PageRank%20with%20Eigen%20Decompositions.ipynb#Motivation) - [DBpedia Dataset](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/7.%20PageRank%20with%20Eigen%20Decompositions.ipynb#DBpedia) - [Power Method](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/7.%20PageRank%20with%20Eigen%20Decompositions.ipynb#Power-method) - [QR Algorithm](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/7.%20PageRank%20with%20Eigen%20Decompositions.ipynb#QR-Algorithm) - [Two-phase approach to finding eigenvalues](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/7.%20PageRank%20with%20Eigen%20Decompositions.ipynb#A-Two-Phase-Approach) - [Arnoldi Iteration](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/7.%20PageRank%20with%20Eigen%20Decompositions.ipynb#Arnoldi-Iteration) ### [8. Implementing QR Factorization](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/8.%20Implementing%20QR%20Factorization.ipynb) ([Video 10](https://www.youtube.com/watch?v=1kw8bpA9QmQ&index=10&list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY)) - [Gram-Schmidt](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/8.%20Implementing%20QR%20Factorization.ipynb#Gram-Schmidt) - [Householder](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/8.%20Implementing%20QR%20Factorization.ipynb#Householder) - [Stability Examples](http://nbviewer.jupyter.org/github/fastai/numerical-linear-algebra/blob/master/nbs/8.%20Implementing%20QR%20Factorization.ipynb#Ex-9.2:-Classical-vs-Modified-Gram-Schmidt)
## Why is this course taught in such a weird order? This course is structured with a *top-down* teaching method, which is different from how most math courses operate. Typically, in a *bottom-up* approach, you first learn all the separate components you will be using, and then you gradually build them up into more complex structures. The problems with this are that students often lose motivation, don't have a sense of the "big picture", and don't know what they'll need. Harvard Professor David Perkins has a book, [Making Learning Whole](https://www.amazon.com/Making-Learning-Whole-Principles-Transform/dp/0470633719) in which he uses baseball as an analogy. We don't require kids to memorize all the rules of baseball and understand all the technical details before we let them play the game. Rather, they start playing with a just general sense of it, and then gradually learn more rules/details as time goes on. If you took the fast.ai deep learning course, that is what we used. You can hear more about my teaching philosophy [in this blog post](http://www.fast.ai/2016/10/08/teaching-philosophy/) or [this talk I gave at the San Francisco Machine Learning meetup](https://vimeo.com/214233053). All that to say, don't worry if you don't understand everything at first! You're not supposed to. We will start using some "black boxes" or matrix decompositions that haven't yet been explained, and then we'll dig into the lower level details later. To start, focus on what things DO, not what they ARE. ================================================ FILE: nbs/0. Course Logistics.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "You can read an overview of this Numerical Linear Algebra course in [this blog post](http://www.fast.ai/2017/07/17/num-lin-alg/). The course was originally taught in the [University of San Francisco MS in Analytics](https://www.usfca.edu/arts-sciences/graduate-programs/analytics) graduate program. Course lecture videos are [available on YouTube](https://www.youtube.com/playlist?list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY) (note that the notebook numbers and video numbers do not line up, since some notebooks took longer than 1 video to cover).\n", "\n", "You can ask questions about the course on [our fast.ai forums](http://forums.fast.ai/c/lin-alg)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 0. Course Logistics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ask Questions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let me know how things are going. This is particularly important since I'm new to MSAN, I don't know everything you've seen/haven't seen." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Intro" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**My background and linear algebra love**:\n", "\n", "- **Swarthmore College**: linear algebra convinced me to be a math major! (minors in CS & linguistics) I thought linear algebra was beautiful, but theoretical\n", "- **Duke University**: Math PhD. Took numerical linear algebra. Enjoyed the course, but not my focus\n", "- **Research Triangle Institute**: first time using linear algebra in practice (healthcare economics, markov chains)\n", "- **Quant**: first time working with lots of data, decided to become a data scientist\n", "- **Uber**: data scientist\n", "- **Hackbright**: taught software engineering. Overhauled ML and collaborative filtering lectures\n", "- **fast.ai**: co-founded to make deep learning more accessible. Deep Learning involves a TON of linear algebra" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Teaching" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Teaching Approach**\n", "\n", "I'll be using a *top-down* teaching method, which is different from how most math courses operate. Typically, in a *bottom-up* approach, you first learn all the separate components you will be using, and then you gradually build them up into more complex structures. The problems with this are that students often lose motivation, don't have a sense of the \"big picture\", and don't know what they'll need.\n", "\n", "If you took the fast.ai deep learning course, that is what we used. You can hear more about my teaching philosophy [in this blog post](http://www.fast.ai/2016/10/08/teaching-philosophy/) or [in this talk](https://vimeo.com/214233053).\n", "\n", "Harvard Professor David Perkins has a book, [Making Learning Whole](https://www.amazon.com/Making-Learning-Whole-Principles-Transform/dp/0470633719) in which he uses baseball as an analogy. We don't require kids to memorize all the rules of baseball and understand all the technical details before we let them play the game. Rather, they start playing with a just general sense of it, and then gradually learn more rules/details as time goes on.\n", "\n", "All that to say, don't worry if you don't understand everything at first! You're not supposed to. We will start using some \"black boxes\" or matrix decompositions that haven't yet been explained, and then we'll dig into the lower level details later.\n", "\n", "To start, focus on what things DO, not what they ARE." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "People learn by:\n", "1. **doing** (coding and building)\n", "2. **explaining** what they've learned (by writing or helping others)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Text Book**\n", "\n", "The book [**Numerical Linear Algebra**](https://www.amazon.com/Numerical-Linear-Algebra-Lloyd-Trefethen/dp/0898713617) by Trefethen and Bau is recommended. The MSAN program has a few copies on hand.\n", "\n", "A secondary book is [**Numerical Methods**](https://www.amazon.com/Numerical-Methods-Analysis-Implementation-Algorithms/dp/0691151229) by Greenbaum and Chartier." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Office hours**: 2:00-4:00 on Friday afternoons. Email me if you need to meet at other times.\n", "\n", "My contact info: **rachel@fast.ai**\n", "\n", "Class Slack: #numerical_lin_alg\n", "\n", "Email me if you will need to miss class.\n", "\n", "Jupyter Notebooks will be available on Github at: https://github.com/fastai/numerical-linear-algebra Please pull/download before class. **Some parts are removed for you to fill in as you follow along in class**. Be sure to let me know **THIS WEEK** if you are having any problems running the notebooks from your own computer. You may want to make a separate copy, because running Jupyter notebooks causes them to change, which can create github conflicts the next time you pull." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check that you have MathJax running (which renders LaTeX, used for math equations) by running the following cell:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$ e^{\\theta i} = \\cos(\\theta) + i \\sin(\\theta)$$ " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "check that you can import:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import sklearn" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Grading Rubric**:\n", "\n", "| Assignment | Percent |\n", "|-------------------|:-------:|\n", "| Attendance | 10% |\n", "| Homework | 20% |\n", "| Writing: proposal | 10% |\n", "| Writing: draft | 15% |\n", "| Writing: final | 15% |\n", "| Final Exam | 30% |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Honor Code** \n", "\n", "No cheating nor plagiarism is allowed, please see below for more details." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**On Laptops**\n", "\n", "I ask you to be respectful of me and your classmates and to refrain from surfing the web or using social media (facebook, twitter, etc) or messaging programs during class. It is absolutely forbidden to use instant messaging programs, email, etc. during class lectures or quizzes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Syllabus" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Topics Covered:\n", "\n", "1\\. Why are we here?\n", " - Matrix and Tensor Products\n", " - Matrix Decompositions\n", " - Accuracy\n", " - Memory use\n", " - Speed\n", " - Parallelization & Vectorization\n", "\n", "\n", "2\\. Topic Modeling with NMF and SVD\n", " - Topic Frequency-Inverse Document Frequency (TF-IDF)\n", " - Singular Value Decomposition (SVD)\n", " - Non-negative Matrix Factorization (NMF)\n", " - Stochastic Gradient Descent (SGD)\n", " - Intro to PyTorch\n", " - Truncated SVD, Randomized SVD\n", "\n", "\n", "3\\. Background Removal with Robust PCA\n", " - Robust PCA\n", " - Randomized SVD\n", " - LU factorization\n", "\n", "\n", "4\\. Compressed Sensing for CT scans with Robust Regression\n", " - L1 regularization\n", "\n", "\n", "5\\. Predicting Health Outcomes with Linear Regression\n", " - Linear regression\n", " - Polynomial Features\n", " - Speeding up with Numba\n", " - Regularization and Noise\n", " - Implementing linear regression 4 ways\n", "\n", "\n", "6\\. PageRank with Eigen Decompositions\n", " - Power Method\n", " - QR Algorithm\n", " - Arnoldi Iteration\n", "\n", "\n", "7\\. QR Factorization\n", " - Gram-Schmidt\n", " - Householder\n", " - Stability" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Writing Assignment" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Writing Assignment:** Writing about technical concepts is a hugely valuable skill. I want you to write a technical blog post related to numerical linear algebra. [A blog is like a resume, only better](http://www.fast.ai/2017/04/06/alternatives/). Technical writing is also important in creating documentation, sharing your work with co-workers, applying to speak at conferences, and practicing for interviews. (You don't actually have to publish it, although I hope you do, and please send me the link if you do.)\n", "- [List of ideas here](Project_ideas.txt)\n", "- Always cite sources, use quote marks around quotes. Do this even as you are first gathering sources and taking notes. If you plagiarize parts of someone else's work, you will fail.\n", "- Can be done in a Jupyter Notebook (Jupyter Notebooks can be turned into blog posts) or a [Kaggle Kernel](https://www.kaggle.com/xenocide/content-based-anime-recommender)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the proposal, write a brief paragraph about the problem/topic/experiment you plan to research/test and write about. You need to include **4 sources** that you plan to use: these can include Trefethen, other blog posts, papers, or books. Include a sentence about each source, stating what it's in it.\n", "\n", "Feel free to ask me if you are wondering if your topic idea is suitable!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Excellent Technical Blogs\n", "\n", "Examples of great technical blog posts:\n", "- [Peter Norvig](http://nbviewer.jupyter.org/url/norvig.com/ipython/ProbabilityParadox.ipynb) (more [here](http://norvig.com/ipython/))\n", "- [Stephen Merity](https://smerity.com/articles/2017/deepcoder_and_ai_hype.html)\n", "- [Julia Evans](https://codewords.recurse.com/issues/five/why-do-neural-networks-think-a-panda-is-a-vulture) (more [here](https://jvns.ca/blog/2014/08/12/what-happens-if-you-write-a-tcp-stack-in-python/))\n", "- [Julia Ferraioli](http://blog.juliaferraioli.com/2016/02/exploring-world-using-vision-twilio.html)\n", "- [Edwin Chen](http://blog.echen.me/2014/10/07/moving-beyond-ctr-better-recommendations-through-human-evaluation/)\n", "- [Slav Ivanov](https://blog.slavv.com/picking-an-optimizer-for-style-transfer-86e7b8cba84b)\n", "- [Brad Kenstler](https://hackernoon.com/non-artistic-style-transfer-or-how-to-draw-kanye-using-captain-picards-face-c4a50256b814)\n", "- find [more on twitter](https://twitter.com/math_rachel)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Deadlines" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| Assignment | Dates |\n", "|-------------------|:--------:|\n", "| Homeworks | TBA |\n", "| Writing: proposal | 5/30 |\n", "| Writing: draft | 6/15 |\n", "| Writing: final | 6/27 |\n", "| Final Exam | 6/29 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Linear Algebra" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will review some linear algebra in class. However, if you find there are concepts you feel rusty on, you may want to review on your own. Here are some resources:\n", "\n", "- [3Blue1Brown Essence of Linear Algebra](https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab) videos about *geometric intuition* (fantastic! gorgeous!)\n", "- Lectures 1-6 of Trefethen\n", "- [Immersive linear algebra](http://immersivemath.com/ila/) free online textbook with interactive graphics\n", "- [Chapter 2](http://www.deeplearningbook.org/contents/linear_algebra.html) of Ian Goodfellow's Deep Learning Book\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## USF Policies" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Academic Integrity** \n", "\n", "USF upholds the standards of honesty and integrity from all members of the academic community. All students are expected to know and adhere to the University’s Honor Code. You can find the full text of the [code online](www.usfca.edu/academic_integrity). The policy covers:\n", "- Plagiarism: intentionally or unintentionally representing the words or ideas of another person as your own; failure to properly cite references; manufacturing references.\n", "- Working with another person when independent work is required.\n", "- Submission of the same paper in more than one course without the specific permission of each instructor.\n", "- Submitting a paper written (entirely or even a small part) by another person or obtained from the internet.\n", "- Plagiarism is plagiarism: it does not matter if the source being copied is on the Internet, from a book or textbook, or from quizzes or problem sets written up by other students.\n", "- The penalties for violation of the policy may include a failing grade on the assignment, a failing grade in the course, and/or a referral to the Academic Integrity Committee." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Students with Disabilities**\n", "\n", "If you are a student with a disability or disabling condition, or if you think you may have a disability, please contact USF Student Disability Services (SDS) at 415 422-2613 within the first week of class, or immediately upon onset of disability, to speak with a disability specialist. If you are determined eligible for reasonable accommodations, please meet with your disability specialist so they can arrange to have your accommodation letter sent to me, and we will discuss your needs for this course. For more information, please visit [this website]( http://www.usfca.edu/sds) or call (415) 422-2613." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Behavioral Expectations**\n", "\n", "All students are expected to behave in accordance with the [Student Conduct Code and other University policies](https://myusf.usfca.edu/fogcutter). Open discussion and disagreement is encouraged when done respectfully and in the spirit of academic discourse. There are also a variety of behaviors that, while not against a specific University policy, may create disruption in this course. Students whose behavior is disruptive or who fail to comply with the instructor may be dismissed from the class for the remainder of the class period and may need to meet with the instructor or Dean prior to returning to the next class period. If necessary, referrals may also be made to the Student Conduct process for violations of the Student Conduct Code." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Counseling and Psychological Services**\n", "\n", "Our diverse staff offers brief individual, couple, and group counseling to student members of our community. CAPS services are confidential and free of charge. Call 415-422-6352 for an initial consultation appointment. Having a crisis at 3 AM? We are still here for you. Telephone consultation through CAPS After Hours is available between the hours of 5:00 PM to 8:30 AM; call the above number and press 2." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Confidentiality, Mandatory Reporting, and Sexual Assault**\n", "\n", "As an instructor, one of my responsibilities is to help create a safe learning environment on our campus. I also have a mandatory reporting responsibility related to my role as a faculty member. I am required to share information regarding sexual misconduct or information about a crime that may have occurred on USFs campus with the University. Here are other resources:\n", "\n", "- To report any sexual misconduct, students may visit Anna Bartkowski (UC 5th floor) or see many other options by visiting [this website](https://myusf.usfca.edu/title-IX)\n", "- Students may speak to someone confidentially, or report a sexual assault confidentially by contacting Counseling and Psychological Services at 415-422-6352\n", "- To find out more about reporting a sexual assault at USF, visit [USF’s Callisto website](https://usfca.callistocampus.org/)\n", "- For an off-campus resource, contact [San Francisco Women Against Rape](http://www.sfwar.org/about.html) 415-647-7273" ] } ], "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: nbs/1. Why are we here.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "You can read an overview of this Numerical Linear Algebra course in [this blog post](http://www.fast.ai/2017/07/17/num-lin-alg/). The course was originally taught in the [University of San Francisco MS in Analytics](https://www.usfca.edu/arts-sciences/graduate-programs/analytics) graduate program. Course lecture videos are [available on YouTube](https://www.youtube.com/playlist?list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY) (note that the notebook numbers and video numbers do not line up, since some notebooks took longer than 1 video to cover).\n", "\n", "You can ask questions about the course on [our fast.ai forums](http://forums.fast.ai/c/lin-alg)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. Why are we here?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Note: Future lessons have a lot more code than this one**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Why study Numerical Linear Algebra?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Key Question of this course**: How can we do matrix computations with acceptable speed and acceptable accuracy?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A list of the [Top 10 Algorithms](http://www.cs.fsu.edu/~lacher/courses/COT4401/notes/cise_v2_i1/index.html) of science and engineering during the 20th century includes: the **matrix decompositions** approach to linear algebra. It also includes the QR algorithm, which we'll cover, and Krylov iterative methods which we'll see an example of. (See here for [another take](https://nickhigham.wordpress.com/2016/03/29/the-top-10-algorithms-in-applied-mathematics/))\n", "\n", "\"\"\n", "(source: [Top 10 Algorithms](http://www.cs.fsu.edu/~lacher/courses/COT4401/notes/cise_v2_i1/guest.pdf))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are 4 things to keep in mind when choosing or designing an algorithm for matrix computations:\n", "- Memory Use\n", "- Speed\n", "- Accuracy\n", "- Scalability/Parallelization\n", "\n", "Often there will be trade-offs between these categories." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Motivation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Matrices are everywhere-- anything that can be put in an Excel spreadsheet is a matrix, and language and pictures can be represented as matrices as well. Knowing what options there are for matrix algorithms, and how to navigate compromises, can make enormous differences to your solutions. For instance, an approximate matrix computation can often be thousands of times faster than an exact one.\n", "\n", "It's not just about knowing the contents of existing libraries, but knowing how they work too. That's because often you can make variations to an algorithm that aren't supported by your library, giving you the performance or accuracy that you need. In addition, this field is moving very quickly at the moment, particularly in areas related to **deep learning**, **recommendation systems**, **approximate algorithms**, and **graph analytics**, so you'll often find there's recent results that could make big differences in your project, but aren't in your library.\n", "\n", "Knowing how the algorithms really work helps to both debug and accelerate your solution. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Matrix Computations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are two key types of matrix computation, which get combined in many different ways. These are:\n", "- Matrix and tensor products\n", "- Matrix decompositions\n", "\n", "So basically we're going to be combining matrices, and pulling them apart again!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Matrix and Tensor Products" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Matrix-Vector Products:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The matrix below gives the probabilities of moving from 1 health state to another in 1 year. If the current health states for a group are:\n", "- 85% asymptomatic\n", "- 10% symptomatic\n", "- 5% AIDS\n", "- 0% death\n", "\n", "what will be the % in each health state in 1 year?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"floating(Source: [Concepts of Markov Chains](https://www.youtube.com/watch?v=0Il-y_WLTo4))" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Answer" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0.765 ],\n", " [ 0.1525],\n", " [ 0.0645],\n", " [ 0.018 ]])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Exercise: Use Numpy to compute the answer to the above\n" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Matrix-Matrix Products" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "\"floating(Source: [Several Simple Real-world Applications of Linear Algebra Tools](https://www.mff.cuni.cz/veda/konference/wds/proc/pdf06/WDS06_106_m8_Ulrychova.pdf))" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Answer" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 50. , 49. ],\n", " [ 58.5, 61. ],\n", " [ 43.5, 43.5]])" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Exercise: Use Numpy to compute the answer to the above\n" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Image Data" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Images can be represented by matrices.\n", "\n", "\"digit\"\n", " (Source: [Adam Geitgey\n", "](https://medium.com/@ageitgey/machine-learning-is-fun-part-3-deep-learning-and-convolutional-neural-networks-f40359318721))\n" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Convolution" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "*Convolutions* are the heart of convolutional neural networks (CNNs), a type of deep learning, responsible for the huge advances in image recognitionin the last few years. They are now increasingly being used for speech as well, such as [Facebook AI's results](https://code.facebook.com/posts/1978007565818999/a-novel-approach-to-neural-machine-translation/) for speech translation which are 9x faster than RNNs (the current most popular approach for speech translation).\n", "\n", "Computers are now more accurate than people at classifying images.\n", "\n", "\"ImageNet\"\n", " (Source: [Andrej Karpathy](http://karpathy.github.io/2014/07/03/feature-learning-escapades/))\n", "\n", "\"ImageNet\"\n", " (Source: [Nvidia](https://blogs.nvidia.com/blog/2014/09/07/imagenet/))\n", "\n", "You can think of a convolution as a special kind of matrix product\n", "\n", "The 3 images below are all from an excellent blog post written by a fast.ai student on [CNNs from Different Viewpoints](https://medium.com/impactai/cnns-from-different-viewpoints-fab7f52d159c): \n", "\n", "A convolution applies a filter to each section of an image:\n", "\"CNNs\"\n", "\n", "Neural Network Viewpoint:\n", "\"CNNs\"\n", "\n", "Matrix Multiplication Viewpoint:\n", "\"CNNs\"\n", "\n", "Let's see how convolutions can be used for *edge detection* in [this notebook](convolution-intro.ipynb)(originally from the [fast.ai Deep Learning Course](http://course.fast.ai/)) " ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Matrix Decompositions" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "We will be talking about Matrix Decompositions every day of this course, and will cover the below examples in future lessons:" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "- **Topic Modeling** (NMF and SVD. SVD uses QR) A group of documents can be represented by a term-document matrix\n", "\"term-document\n", " (source: [Introduction to Information Retrieval](http://player.slideplayer.com/15/4528582/#))\n", "\"NMF\n", " (source: [NMF Tutorial](http://perso.telecom-paristech.fr/~essid/teach/NMF_tutorial_ICME-2014.pdf))" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "- **Background removal** (robust PCA, which uses truncated SVD)\n", "![background removal](images/surveillance3.png)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "- **Google's PageRank Algorithm** (eigen decomposition)\n", "\n", "\"PageRank\"\n", " (source: [What is in PageRank?](http://computationalculture.net/article/what_is_in_pagerank))" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "- List of other decompositions and some applications [matrix factorization jungle](https://sites.google.com/site/igorcarron2/matrixfactorizations)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Accuracy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Floating Point Arithmetic" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To understand accuracy, we first need to look at **how** computers (which are finite and discrete) store numbers (which are infinite and continuous)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Exercise" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Take a moment to look at the function $f$ below. Before you try running it, write on paper what the output would be of $x_1 = f(\\frac{1}{10})$. Now, (still on paper) plug that back into $f$ and calculate $x_2 = f(x_1)$. Keep going for 10 iterations.\n", "\n", "This example is taken from page 107 of *Numerical Methods*, by Greenbaum and Chartier." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def f(x):\n", " if x <= 1/2:\n", " return 2 * x\n", " if x > 1/2:\n", " return 2*x - 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Only after you've written down what you think the answer should be, run the code below:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x = 1/10\n", "for i in range(80):\n", " print(x)\n", " x = f(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What went wrong?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Problem: math is continuous & infinite, but computers are discrete & finite" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Two Limitations of computer representations of numbers:\n", "1. they can't be arbitrarily large or small\n", "2. there must be gaps between them\n", "\n", "The reason we need to care about accuracy, is because computers can't store infinitely accurate numbers. It's possible to create calculations that give very wrong answers (particularly when repeating an operation many times, since each operation could multiply the error)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How computers store numbers:\n", "\n", "\"floating\n", "\n", "The *mantissa* can also be referred to as the *significand*." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "IEEE Double precision arithmetic:\n", "- Numbers can be as large as $1.79 \\times 10^{308}$ and as small as $2.23 \\times 10^{-308}$.\n", "- The interval $[1,2]$ is represented by discrete subset: \n", "$$1, \\: 1+2^{-52}, \\: 1+2 \\times 2^{-52},\\: 1+3 \\times 2^{-52},\\: \\ldots, 2$$\n", "\n", "- The interval $[2,4]$ is represented:\n", "$$2, \\: 2+2^{-51}, \\: 2+2 \\times 2^{-51},\\: 2+3 \\times 2^{-51},\\: \\ldots, 4$$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Floats and doubles are not equidistant:\n", "\n", "\"floating\n", "Source: [What you never wanted to know about floating point but will be forced to find out](http://www.volkerschatz.com/science/float.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Machine Epsilon**\n", "\n", "Half the distance between 1 and the next larger number. This can vary by computer. IEEE standards for double precision specify $$ \\varepsilon_{machine} = 2^{-53} \\approx 1.11 \\times 10^{-16}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Two important properties of Floating Point Arithmetic**:\n", "\n", "- The difference between a real number $x$ and its closest floating point approximation $fl(x)$ is always smaller than $\\varepsilon_{machine}$ in relative terms. For some $\\varepsilon$, where $\\lvert \\varepsilon \\rvert \\leq \\varepsilon_{machine}$, $$fl(x)=x \\cdot (1 + \\varepsilon)$$\n", "\n", "- Where * is any operation ($+, -, \\times, \\div$), and $\\circledast$ is its floating point analogue,\n", " $$ x \\circledast y = (x * y)(1 + \\varepsilon)$$\n", "for some $\\varepsilon$, where $\\lvert \\varepsilon \\rvert \\leq \\varepsilon_{machine}$\n", "That is, every operation of floating point arithmetic is exact up to a relative error of size at most $\\varepsilon_{machine}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### History" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Floating point arithmetic may seem like a clear choice in hindsight, but there have been many, many ways of storing numbers:\n", "- fixed-point arithmetic\n", "- logarithmic and semilogarithmic number systems\n", "- continued-fractions\n", "- rational numbers\n", "- possibly infinite strings of rational numbers\n", "- level-index number systems\n", "- fixed-slash and floating-slash number systems\n", "- 2-adic numbers\n", "\n", "For references, see [Chapter 1](https://perso.ens-lyon.fr/jean-michel.muller/chapitre1.pdf) (which is free) of the [Handbook of Floating-Point Arithmetic](http://www.springer.com/gp/book/9780817647049). Yes, there is an entire 16 chapter book on floating point!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Timeline History of Floating Point Arithmetic:\n", "- ~1600 BC: Babylonian radix-60 system was earliest floating-point system (Donald Knuth). Represented the significand of a radix-60 floating-point representation (if ratio of two numbers is a power of 60, represented the same)\n", "- 1630 Slide rule. Manipulate only significands (radix-10)\n", "- 1914 Leonardo Torres y Quevedo described an electromechanical implementation of Babbage's Analytical Engine with Floating Point Arithmetic.\n", "- 1941 First real, modern implementation. Konrad Zuse's Z3 computer. Used radix-2, with 14 bit significand, 7 bit exponents, and 1 sign bit.\n", "- 1985 IEEE 754-1985 Standard for Binary Floating-Point Arithmetic released. Has increased accuracy, reliability, and portability. [William Kahan](https://people.eecs.berkeley.edu/~wkahan/) played leading role." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"Many different ways of approximating real numbers on computers have been introduced.. And yet, floating-point arithmetic is **by far the most widely used** way of representing real numbers in modern computers. Simulating an infinite, continuous set (the real numbers) with a finite set (the “machine numbers”) is not a straightforward task: **clever compromises must be found between, speed, accuracy, dynamic range, ease of use and implementation, and memory**. It appears that floating-point arithmetic, with adequately chosen parameters (radix, precision, extremal exponents, etc.), is a very good compromise for most numerical applications.\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Although a radix value of 2 (binary) seems like the pretty clear winner now for computers, a variety of other radix values have been used at various point:\n", "\n", "- radix-8 used by early machines PDP-10, Burroughs 570 and 6700\n", "- radix-16 IBM 360\n", "- radix-10 financial calculations, pocket calculators, Maple\n", "- radix-3 Russian SETUN computer (1958). Benefits: minimizes beta x p (symbols x digits), for a fixed largest representable number beta^p - 1. Rounding = truncation\n", "- radix-2 most common. Reasons: easy to implement. Studies have shown (with implicit leading bit) this gives better worst-case or average accuracy than all other radices." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Conditioning and Stability" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Since we can not represent numbers exactly on a computer (due to the finiteness of our storage, and the gaps between numbers in floating point architecture), it becomes important to know *how small perturbations in the input to a problem impact the output*.\n", "\n", "**\"A stable algorithm gives nearly the right answer to nearly the right question.\"** --Trefethen\n", "\n", "**Conditioning**: perturbation behavior of a mathematical problem (e.g. least squares)\n", "\n", "**Stability**: perturbation behavior of an algorithm used to solve that problem on a computer (e.g. least squares algorithms, householder, back substitution, gaussian elimination)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Example: Eigenvalues of a Matrix" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1. 1000.]\n", " [ 0. 1.]]\n", "[[ 1. 1000. ]\n", " [ 0.001 1. ]]\n" ] } ], "source": [ "import scipy.linalg as la \n", "\n", "A = np.array([[1., 1000], [0, 1]])\n", "B = np.array([[1, 1000], [0.001, 1]])\n", "\n", "print(A)\n", "\n", "print(B)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "np.set_printoptions(suppress=True, precision=4)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "wA, vrA = la.eig(A)\n", "wB, vrB = la.eig(B)\n", "\n", "wA, wB" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "hidden": true }, "source": [ "**Reminder: Two properties of Floating Point Arithmetic**\n", "\n", "- The difference between a real number $x$ and its closest floating point approximation $fl(x)$ is always smaller than $\\varepsilon_{machine}$ in relative terms.\n", "\n", "- Every operation $+, -, \\times, \\div$ of floating point arithmetic is exact up to a relative error of size at most $\\varepsilon_{machine}$ \n", "\n", "Examples we'll see:\n", "- Classical vs Modified Gram-Schmidt accuracy\n", "- Gram-Schmidt vs. Householder (2 different ways of computing QR factorization), how orthogonal the answer is\n", "- Condition of a system of equations" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Approximation accuracy" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "It's rare that we need to do highly accurate matrix computations at scale. In fact, often we're doing some kind of machine learning, and less accurate approaches can prevent overfitting.\n", "\n", "If we accept some decrease in accuracy, then we can often increase speed by orders of magnitude (and/or decrease memory use) by using approximate algorithms. These algorithms typically give a correct answer with some probability. By rerunning the algorithm multiple times you can generally increase that probability multiplicatively!\n", "\n", "**Example**: A **bloom filter** allows searching for set membership with 1% false positives, using <10 bits per element. This often represents reductions in memory use of thousands of times. \n", "\n", "\"Bloom\n", "\n", "The false positives can be easily handled by having a second (exact) stage check all returned items - for rare items this can be very effective. For instance, many web browsers use a bloom filter to create a set of blocked pages (e.g. pages with viruses), since blocked web pages are only a small fraction of the whole web. A false positive can be handled here by taking anything returned by the bloom filter and checking against a web service with the full exact list. (See this [bloom filter tutorial](https://llimllib.github.io/bloomfilter-tutorial/) for more details)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Expensive Errors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*The below examples are from Greenbaum & Chartier.*\n", "\n", "European Space Agency spent 10 years and $7 billion on the Ariane 5 Rocket.\n", "\n", "What can happen when you try to fit a 64 bit number into a 16 bit space (integer overflow):" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAUDBAgICAgICAgICAgICAgICAgICAgICAkICAYHBwcI\nCAgHChALBwgaCQcHGCEYGhERHx8fBwsgIBYeIBwSEx4BBQUFCAcIDAkJDRIMDQwSEhISEhISEhIS\nEhISEhISEhISEhISEhISEhISEhISEhISEhISHhISEhISEhISEhISEv/AABEIAWgB4AMBIgACEQED\nEQH/xAAdAAACAwEBAQEBAAAAAAAAAAACAwABBAUGCAcJ/8QAUhAAAQMCBAMEBQgGBwUFCQEAAQAC\nEQMhBBIxQQVRYQZxgZETIqGx8AcyVcHR1OHxCBRCUqSlFRcYI2KS0zNERXKTJTQ1Q3UWU1RjZISU\nldIk/8QAGAEBAQEBAQAAAAAAAAAAAAAAAAECAwT/xAAiEQEBAQEAAgIDAQEBAQAAAAAAARECEiED\nMRNBUWFxgSL/2gAMAwEAAhEDEQA/APjJRRRBFFFEEUUUQRRRRBFFFEEUUUQRRRRBFFFEEUUUQRRR\nRBFFFEEUUUQRRRRBFFFEEUUUQRRRRBFFFEEUUUQRRRRBFFFEEUUUQRRRRBFFFEEUUUQRRRRBFFFE\nEUUUQRRRRBFFFEEUUUQfo7PkP7UOcWjhnrC8fr3Dhprribo/6iu1Vv8AsrXT/wD28O+8r7ZwbAQH\nOBz5b5gJbOostTGDujbkvV+GOfk+Hx8gnaz6J/juG/elY+QPtb9E/wAdw370vueg2ei1Uqcn2Kfh\njWvhFv6P3a4/8I/j+GfekbP0ee2B04P/ADDhf3tfetNsbdFtpMBIssfjhr4AH6OnbL6G/mHCvvaY\nz9G3to4SODW/9R4T9eMX9CaLCbbLTRpQRayv44a/ngP0ae230L/MuE/fEQ/Rm7b/AEJ/MuEffF/R\nqk0zcRy7k1gv9a42Y0/nEf0Yu3Gn9CfzLg/1YxF/Zg7c/QfT/wAT4P8AfV/SCgeVu9aGGPKVGsfz\nY/sv9uvoP+Z8H++qv7L/AG6if6D/AJnwf76v6VCoLoqZt0RMfzUH6L3br6D/AJnwf76r/su9uvoP\n+Z8H++r+lxVBylpj+aX9l3t39B/zPg/31Cf0YO3X0H/MuD/fV/S3NdC56pj+aR/Rj7cD/gf8y4R9\n8VH9GXtwP+CfzLhH1Yxf0me5Ie625jTkrF8X83Xfo09thrwX+ZcJ++IP7N3bT6G/mPCff+tr+jFZ\n0iIjms1VxNo0W/CHi/ne79G/toP+DD/9lwn74qP6OPbP6G/mPCtv/u1/QlzjrB+ClVH3nTVbnxxm\nv58H9Hbtj9D/AMw4X97VH9Hjtj9EfzDhf3tf0Df7ktzGq/ijfi/n+f0ee2H0R/H8L+9Kh+j12wP/\nAAj+P4X96X3+T7ELWztron4oTl8Cj9Hftj9D/wAw4X97Vn9HTtl9D/zDhX3tf0DpNAsNXWHerey1\n/NZvxyL4R/Ps/o6dson+hrf+ocL+9qh+jr2x+h/5hwv72v6CMBM6/OVZNL5T77lZ8IzeX8/P7O/b\nH6H/AJhwv72hd+j12wGvCNLf+IcL+9L+gT2Eam2v1bJD9b3v7IXSfFF8XwJ/Z57YTH9EfzDhf3tT\n+zz2wt/2Rrp/2hwv70vvZl/HW231KvS7ck/FDxfBP9nztfp/RH8fwz70qP6Pva/6I/j+Gfel97vd\nqRdJfon4oni+DXfo/drhrwn+P4Z96Q/1A9rfon+P4Z96X3ZUcDE6z7Ekkyb2JT8UMfDDvkE7WDXh\nP8fw370l/wBRPar6K/juG/eV9zucb/urM+esdwUnxxl8Q/1E9qvov+O4b95Qn5De1P0X/HcO+8r7\nYrOkQdNkh17b7LV+KQfFh+Q/tR9GfxvDvvKE/In2n+jP43h/3lfZxfHfoe9Iq2N99FJ8UHxv/Up2\nm+jf43h/3lUPkV7TfRun/wBZw/7wvsN52AS33m/gp+KI+Pv6mu0v0b/GYD7wh/qd7R/R38XgPvC+\nvq/LlokuGsnvU/HDXyJ/VD2i+j/4vA/66r+qPtD9H/xeC/119ZmIPek1dN/Ba/FFfKB+SftAP9w/\nisF/roD8lfHh/uH8Tg/9dfVJHxus9RxU/FB8uO+S7jo1wP8AE4P/AFks/Jpxsf7if/yML9VZfUFf\nnHislSTf2yl+OD5nd8nPGhc4J3/Ww3+qln5P+MD/AHJ3/VofVUX0pUnbN5pDp0k+e6z+MfNx7C8W\n/wDg3f8AUo/6iF3Yjio1wjv+pR//ALX0RVnmfNIcDuT5qeC4+i8IyS4nd7p74WgM6JWHacz4gtzC\nO/LdaxTO1/FevXllUxmi10dQhYzTn5p9KldY6uukp1Bstk87LdTZEWlKw1DbkZ6LfRpkfgsxYNgN\nrLVk306KmMtfZNAJAcfCdVi9KOm0jx9iaWHnYXgeSWwApjWDa1oPfMrlWoJp3P4hNpg7adVGUzFr\nqgXDqstrc6LbSownXW+nJW6nZCGQY6abIezWm+u/1K3G5hLLJ3vqraZHK6EMBPRKqH1fco4xEJTw\nT4JFA8lKqg622TXbCdUqoLHv0C3IuslV0Tfn71neCeS1VGgg2OqQ/wBXpaFoZnNMRB87eKQ9hkbT\npF4T67p0CTiRb3de/mtzpislUGbKg345poAtOvsRFnLXpaAr5NB9FZEykf2SiE6m+n4oCTtzlL22\ndJnu5c+itzHjUkA6QOSS07g669Fbau0yeunVZvSznTGhw5GTZA8Dl+SJ1SI5TIKRUcTGwH5pEsG9\nvIrNUBlObfSY/BJqDS569y1rLI8kEgaHVSbDqreAbwRtyS4Me7orKKLhoNSUovIm/wCShIBGp6oK\njh175v3JahTxJ1sCDbvQVT15+9XUfy96Q65vskqWrc+AZus9R5EHojeTokv/AAVZKe/2pbzAJgdT\nv4InHRKde/groS8mxFvs5pdRx+OSZUZ1j60stnUdEC3tJ03SjTMfinkeXLZZ3gSbKJS6oEWv36pM\n+1Pe2yQR0hSIz1fFJdZPq9SkvWljLUGvl9azvJ0Wmo3n4pL+ntWVZag5rJWp6i+kra88/wAlnrMv\nqrRiqjvSaoun1R5C3XvWd9vdBWRlqCPNZnla64sstQQSmLK+mKbR6oEC3K+kT3p1Fulvjql4Sk4T\nJmdOYW7D0CdPGdVrrqPIOhTB21+LLZTpRFp2Q4ejsfgLdSYQbBc7WuRMp/vDyWqjSjuQlPolZtdI\nJlOU1tMxeY77JlDyTxSsdYJWNWECkLTbqEdOmLkRBTMvId07Ii02iLahZaAwkG0pu55BLGtz5WVh\nonUwi6IE3kRGl1QfJkBBUbYoc0W840RRCdvbeyqoqJMeKF5I5ePxqihe6LRc6fggBO8hU8k6n7fB\nDczr4qwR5S80zrzVOn8UhwvO3etxIXXqnqPj3JNWTF5PsTXtmZ35qhTtb43RrYQ5tiN5VGjNjNlt\nY0G5VVaon1QDa6eSubUZASQ+8xYWiVrxzyNWwCuW98Sdvi6nk3hrqsm9gLQqdVnS34LBUqHz5IRW\nI6d6s6i5rc5/f4WUa4mO7RYTW/xJjXbzJAidlG76je11vqQVH6cllZUPO6jqvx15rTlWh9WNNR5J\ndSuTp8DVJc/Qb7lLL41+N1WR1DKU7TdC6tFvbKTUqC9ygt7+WoQ1XmPylU8zOk8wkF/cVUQu84SK\njeuuoTajeYHO2sLO8xzKrFUec30Wd7jomvFrd6UVqBYMEW6Jbjp8bonNO53lLImAO6fyVAudPhp+\nPNLcT+SMj2FJcdZWoBcZkT9qXU8EbhZZ3W9qylR5gbykvMpjzBSnn46KRCX8/Kb2SahHNOPn37dE\nl4I2F1vmhFaVnqbp9Qfks1Qws1dKeFlrR5BaHFZ6rd+atVles+IbF99+5aqjfiUl+3VYGGqkVBut\nlQSYWWppGv1JSPqmlRtcLXSpAR8eapogSdk1iy8x9KlF9eXcntAS2d/VMaDYxbT61Mbkw1nLZOps\nQMF4Gy10h4LKjoifBamVNvJJpiO9NidNlzrQkDu+Dv16I2+1A436hFAmMEnRWATqiAhAFRsfWlZe\n/qE/qUpz9xEct0aDB6/gge1EXxpv+yUsVOnX4KKB406aISw5Y5o84B5cjyVVHk9VYpD9B01WY3m2\nu61VHWSWnVaZKFP3bom07W0VwnU6U2JUtXACkIidUdPDR+wTJseiaaUjYRz0S8PxXC7VmToRm3Cz\nW5A4jBF4h0CNF5nieGNMmbTp1ScV2mrekPreq1+gGt0XFcd6d2c+rAsO8LM9ukuORVqb9I5bpNOt\nrI9v2p+KYADdc6sQNVvwZ8pG+m8DkURxTQSOa4r6hHcoKpN4W+ecZveu2MU3VQ4kSuGzEcgjGIPP\nRakZ12P1kKqlaVyXVtyVPTRBGm6LrpFw5ylF0wkmuHQRorkeSJ5Cc481QfEpebb2KMf4IyIH4+NE\nB7kJd5JbqnkqKc/8kl0o3QlOdcX2VlAudzSs/LY/V7UVWpzSS4HvGncqyokhJcic/fZLJVUNTbVL\nnx1TCRbkNUioTJ5bIKdyS536K/eqeb+CIQ7dLfoFbjZJefeqFVHbJBCeW6pNQRpqiUtwhIe2dh4r\nRFo3S3Ka1GR7Gjbe/ks1UaX30WurN40WaobdUtGSoDJ8llqtieZWyoTB71lrqfofWAafzRtBmTdN\np0xrPfKY1m9ljXHnkbGzEJ7Bsgo31stI2hTWotjPsWigw+G6BkaEx3LS3WLxCxauHNCNqodytvJZ\naR56oQ6NkwgIQEEAVE3mEXsUbCkaUDF0tzeQsjkdUOvRVcZ67CIIAS3ag3jktfulJqmfNE0qoCRd\no6DolE2vaE17xmtyQlu096rTO4bFKe0jS60VAgbGk3TQovHK6bTdG5vYoH2uhc7NI6H3J9o8l8oH\nHzSNOnRqOaQ2Kkb96/N28ZeysHxebjmvQ9uOFPo1nPkuY4znN41suHwbhratQ5xmbElPFryb8PxX\n0hzfta2tqtf9JGPWfcLiYuiKbyGi0x4DRZX1tV0nEYtegfxM85CA41pF7nmuC2vG/mocR3LeRHYd\njBz81nOI0PnC5j8QD8X8FRryJnzS8jrnESNYU/WBGq5Irz0TDWkWOmvJDXU/W46j61oZWBHzvjl3\nLhvrRHfCKjiInlNx0/NDXWFfJJFxy5dQtVOs1zZGbrdckVfHfwS6eKyEQTDrEbApIrtmpurFTcLI\nHyL6j2o6b9tCVMGguQVHJZPjt9at52zRv+CCFxHX3pTjvp13VuIHM9Up/wASqI907JThvItaNwm6\nckp8HX2LTJbjYzISyB7ET/GEs76oAfCB1j0RIHiUA1Cl1DZMiUt4SBDuaS4SnvCU4bc1oJc0+aSQ\neQWipa06JTiAs2pShaZWd6bVekPBuVPtqEPHks1R21vBPqGVnduoM9S9llqNMrU9tz3LNWPxsiPq\ntte15up6fbSAsNCq43W+hQLiJG11K48io4hx3vomsxbx5rVQwgEIxhddNVn02LC4jN0ldGjWMwuZ\nTokarXh325rKz7dpkKySk4OoXCeSeFzranSfJRqsqKKtyp0fkrKoBUUR4KZUGYi2qE1SqJUgJFVw\n23uUZfrKzOqydERTxN48kDXRKt5KQ43ke1DTnGxSXkD8Ep1W8JbnjWCtYaKrVsliv6piNPeYVVKg\nNuiy1HAfHRXFcbtpiabaBa4Zi6zB11uvA8JcTXYGkgEwRzBXsO2+Z1FoYyb3PL7F4fBYg06rdocJ\nKW4ldLi2GknlJ9i4VanuOq9bjmy0EEEOkg964FWhdv8AikLcvpXIIPelPGq3PpxMdyQ+jfUaT4qy\nssubnspTI3mFC2/sQVFb0sMa/wAPFFTfrfVLAnT3BDedN1NRqDrwjzX02j67rPGlt9lowzoBsCQZ\ng62MFNbkacEdZ2Em99YhC62ZvO7eaGm4tc12UZb5o5HvRvf6zSOceHLvTRq4e9zmHcsMXOo+tac8\nO3uuXZtQOEi+k2vzWh1aNjGbyCsSuiKk/WhDtUllWCDaHe9R7yCD593NEPdzBug+LqZ+SF5lWIko\nZF9JlWZSnmPj3qiO8bpb0RQlAsoXKyUB2RFPPJKeEZSnPCFpZSqhHjKJz1ne+471SKfqkG/4Jj3X\nsk1HctVmhTzsEio6+qaXQkPI5KGlvO3NZ6oRVCkPcqpdUrNXTKjlnquKU19W4XDe/wBi6GFpwSb6\n27lno1csXWzDVhGqxXHlups0+NkynTmddbJLH6XWyg/SDdYdIW7CjzTqGFIjSE6k2+m1+i0sELNr\nUVRp5bDRNaVRIS31FhTELnDcwsOJqnnCQCT3c1odP0ojW6F+JA6LnsOXdSQdborWytmnL9nvUzCN\nYIOvVZxFjEqOqWi3kgbWvJGu/RZag9qs1Iknfw9iW582F0Slk+xC6fzROjldZ3uMrSJWdusbz006\n6pzpNys9Vp0MStQKcOXW2u3NJeeenjyTqkx3ckioSdSYHNaajHj6jGU3F8FsG06r884lVbmJAaBc\nxvK6/bXGPbVAmGtEj3LxdcuqOJEnzXO9/osev4FixWZk/wDdWVV2AQY0d9aDs/w5+HYxxcf74A5Y\niPsWvEwc0iZd5XWv0SubXpDMfKOuq59VonTp+C7NZgzm9wR7lixtP5sbyo05TqcyCNO5Jq0rrS9u\n41lIqkG6upgaTOfmjbRu7bdLD9L3mPNOz+sJ0dYe5AbacAc9fBPFJskxMR7UNEg5h0MDuunYW7iP\n3mDKOo1SqzPYRpcA+r156og0WOsO7k+oAWtEXvH/ADD4KytMkjWbgK6GYunYHk4/ghZU9U31F9/c\ntNOnmaQ9wAyZgdZPJZabcpIgQ4SElDMFUmRoYkTudPctDrjvt4rnMBEXOuvXl5LW18kfuPHk8Gy1\nrNPw7zoeUeSM9Fm0JvGaP8wTWW1uDorKmCsDcd0FVVIN9FTiTpsgkFaQQS6h+PrVlxQv1QpZ5e3m\nqnyRP5JTzARA1J3KQACjc9Ie66CnG6XU+O9U915SKtZQU9Z6jkVV3ks76t+QUsRVUpNQi91VRw2K\nTVddBdQhZqpn42RVH69yyud7kaSq8WHJZahnojqnVZ33VI+sqVYbkeSdSfcQVhzx4rXhzpaVhynL\nr0KkRK34eoFxw/QAx7loo1TdZ6jcd70kDQo2VgVzaFfSb96dSqjW3mudajYTcH2fYh9OCY8ikio3\naeisg67e1FwNZpcQCdELhEtjU6pnpR5bHXw6JOIqxt1QKe/KkHEg9EvFVLjlv9iyVB3lXDHTpV+X\nrIi52unvWClm31RmuSbnRMMac5J57SVTqgWSpiI6pRrbpi43mr6tkio/uWZtUmUh9SFZDGt9QAEz\nrsEqu+3MTqsr624JCW+vY3t71pLBvqXOq5/F8W+nTLmesR7LarQ+vItZZa7pBBEg2uqSvy7jeOqV\nXmbmbg9673Y2jQexzz61UatJ2XL7UYH0dUkHU37pW3sJGesG7jXpy7lwk/8Apq/T01VskHouZXua\ngi0D2Ls1gYHOdVzvRyXf8seMmV2tYc3Mc5MaQUBaTMjY+9an04zSOnkbIXgB4gasM/HNRqVxjRbM\nExAzD3QufWokECNS65XVLb2G512ScVTAIP7XMrn7dHIcyZt0CtjyQzoYW99NoYIs4uiO9ZcJTdBa\n4Qc5IPPkrOkw2k7K8SmB5a8f4TfuddAaZIzg62vsd1eIF37WHmBMremNIJBcJn9oLHiIY7ONdVqZ\nSd88QYDSTyBsbbocSxsAiPVdlcdTfQwluGaZnkZv+UgJOJbuOfKRB2R0wRIBHRpH7O0KFsw0Wm99\nsuquoN7AG/OaQ8elAaZhzPVynkYCAG9vmvHpGj/FoR3oJAzSPmuDidodyCItsWi7mHOw8wRok9oY\n5oc251kjaHjTuWzgeNZSe2pUotrjK8GnVMMLnMyjT4ssFB2o1Dhmb3j5w80TT6xG5Ae20afOgbJc\n/bU1oefnEazI80p03sIiyIdwQVHcvYunN9MdX2suj7Ep56FCXwJSK1WVqVk4myzVKsdyB9UrPUfJ\nWUFWqefJA6prISqlRJfUTQdSoPD61lq1JVVHSNVnJ6poZUqrK5+3JW8pLz1SUxHPWd71HO/JJqOT\nyTEqPlIqvVvclPciheUio/ZE9yS42Upj61osMSfxWrCtKy0n36rbSeIupWTwy3tTWPj7NkplXxHL\n61ootzDMYtsPxUakMZUn3ptKpGqgpjWItZE9ukLnVaGu1WqjUae8LC1h2UcHzv4KK01nNJtr7fyS\nK3VDkPU9d0BpE2lCfbPVbJht1baDhc+S20qIbEaonj4KrVYnM5hA9ka2Wuo4d/ck1b6jzSEYKl9j\nayU8xAuFoqU728b/AGLNWZIkzCqpUI2KQQbz4ImvAEbe1LfVzWK2gTH2DdBUGvJG0gGNeZ+xLqQC\nBeOqM6S7vSzP2J1SAlVDYnYb7KXrCPCdtix1SWu3hwOnhCrsPScKzzbIG3IRdpAPSGACHG/RN7J0\n8tX9oDLYbFcp76bv09UXRrfcc1ka351lrzXnokmp6pC645sZZAMnUzz1SK4AM8hput7cvqicrDDX\nu1j1rmyOvh6OaoA/OQQKRykZxEEidAs7+nSc/twKlM5mi17/AJpNfDmSHDeI6dF0atOH7erM/hzQ\nVGn1dzMk9NolZbYMZhqP6u5/pD6RroFPITLA0lxzDeViwjMzMzheARF9dO8LsYkNHpG+uGFrhfLm\nuNossGGLWk04PqBoHdE7brn9VfKWSMbqVgI0JBPfe3mmOpwSCNGgR36LeMLmJBgT82XDnqZV1cjR\nVBbmqEtGbZrWiSR/ildNTxc6kYa6JJc0t6t7oT8eBUYCGMZNJvzNT6Pdw3KHDNklskAzd2xOkxom\nsw803P8AVhvqkgwSCYIbN5Ut1cxhaHEWmWASBErQ4eqfrkcpv4oTR9G+Hf3YNPOCTdw5QN10qhFa\nnRZTYWGlRd6QveGl5BJzBp1Fx5K3o4n3WbHcGfQa1znU3sdDC+m8OALmCo1hH70ELIwH+7eASRmp\nmNTsO4x7l2K3D3jC0XkS1zS9j6IJyuY4l7a0/t5fZC1disTSoYsem9GKdem5pe8A5Q9shw/dcuU+\nXJa69fFNjz2EwVR/pQ3IPQevd+U5ZGbLPf7F6bs5hqoq18NhnYOr6XDgvqVSMsOHrCkX3a/Vcrj1\nGizF1G0XmrRzhnpIn1XQTduo18lq4jUwFD0jKA/W2VKAa2q+WPoVJvlDNRCnXVv1+1nMjg17EiQY\nLgO4OgGd0mqY+xdDheMo0vTenw4xGei5lPM8g06hMteI2XIdU5T4mV6uerufx5u5M3+hqVEiq7fq\npUqc0h9RdNcll/1pLn2VOqpD3pqLqvnRKqO6KVKnSEhzupWVxHuskOcre8T7Emo+9u9UwL6lkDn+\nxA959qU52qm4VHuSHOujcbmEs81EA5yW53O6MoHmFrVwk3nml5iAmPbugPTZQfXNDuWqmBFwsNM2\nWqm9Kw1UWRvC2Ug2QOaxU38+SfQdrA0vKjTe11u4omt3Wak6T8arQ1y51WhtO9kxrdBzS6Rk38E5\nl/P6lFGaYIj2qhRgbHlKtolMpOGkaI0zubAvCSQStxbImIukVR3IVhcyOncsznk7krbWB5LI6nGy\nsZJfbkCszn6j3LW+m7u6fGiQ5utrqtMlRvIpDzYxFtVsc0biFndIOjbLTOslSpeIlUSNNtU19KDZ\nLcyIVQuoV5ntTxwUQ6m0w46x7l6So1eF7dUgKkkXiZ59Fz+T6a5+3Ew+IfVqBvzpI+Lr33D8D6MA\n2zR9V1+ccEw9apWaKZiHAz0lfqFOQGzqGmT4LHx+17qqhj7EFuWys03EEgfN2QAkGRbKNDou7BTZ\n8Npteb6IDykzNr2AlXiOp3n1dAeSqqw26i0X8+SzY3Ec1mSdXAls8jrKRVd6QtkHMcobHSw9y34G\nowCDSNTNd7wYOWZIA5whx2GBc6rSHoqTcrm+kqDMQXbABco6eP7JwXDa2IeabGgEAkmpDQ0cjO65\nFKlFepECAJ/dkZhae5dijUdJy5iXk5w506uEZlkpeq+sHgFnpWgiBIyiWj2lRbJhdDDseHekDjAl\nuT2XKR+pPysqBoLC4gS4TLbmwM6BasdT9aWnKyA8R6oHNp5mUp2Im7oED1QGwXTqCO6VZKep6OpY\nN9alXrFjWUqRaDlj1nEeq0jXWFzajWuacurYMHctHrADdPp1wxlSn6MFzwRnD3SJMtOWYJgHzS6d\nCcrMzQZAYf2Q55vnesTferOpZP3XOdLqjPnOdIDbCejb2AXSqY01C52JDajyW5spyEAerksLaBMx\nvBzT/WZl/wCrmmw1qTgaIL4kzM7rDji4uEmk+GBoNP5paP3ifnFa56nVxq85P+rrY4jM2mX06RJc\nKYeXNacuV0ncrCwj1ffMm5mL6hdjhfFqdKk5lbC0sT6sUs393khxcdPnIWegxtZ16eCcfSVg53+z\nyxDcO1o/aOvgpJeb9emc859q4SytiXjCUn02DEEMPpPmerLhmIHqjXTkldouE/qcB2IpVKmZzXUq\nU+pl0vvK5tb0lMw6WHURLd7ETcaLJVrSS7e5J+cZPetzm75b9pOs58bKp9RIc/ZVUclPK9Dj0lR6\nz1HK3EpTwozFVOiS9XUOqXmQ5U8pTzf4hW96BxRSXnpHNAfqRuNo5pLrKoU4mfcgTHtUyjXZZpSC\nEJEJrmwluGiIU9qAjbomPCFxVUg9UuodSmuSaghXR9W0n2aFppVBzXLpVLLTh6lxdRwjr03z+Kex\n50gQLrmtdJB30+xPZUvBt1R1jp0qgOtlppPEa3XNbUBEeS0YYiyxWo6THea0UXHdYqL1oYdLLCxu\na6SBp47Jrmzppyjfms1N3insdKLiOok3IBSKjSIkSTotWaL+GntQPbbrNu5GmOq2PBIyW6rZVA6+\nKyuF9IhAh3TVZ6zJ5z8WT8Q4ja2/NZC8+3xRNA9h0ss1VpCfVudD1lZqxjRbiMztDIhKEJ1U+33p\nNQjcqlZ8Q6A5xk5QTC/N+1GLdUcJJzGY6DkvcdqsQW0Ja4NnnqQvzHG1QSTM6i64/N1+muY73Yem\ncz3R8wXK9eCYlcDsDRb6B75nM4bctQvQmjrddPj+mL9+iiSBHraweUJbzaJ+1Ma+AQTAdYjmmZBp\nFtgVtGR7bCDB6oTTvYmN/JaXUvj7FQpkkjciBFt1LFJw82IcA4gt9b61TAHTmaDsHToeic9kHL5j\n8Uv0c30uo1OsUajiwwwZmH1njl/i5lZano2H+7BOZvr+luCTu3kFqqjK4ta4lsattPTqsFQ6n1r6\njbks+K3puwHBnVGF5xGGosYDHpX3vfK1ouSuXVdD/nEwYzatIGpE3AVOMQLX5/YU2tSgF4Z6Rgpk\nkzES4Akc7qSWX7b8tjLULCCSAHAnQkEj9m26Q6qIiSDEE7E8k7E4osYWS1wqgT6slo2aHbLIMY/0\nXoi2mBmzSG+sfFaZvtqwjazmYkUafpmBgNcNa45GtcC2IsHylcU4bUwzKdR5pllZmdr2OzNP+G+j\nvsTeHcS/VWF9OtUY+q4MfSpmA5gd6wfY2WYvq4irWqspF4IqVi0kZQAMrnNzQNAPJcc6nTvfG8/2\nhwXomVJxNN1SmaZORjw18keo8kdVXCcGzE+lb6T0dRjHPpgtL2lrbuBcNHWXK9M0G8kWMCRMtuiG\nNezMKTnU2v2Bg5IgtJ/dXW89X6rjOpL7M4jxCriKnpKr31HhoYHOn5jQA3XT8Via8AknTcIHzMyU\nD3wt885HO9b9rM6dY6JM6xstFXFg0m0vRsGV5f6QD+8IOgJWOo5JUqn3uNUp5I1nx0RGI6pVRaZo\nSlPRu70p7rSihdM6ygqH2oyEOX42QKLPtS3ck8goCzzQKa0jVDCY4wkucs0oXG/clONoTCSB3pSI\nWgeUxyzvN+iIF5KRUKc53lz5pFR3hf2KkfTdKoIHTVaKbrhcqnV0OxWunVv8QtOcjqsq8imseRqZ\nlc9lVNbWM2i9lHSOnTrRy+xa6FWwM2XJpx1lPpviLws1qOzSrkn61sbVO5XCp4rKrqcQy6LGLHpK\neIHNMdii2xjwK8sziB11sm4PGZnXGvMq4uvU0sW06+WyJtQm4INog/Gq4dGsT0Gi0sqgaOus9RrX\nUa05ZJvySagPwVkdjIGpASK+KJBFhdZkS1oq1gOp0gLJvob3Wc12MPU7zZaG1RGxVRnqucgqu2hP\nriSCICU+8rUoyuE+Cy1hZ1pgE381qcRyHKFy+NcQbSpvJIBLYDbfEK300/POPcZe8va8mA4gDYdA\nvJYmoS6GyS4iANdbBdHizXOc9+gJJhaexGD9JimOdENk33IvHevLL5dNdeo/Qez+G9FhqLC3Kcsu\n8b+a2RrdJNQeJvf2aIm1CNrL2SenLRPpSNghLT0smB5KWdeXRTQYcDqgfGwuLyPJCe+Ty+1GwGE0\nVWdYCL7lKsIB2TnG07rO5wBkp9qTWEnRZ679uqa6oFmq1GA7nu/FEIqDW+/j11Saj/W5iIyknKQd\nZG6Ks761jeRMnZLNINgpvHrVsgvAiXSNB3LJVdLB6xLgYPq2A2PUqqriZ6keASXG31bDuRot7okE\nxoRG9wTdDjcQwvPos9OkRDWucSbgZm22mfNLqO2G+2yUZ35z4rUiahJ/dMCL6gDTwCFrS4gNvYzb\nYFF+sPax7A4hr4zDnBmehSS8j1gYMRa0+Sns2Aqnvn6kqoVHG3xogqOstJgC+58PYhUcVHnRNTAO\nshcZ/BUXEoXk/Wka0t7Z0PmhnaPJG8jcIHdyIoAKnO0AV6JRsfBESo6DslZjJKJzvd9aW5ZtA1Cl\nlyOqdkgn8FEVUd+SVsfjyROdulOcqKft7Ut5GnX2IX1EGbc8lTFF1h3pFZ47rRdG51vrWeu6RooP\noajXad5Gy1U64mN/YvH0scToLrdQrPmZ6Qt6zj19Gv3HuWlj1wsJV0W6jXBKVOXXD48URJ2Kw0ao\nmNlspkac1itylurOCsPcd040Z6o6VGPsWdUVIEBaaDY9afBU1rSRpbWVobh5i8CduUaKtSCD3EWM\nJrXG9yOt1ZaAbZuiMuGkmVnpaFz7TOugWIuPziSdikcVxLKYGYxyXmeJdo2wW0tZ+Cskj09TFspm\n7p9vvS3doqTbFwkneNIX51iuIPeTLzM3HVINSSJmOeq1hj9NbxxjzDXtJGg5rdgcb6TX2EL8ww+a\n2XbQru8DxTqZgyRumJHtcXWDWOcS0Q1xkCNB1X4zxfidRz3FznO9Z0E6ROy7XHuPVK1R7DLabXOa\nI3XDdh2Vh6rXnnB0815/k6125kcXE4/qNfgL1vye4Jr82Iky2WluwJvK8xh+EB1YMqF7KZd86Nph\nfrHB+F08LSbSp/NsZjUkdFr4udY7q8mhjwVPmNbJ1WxS517l6Ncl4c2Vki/xCW/TdZcRWLT3jRRW\nwER71VTEMb0EbrE2qS3Q96y40EgCTHVFaqvEGDT3rFV4iSbLEaQEb+C0UsM06hMFtqHXVCRJmE4s\nGmw0QlsCVqMkuCRWpgplSoEsvF1RirNj7FkrVJ2jqttdqw1aZPco1GdsRb8UDimuYeXigIWolIIQ\ngBNefsSaiUwt5hILvyTnjRJKzFC4wl1jumEoKhvdVATZA42vr9SupzQEhVA1HBAXclTz8dEsu89k\nFud1lA/6lRdCUXLOiybJedBUfslOeoT2Iv5pbnadxQF6VVPirDBmpPck1HaKidksm/JUxbnJT5nV\nFUcNUkn2+5NFVHeSS/nmVPfCW9/VQx+w4djY1v0Wuk+PxWN78tykVsf0BK0z6d2hiIOoXRw9bQyv\nEtx7wtWH4k8C5Pcl6PT3OGrj97fbXwXSo4sDffdfn9DiDjED2wurg8aS4SFNHr3cTAjc6StNCu9+\n9lwsG9hGi6YrtYBchZ8VvTr0mDmmPqlgytPSfauVS4g217afimUsay/rDXzQnbSceR6riUjGccFJ\nrgLktS61RpEAgH2lYMZgg67ip461OnmOPcRqVXxLv+XZcgB0n1j4r01XgpLhqRqY5JGK4Q+ZDTB5\nqY1OnCc5NwoJ5rps4QReCtVLAOkWt3b9VU1lwrnW5aLuUcS0AA6peH4cSBIJttz28UY4e8GS0jkU\no8d2spmnWcQSWkErif0nUZEAwb+xe84xw5r2OLyRkY6bexfneLGcwCeQ2kdV5u+crpKc3j1R7xmu\nBGvKV+v8CxdOphqbmGWkAeIEFfjHDOC1azjkDnQQHBouATqF+08G4ezDYalQYcwYBJPzsxEmVv4v\n8Z6NfU6JDnp9YdfBc7EErs5ml5vCQReT3JRrPGk96pz385HJUaSZEAxCU9vO5SQ683RGrAmfBFXk\nbr4InN6pLqnqxzuqNTT3oVocbpL3aoHP6oc+2quIVUCyvZmkbdFrf1SXWPxooMtSnobwUNRo/O6O\npF+miBz+9FjO9p5WSKjU+q74Cy1jC0FPSKgt8c06o5JJVCnj3/UszjC0PWWtpZZiqNTpBSnut4qz\nKU5qWso6JSn396j3IVNAFLc9E4FKV2hVQlAXQmP1S3i/gsxIS93vS3lMekPbJnZaaxHmySDrKY5p\njn0QPHgqFjdA5MCWUQqoY2SJTamspL3lRAOWesPanvduk1J9bflOyRX7C9oJ1Kp2EYdwJWJ+IMdU\nsF1jEq1z9N1bDs2IMboKbG6QT1SSXnaB8ckym0jn9Szi61sIAgfHituGfl1WSky0mPrWbE4o6clb\n6V2KnFclmn2qN40Tq620ry4eXaCSmDD1TtCm1qe3phxPeVY4g4mWuj6/Ncihg6nL48Vpp4Codvbu\ns+y5HbwvF3AwIJjddXC4yR6+a/kvNUcG9h0M7rcapywZlbhuvV0scGiwvC1UHB4BcF4J9etaCY0l\ndbh2LrgDNpCmD2lEUtI9i2MoUtgPBedwGJcYJA81024jS47lmxXXw9CmCDAA3TMTgaVTSD3rk/rB\nGpkdCjHEWt3AhMVze3tXDYXBVBU/2lZuRmQiQZi87L8OxNYAktudvcv3fjWCwGPaP1yl6SxDXSQQ\ndQR1X4lxzhVKnXqNomoKQeWsbUMvDQdzvuuPetw3s3xipha3pW2P7Q2cOvNfrHZPjbMYyq40y19L\nLmj5pnvvK/H6lJgBFpMAX5XX6l8lOCb+ouOcGoXy8DYAeqDKzxWrHosTSBMjQ8/jRYK1KbQuzUw9\ntDqOXsWTGU40IXZycKowxHvSSwgGAulXjcLBjGB1pLea3ozPqaXlA5yJ1MAQFmFN53ViQ0HmilCG\nGLnwKIUfG8KWpUzHnoqnRNbhndw70L6UQJGi1qFPSnFMqpFQ+PP4Kis7zqkVahTH3NtFmrmbIsKq\nuPckVHSjrk7rM47puNI8pTn3Ctzo96RVfJU8kVUfv1jwSPSK3lLOi1qF138kg5vD2+KZUdHekmr1\n71ki9LlC4/G6VUqckl7xurqmVHxuge6Uqo4aIc6aGOJS3E66qpHPvS3PhSM4t5CCRoUmrWSjVVaa\nHnXuSXlUahMJT6isi6soXvGiU55idEp7lUE93dZIqv5R1VvJWZxnXT45Ii31PYkvfKqoRtslOcFF\nfq1Oo0SSfanUsUzmF5unWE9/NdDDVhAnKFrzcPCR26WLYeSp3EG6Na5x25SuX6Vk8+7609uOA9UN\nF91J1pI6mHLnXn1h7E12Gb+0665dDE5raRumVg6JLxCarqYbB0xBHiui0Mju1K81h8aAYkuXRpVp\nFrdTurKjq18bTpg8tZ1/JZH8aaPmG/gudVoPqTdsRsVzcVg6rf2fV5j4us9X+NzmPQ0OM1HHUW16\njonVOOGwDR3ryDKz2bSOadTqO1IsseVXMe2wPEWvEECd/wAE48VYDlAsB7V5TCvj5wIPVdTDYmmx\nvpCP+ULULXpcPjC9u4OpSW8VsQDJFgvM4zjkyGWvdZ28UiPi6WmvV1uL1dBa3kkNx9YEF89y5LOI\n1HQWAIcZUxFQh5IETACzqya9SHV8TAmAId864HgvL9oOGsmpVZXa91N3rsNtYi+6v0tZjBNQAusR\n03WGrxCmwPE3gAHLNwZ8dVxvW+nSRw61MzmiYOk6L2PyZcafhqzgSPR1WHMDMAg2K8XX40KjyxzZ\ncNCBAudOq/RODUMP+rtgsDwyTNrmySe1tx6B3aB7qm7hsAfVi90dXiJf850ToBqvN/qhu1j2l3RC\n3h1YAOdUPcFrXPXXHEpdlM96aagIHVcOnRdHrG+ZbqRDRC3IH1agBWPE4kyQPNBicWxupnmudXxw\nJtYDRWqaeIVGOuQRP1rfT4hHzrXmy8ljcYS+Y7uSx4jiLySZPjos7SY91W4k0AnM2B1XPp8blxGW\nbrydKo9+uaI5rs4Wg0gRc8uSsS49AcWCAUl+IJ5LM14yxyWfF4sCABtCUns2tiWibwsVXEysD3OJ\n13uEiu6pKkp9Oi+oDzSS6VlDzEHdCKnIpapr3JL952UNQG0yfwS3LUiBzSluMH2IH1iNRPXkkOrH\nuGqIa+8Trus9YCbJb6qF1VrkVb4SnDqpUcluPNDVOeOuiW98hLrk67IRboqYt1UBJ9J5KnpDyQq0\nKd5UzhZDVOhS3udoNVKmtdSqLjNdJdiG85WSox6zvadymrJrpOqgwhdfRZKdhPJMOLLbQO9XV8TX\nU3cj5JdSi7WCp/ST9pSn8QdzM7ptTxCaXSEt9M6FPbjXDZvegfiyT6zbKa1zHpqVED9qStuGpwAT\nGi/P8L8pPDXfOZiGcjlBnvutzPlI4XGuI2/8v8UzXDHuWDW8WhaWOaAIbnMarw9Dt7wtxPr1W6Xc\ny2nQpuN7d4BlImi81Khs0EZW3GqXIc869o1xJ1yjcWspVDZ+efBfnPY7tNh2Gu/GYkhzneo0Bzmw\nT0C9XT7YcKGmLphwscwdrz0Uns9z9PR4drQJvO2ZU99Q6u7vwXFo9suGkwMfSJjkfsW/D8YwNWIx\nlFx2l4aPbotWek92/TeypUGjiegRZ6p1JA5FZa3FcHTicZhgCY/2zTfuWyi+lUgtrUng6FtRuUjz\n1TP9XYJtIshxgjUnVOPFXAZWhnflSyWRDa1MRr/eMMebrrj9qsacBhX4mmadaoMoYwva7MSRJIae\nqhz7ejp497gMzGgAwocXTzAvDTFoCxNxAfhm1akA+hFWowFohxEwL6ryeE7aYdutCqCXaGDN48U1\ncr3YxlHem0J9Grh3bALFQwwqMZUDHEVG5riIkSJ5plagWhmUBs6rUY/8bMbxClQa2W5pMNhXQx9G\npAIPncLhcY4Y6vSs+HtktDzvtcafgvLMFTC4hgxtU0mBv+0Ev9JyIIs1c/ltl+vTrxZn+v0muaDo\nBcQb2m4BXkO2FXKCaNstpOpXl+M9qjTql1CsaoiBIseS8/xDtbXrEB5AGtvtXCx2kes7HPL8R/eG\nd4i0c5XtncaoU3kawL30uvzHhfFWNaajXBrosZg22HVdHFU6tXCDG1c7KecNinq6T+0SFedh1P6/\nXOFcQo1WtcCLibouI8Wy2YQSd9l4bslxMYhj/R0yynSIptn1s1pOmi7n6y9wyCmYzROX5vcusrh9\nenQw1fEEkuIid10v1oRLjfKb7HuC8zUp1s4DS8A7qVX1BkDgT36DuUnpHbq4ymCZN4GnclVqtOJm\nZHKfyXLdUklpY7vi2nvS2PGax0tBELerrVUqUDFr7g/YlVY1DWQlvretdovvCyYwveBDh5rMXR08\ndlI0IldGljCI07xvdceiwMjMGX67rfnZESPBJcMHjOJANN4KxUar6nrAyhfhWGZBKugMgswgJR0K\nR3IEqqlQHYLKJy5vYkOed1nFBjHvOllle95FzKLFVXfs5Y3vdL9O3SIG5VFNrPZePyRHFk9xQfrD\nNjOyz4qvlHqid0XW3PI96zVxrdc6pi6k6EA7bJf6zUOrZC1amNjnNA1SfS2MWukmoQfWaEFQyZHk\nNJUVRrOzEXSnYx4dG19U62u6zYmlPx0VxBjGaEj8kwV2lc51C9yUbWAaErRrVUd1Sw/mlF3wUp9T\nZMDatUNSH1t90D6kyEh5AuUwNfXnVA+Dus9QbrNVL4VWc62WG6X6RpWL9Ye2xCH0w6A6lFmtbhyK\nU9u+aEDX5roKoO35I1pjK0amU2nXadVzyHjqlOquGyYPywflfRS/M+aHMo0rmz6MNV3M+ZRCqevm\nUkqwixoZi3iwe4DlmPkp+sO/eJJ3JJlZ4VtClKc2u7SYtCJtdw/aPeCUgjuUgKGGuqzqZ77p1HiF\nRggVKgGwa9wHsKyhSFRtbxF+73nnL3377ptDjNZhJbVeJEXcXC3R265oVQh09Ng+1+KY3KHAt3Dn\nPM9NdE6l2yeILqDXls5XSRE72XkwFZKzkZnVn09iz5Q+Kt+bjsQwQGtZLXBrRoBIsulg/lX43TFs\nWH8hUpsOncF+dCeimYrftH6i75auNZSM2FBIgO9FJHW9iuZxb5VeLYmm+nUfRh9PIS2kJ/5gSLOX\ngxNvrCKPgKE+9dap2jxbgGl5I2gAeCbV49mblyFpA1nUrhEXnl7lSOj3XYftRg8M4vxeGfWfY0ya\nuWkzb1mn5116UfKPSrTh31nswoe6pBFi4izWhv7K/IQia889t7+HcnUi/f2/buxfyrcPwFF9GpTx\nFUvrF+emGhuUnqJXdq/Lpw7MQ3CYstB2cwT7F85Enr5+5FmPNJ6c7Jr6IZ8ufDyb4bGdIcw/UmM+\nWrhryM9HGNA3LWmPIL50k81XpHaSfjqnoyPpF/yw8JIcc+IMCQz0REnvCw/10cMifQ4qeWVp8R0X\nz96R3ND6V32Jp4x9ED5ZuFer/d4rr6gtZQfLDwiwyYoTqTRB9y+eS92ioPg9eYRJzP8AX0K/5V+C\nuqMzDEmZ9c0sobGkjkumz5ReDPeKYxbQSJDiwtZ3ElfNDX79/t6KjVJ85+Oia1OI+oW9tOFEw3H0\nBGvr69eiOp214bEjH4Yc/XXy4ag5ewKi4HYeX2q7UvMj6gPbDh5H/fsOZv8A7QSl1O1fDx87G4c8\nvXt7F8yZhMwFWYKGPpX/ANrOHuOUYygTE6i3ikDtNw92mMw5B2LwL6X8l835hy9uiheOXsT2ZX0Z\nU49gAf8AvVBt9qgI6X2TKnF8LocTRmJj0rfC6+bweg6z7IV5vjXpa6pj6EPGMJJJxVG3/wA1qB3H\nsJtiqHT+9bovn22qou6dPD7U+1kr9+rcfwoucVh/F/2JFXtNgw2RiqEdHjXu5L8HzfBUHhcIuP27\n/wBr8FnLP1ijMTmkx5qP7UYMf71R6+svxE/HNTMOS15RMftY7T4Mm2Kof5lmr9q8EyxxLCel/cvx\n23L2BQu6DwU8kx+vDtZgjpiWaX19iQ3tdgnEg1wOsGF+UFyolPJbzj9dZ2gwp0xFKOroPtVDj+GJ\ny+mpTt64+tfkR+LR7lPKVfJMfsTcewj1XMN4kOB8kD8YO/u/NfkVOoRYEgdCUfpXbPf/AJinksj9\nTr4hp1t8d6zvqNjv3+CvzP0jt3P8yqdWd+87p6xTyi7X6cMUG8lBjuUGy/MRVf8Avu/zFF+s1B/5\njv8AMU8k1+j1MeRsEv8ApDp7Cvzs4l/77/8AMVbcXVH/AJjv8yu/w2kR0VJipc5TFABWoVbQiorV\nFSVBFUqxdSyCvNQeKuFC1XRYcrzIS3REWaIIorjZVTaSYAkxdSCiVSlQHcR+aIBXQIHVFKp0aKNa\noLNlWZWWoQ1BQRtIQyraqCcoVaoqLilJPJQORIgSVMxVOCtoQQOKkgqnFVTRVlSVVRQFEHBVOlVd\nU8qxKjlZ0QTzTGocgCJypRFW0jMDEgESOfRU+CSQIBNhyChCiaqFRWokRSiitKBJUVFXy70FqFUd\nVaaBIVAoxuhhBahKofWpCCAqw5VlVQqCN0LkaEhQCrVwrcgBRFCmUoGZVWVENFAFnQIaihW0SrhF\nAWqsiMqJpgWhVCMhQN7kAwoNR3ooVhv2prUgOaJqtzbK2676clC+1dyFwOs6Jnn5KvjRNYLyTeZR\nZSiI+IUCaBLQryqyPiFUXRftcIcqIHv8lRCF5wuFaYAqcNLexCQF1cFGR3+SkIUvIpCMKwmr4lqJ\nh+LKR8QmplLIUATMqgHxCGUoqwETh3qAdPYqsgYUREKDxRMA4KwEeX4hWWxspq/9Kyq4R5fj4Cpg\nM/bKqUEKJhG6gHRDAQhIRxqry9/kiEnZWUzJ0Pkpk6HyV0Kgqwm5e/yVZOhTQLhCpMy96rJ0KmgF\nE4N6exXl6exNXCGhQpjx3+SHJ8QrqBKFNy9FeUdfJNNJARBMySiDensU0JVOCa9vRU1vTZXVwuFa\nYW9EOU/BT7Cc5UznmhUWsc9FnPNT0h5oVExdH6Q8/cpnPxCBRMNH6Q8/cqznmhUTE0Wc81C880Ki\nYavMVec8yhUVNFnPMqsx5qlEF5jzUzHmqUQXmPNTMeapRAWc81WY81SiLq8x5q8x5oVENFnPMqsx\nVKIi8x5qZjzVKIurzHmpmPNUoiavMeamY81SiGizHmqzHmqUQ1eY81JVKIavMeavMeZQqICznmfN\nTOeZ81SpFEXHmVA48yhURNFnPM+amY8yhUQ0WY8ypmPMoVENFmPMqZjzKFRDRZjzKmY8yhUQ1eY8\n1Mx5qlENXmPNSTzVKILk81Mx5lUogvMeamY81SiAg88yoXnmUKiGrzHmpKpRDUUUUQRRRRBFFFEE\nUUUQRRRRBFFFEEUUUQRRRRBFFFEEUUUQRRRRBFFFEEUUUQRRRRBFFFEEUUUQRRRRBFFFEEUUUQRR\nRRBFFFEEUUUQRRRRBFFFEEUUUQRRRRBFFFEEUUUQRRRRBFFFEH//2Q==\n", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo\n", "YouTubeVideo(\"PK_yguLapgA\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a floating point error that cost Intel $475 million:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[1994 NYTimes article about Intel Pentium Error](http://www.nytimes.com/1994/11/24/business/company-news-flaw-undermines-accuracy-of-pentium-chips.html)\n", "![article](images/pentium_nytimes.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Resources**: See Lecture 13 of Trefethen & Bau and Chapter 5 of Greenbaum & Chartier for more on Floating Point Arithmetic" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Memory Use" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sparse vs Dense" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Above we covered how *numbers* are stored, now let's talk about how *matrices* are stored. A key way to save memory (and computation) is not to store all of your matrix. Instead, just store the non-zero elements. This is called **sparse** storage, and it is well suited to sparse matrices, that is, matrices where most elements are zero.\n", "\n", "\"floating\n", "\n", "Here is an example of the matrix from a finite element problem, which shows up in engineering (for instance, when modeling the air-flow around a plane). In this example, the non-zero elements are black and the zero elements are white:\n", "\"floating\n", "[Source](https://commons.wikimedia.org/w/index.php?curid=2245335)\n", "\n", "There are also special types of structured matrix, such as diagonal, tri-diagonal, hessenberg, and triangular, which each display particular patterns of sparsity, which can be leveraged to reduce memory and computation.\n", "\n", "The opposite of a sparse matrix is a **dense** matrix, along with dense storage, which simply refers to a matrix containing mostly non-zeros, in which every element is stored explicitly. Since sparse matrices are helpful and common, numerical linear algebra focuses on maintaining sparsity through as many operations in a computation as possible." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Speed" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Speed differences come from a number of areas, particularly:\n", "- Computational complexity\n", "- Vectorization\n", "- Scaling to multiple cores and nodes\n", "- Locality" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Computational complexity" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you are unfamiliar with computational complexity and $\\mathcal{O}$ notation, you can read about it [on Interview Cake](https://www.interviewcake.com/article/java/big-o-notation-time-and-space-complexity) and [practice on Codecademy](https://www.codecademy.com/courses/big-o/0/3). Algorithms are generally expressed in terms of computation complexity with respect to the number of rows and number of columns in the matrix. E.g. you may find an algorithm described as $\\mathcal{O(n^2m)}$." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Vectorization" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Modern CPUs and GPUs can apply an operation to multiple elements at once on a single core. For instance, take the exponent of 4 floats in a vector in a single step. This is called SIMD. You will not be explicitly writing SIMD code (which tends to require assembly language or special C \"intrinsics\"), but instead will use vectorized operations in libraries like numpy, which in turn rely on specially tuned vectorized low level linear algebra APIs (in particular, BLAS, and LAPACK)." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### Matrix Computation Packages: BLAS and LAPACK " ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "[BLAS (Basic Linear Algebra Subprograms)](http://www.netlib.org/blas/): specification for low-level matrix and vector arithmetic operations. These are the standard building blocks for performing basic vector and matrix operations. BLAS originated as a Fortran library in 1979. Examples of BLAS libraries include: AMD Core Math Library (ACML), ATLAS, Intel Math Kernel Library (MKL), and OpenBLAS.\n", "\n", "[LAPACK](http://www.netlib.org/lapack/) is written in Fortran, provides routines for solving systems of linear equations, eigenvalue problems, and singular value problems. Matrix factorizations (LU, Cholesky, QR, SVD, Schur). Dense and banded matrices are handled, but not general sparse matrices. Real and complex, single and double precision.\n", "\n", "1970s and 1980s: EISPACK (eigenvalue routines) and LINPACK (linear equations and linear least-squares routines) libraries\n", "\n", "**LAPACK original goal**: make LINAPCK and EISPACK run efficiently on shared-memory vector and parallel processors and exploit cache on modern cache-based architectures (initially released in 1992). EISPACK and LINPACK ignore multi-layered memory hierarchies and spend too much time moving data around.\n", "\n", "LAPACK uses highly optimized block operations implementations (which much be implemented on each machine) LAPACK written so as much of the computation as possible is performed by BLAS." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Locality" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Using slower ways to access data (e.g. over the internet) can be up to a billion times slower than faster ways (e.g. from a register). But there's much less fast storage than slow storage. So once we have data in fast storage, we want to do any computation required at that time, rather than having to load it multiple times each time we need it. In addition, for most types of storage its much faster to access data items that are stored next to each other, so we should try to always use any data stored nearby that we know we'll need soon. These two issues are known as locality." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### Speed of different types of memory" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Here are some *numbers everyone should know* (from the legendary [Jeff Dean](http://static.googleusercontent.com/media/research.google.com/en/us/people/jeff/stanford-295-talk.pdf)):\n", "- L1 cache reference 0.5 ns\n", "- L2 cache reference 7 ns\n", "- Main memory reference/RAM 100 ns\n", "- Send 2K bytes over 1 Gbps network 20,000 ns\n", "- Read 1 MB sequentially from memory 250,000 ns\n", "- Round trip within same datacenter 500,000 ns\n", "- Disk seek 10,000,000 ns\n", "- Read 1 MB sequentially from network 10,000,000 ns\n", "- Read 1 MB sequentially from disk 30,000,000 ns\n", "- Send packet CA->Netherlands->CA 150,000,000 ns\n", "\n", "And here is an updated, interactive [version](https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.html), which includes a timeline of how these numbers have changed.\n", "\n", "**Key take-away**: Each successive memory type is (at least) an order of magnitude worse than the one before it. Disk seeks are **very slow**." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "This video has a great example of showing several ways you could compute the blur of a photo, with various trade-offs. Don't worry about the C code that appears, just focus on the red and green moving pictures of matrix computation.\n", "\n", "Although the video is about a new language called Halide, it is a good illustration the issues it raises are universal. Watch minutes 1-13:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkz\nODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2Nj\nY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAWgB4AMBIgACEQED\nEQH/xAAbAAEAAwEBAQEAAAAAAAAAAAAAAwQFAgEGB//EADsQAAEDAgMECAYCAgICAwEBAAEAAgME\nERIhMQUiMlETFBVBQ1JhkSMzQmJxoSSBU7EGNMHRFpLwVLL/xAAaAQEAAgMBAAAAAAAAAAAAAAAA\nAQQCAwUG/8QAMBEBAAIBAQYFBAEDBQAAAAAAAAECAxEEEhMUUVIhMTKRoQUVIjNBcYHwIyRCYfH/\n2gAMAwEAAhEDEQA/APz9ERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQ\nEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBER\nAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQER\nEBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAR\nEQEREBERAREQEREH1lJs6hfSwufTxEmIEkvOql7M2fZ/8aHIm2+VPQYup09sfyG8lPv2fx6u8q5N\nsltZ8fl52+W+9P5T7qPZmz7N/jQ5kX3yvezNn4v+tDw+c81e37M49W8uSb+P6+H7eajiW6/LDjX7\np91DszZ9nfxocibb5TszZ9m/xocyL75V7ftJx6u5Jv2Zx6t5ck4luvyca/dPuzKvZ1Cymmc2niBE\nRIIedVL2Zs+zP40OZF98qxXYuqT8fyXclZwu6Nh39W8lM5LaebKc192Pyn3/AKM7szZ+L/rQ8PnP\nNOzKCz/40ORNt8q/v4/r4ft5rzfwyceruSjiW6/LHjX7p91HszZ9m/xocyL75XvZmz8X/Wh4fOea\nu79mcerfLyXu/j+vh+3mnEt1+TjX7p91DszZ9n/xocibb5Xy1NSGpL7Pa3DzX2+/hk49XeVfJ7KO\nEVL87NAJtyVjDe27adejs/SP9W8xedY/9cdluz+NHldedluy+NHnZWu04N7ekzJ+lO04LN3pMiPp\nC2b2Xo7/AA9m6/Kr2W69umj0unZbs/jR5XVvtOC/FJpbhHNO04N7ekzJ+kKd7L0OHs3X5VOy3ZfG\njzsoKqlNNhu9rsXLuWj2nBZu9JkR3KntGqjqejwFxwg3uFlS2Sbfk1ZqYIpM0nxb9Js6hfSwufTx\nEmIEkvOql7MoLO/jQ5E23yp6DF1Ontj+Q3kp9+z+PV3lVG2S2s+Py8ffLfen8p91HszZ9m/xocyL\n75XvZmz8X/Wh4fOeau79mcereXJe7+P6+H7eax4luvyw41+6fdQ7M2fZ38aHIm2+U7M2fZv8aHMi\n++VoBry1/Fq7kvHB7cAOPVvJTxLdfk41+6fdl1mzqFlLM5lPEHNiJBDzqsHoIst0d3evqq/F1Oo4\n/kO5L5nuH9K7s1pmJ1dXYLTas6zqj6CK/CNOadDFnujv71J36dyXydl3lWnQR9BFluju706CK/CN\nOakvw5clNLA+JrHPtZ7bhRrEeDKKzMTMfwq9BFY7o7+9Q0tKanFZ7W4eatnQ/kpsa95rX0GixyWm\ntdYbMFIvkiso+y3Z/GjyunZbsvjR52WtvWfxau5JvWZxat5KpxrulymLoyey3Xt00el172W7P40e\nV1rb2L6uH05pvWdxau5Jx7nKYujI7Ldl8aPOygqqU02G72uxcu5bu9ZnFq3ks3bN7w3vodVsx5bW\ntpLTn2fHTHNohs0mzqF9LC59PEXGIEkvOql7M2fZ/wDGhyJtvlT0GLqdPbH8hvJT79n8eruSp2vb\nWfF4u+W+9P5T7qPZlBZv8aHMi++V72Zs/F/1oeHznmr2/ZnHq3y8k38f18P281HEt1+WHGv3T7qH\nZmz7O/jQ5E23ynZmz7N/jQ5kX3yr2/hk49Xck37M49W8uScS3X5ONfun3ZlXs6hZTTOZTxAiIkEP\nOql7M2fZn8aHMi++VYrsXVJ74vku5Kbfwx8ereXJTxLaefyznLfdj8p9/wCil2Zs/F/1oeG/Gea8\n7M2fZ/8AGhyJtvlX9/H9fD9vNeb9pOPV3JRxLdfljxr90+6j2Zs+zf40OZF98r3sygxf9aHhvxnm\nru/ZnHq3lyXu/j+vh+3mnEt1+Uca/dPuodmUGF/8aHIm2+V8tTUpqS+z2tw819vv4ZOPV3l5L5TY\n98U9r92n5VjDe27adXZ+kf6uSa3nX/JRdluz+NHldOy3ZfGjzstbes/i1dyTeszi1HJTxrvScpi6\nMnst17dNHpdOy3Z/GjyutbexfVw+nNN7f4tXck41zlMXRk9luy+NHnZQVVKabDd7XYuS3d6zOLVv\nJZu2b3hvfQ6rZjy2tbSWnPs+OmObRD6OhDepwZD5LfDJU9m2fkNXeGVBQlvVIM2/Jb4hU+Jtn5t1\nd4hVG3nLxF/VJZtmZN1b4ZSzcWjeH/EeaYm2Zm3VviFMTcWreH/IeahgWbZ+Q1d4ZSzbMyGrfDKY\nm2fm3V3iFMTbMzbq3xCoPFBWgdUnyHyXeGVFJtEvpuiEbRiw5hpUtcW9Unzb8l3iFZlxZuY1H1rb\nWNY8Xofo2z4ssWtkjWYmNHeN1+I8PlPNMbrO3jqfpK4uMWo4fP6pcWdmNT9ay0el3K9Id43WbvHU\nfSV50jsXEeHynmubizcxqPrS4xajh8/qmhuV6Q6xus7fOp+kr5wOc24DiAdbHVfQ3FnZjU/WvnDq\nrOz/AMqG2xEbugiIrSgIiICIiD62jr6JlLC11RCCIgCC3QqbtGgs7+VBmTbdXxiKrOy1mddVCdgp\nM66y+z7RoLN/lQZEX3U7RoMX/agth8vqvjETla9Ufb6d0vs+0qEB38qHU23Vjn/kcht/FiyssRFl\nXZqR5+LOmxYq+fi2JtvvmifGaaIY2Ftx3Kv08dhvjuWei3VpWvpWceOmPwrC/wBNHfjGi96ePPfG\nd1nosmxf6aPLfHcu62saWQiNwfZtj6LNRTE6RMGqx1t/lCUtUabHZjXYuarosZiJjSWVbTWdYX+1\nHZ/BjzunajsvgsysqCLDhU6NvM5erQ7Ude/Qx6WUVRXvmjwhjWb17t1VRFMY6x46InPkmNJl30sn\nnd7rlznO4nE/krxFno1ay+2oQ3qcGQ+S3wyp7Ns/Iau8MqChLepwZj5LfEIU+Jtn5t1d4hXHt5y8\nxf1SWbZmQ1b4ZSzcejeH/GeaYm2Zm3VviHkmJuLVvD/kPNYsSzbPyGrvDKWbZmQ1b4ZTE2z826u8\nQpibZmbdW+IeSCGtA6pPkPku8MqazcLMhq3wzyUNa5vVJ8x8l3iFTYm2Zm3VviHksv4Zz6Y/zoWb\ni0bw/wCI80s2z8hq7wymJuLVvD/kPNAWkPzbq7xCoYFm2ZkNW+GUs3Ho3h/xnmmJtmZt1b4hTE3F\nq3h/yHmgWbhfkNXeGV8rsnim07u66+qLm4X5t1d4hXyuySA6a9u7vsrGL0W/s7n0T9s/51aFhZ+m\np+gpYWbpqPoKXFnZjU/WlxZumo+tYvWvbDF3cPkPNLCztNT9BXJe1rhdzRu97/VedJHZ2+zU+Ip0\nlGsOrCzNNR9BWdti14bW0P02V/pI7N32ajxFn7Wc13RYSDkdHXW3FE78K+0zHCl9PQY+p0/H8lvJ\nT79n8ervKq1CB1ODIfJb4ZU9hZ+Q1d4ZVO3nLwN/VLrfszj1b5eS938f18P281xYWZkNW+GeS9sM\neg4f8Z5qGD3fs/j1d5U37M49W+XkubCz8hq7wylhZmQ1b4ZQR12PqlRx/JdyWXvWZxat5LSrgOqT\n5D5LvDKy7CzchqPoW2nk9T9A9F/7Ot7F9XD6c03rP4tTyXlhi7uHyHmlhZ2mp+grJ6F7vWZxajkm\n9i+rh9Oa5sLN01H0FLC/dw+Q80HRxWdxau5L5o6r6Sws7TU/QV82dVZ2f+XP27/j/cREVpzhERAR\nEQEREBERAREQEREBERAREQEREBERAREQEREH01Ltykip4mOklBbEGmzRqpf/AJBRWd8SbMn6AvlE\nVadmpKlOw4pnV9Z/8gorN+JNkR9AXT/+QUHQvLJJelwENuzvXyKJyuNHIYWr/wDIq/Pejzvfd5r3\n/wCRV+W9Hlb6VkotvCx9G/lsPbDUk29Wyscx7mYXtwmze5fSiqYWM+I/Kx0C+GX1TOBv4W7DseLN\nrvR5NeTZMVtPDT+jQ60zFfpH8NtBzXraqMYrvfmT3BUEW/7Xg/7auQxJ+tzZb2lrZJ1ua98XdbRQ\nIrXKYOyPZv5fF2wmdWTBjt4Z3Oi+UgqpaYu6MgYtbhfSP4Hfgr5Q6qptOHHTSK101bsVYxTrjjRc\n7Uqc825+idqVOWbcvtVNFU4dOizx8vdKepq5arB0pBwaWCgRFlEREaQ12tNp1kREUsX2lFLEKSAG\nSO/Qt8Wym6aKz/iR6u8ZfKdGzyj2To2eUeypzssTOurmz9PiZ13n1nTRWZ8SPVvjJ00WL5kfD/m9\nV8n0bPKPZOjZ5R7JykdUfbo7n1fTRWf8SPV3jJ00VmfEj1b4y+U6NnlHsnRs8o9k5SOp9ujufS1s\nsRpJ7SR/JdpLdZvSMs3ebqPEWZ0bPKPZOjZ5R7LKNmiI01dPYf8AZxaI8dWl0jL8TeH/ACeqdIze\n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\nhtSo6NzJBHI10Yj3mDQaG47wun7ZrnzumdK3G4tN8DcrG4tllnf3Q8EUuzquGm6xJC5sWW8SO8Aj\n/YUTqaZkAndGRE61ndxve3/+T7KWp2hUVcjX1DmvwZAYQAMgNB+ApTtR+CmjbFGI4MRDDmC52pQV\nqeknqsfQRl/RtxOt3DmpKiglhaJAWyRFgkD2nUE2/wB5LmkraiiLzTvwdIMLt0G45Z9ykl2lJLG6\nMxRBhjEbWhvAAb5et/8AaCmiIiBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQERE\nBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERARE\nQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBE\nRAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQE\nREBERAREQEREBERAREQV+tfZ+0619n7X1NFBAaSAmKMkwt8K6n6vBZ/wo9XeCqk7VETpo50/UIid\nN18d1r7P2vetfZ+19h1eCzPhR6t8FOrQYvlR8P8Ah9VHNx0R9xr2vj+tfZ+0619n7X2HVoLP+FHq\n7wU6vBZnwo9W+CnNx0PuNe18d1r7P2nWvs/a+qraeAUk5EUYIhcRaKywGxR4RuN05Lfiy8SNdFrZ\n88ZomYjRU619n7TrX2ftXOij8jfZDEzCdxvstqwp9a+z9p1r7P2tjoorN3Gajw170UWLgZp/j9VX\n5iOi/wAjPcxutfZ+0619n7Wz0UVnfDZqfDWTRUjakyYnFuG2gusq5YmJlqybNasxWJ11cda+z9p1\nr7P2rvZUWfxX5E/SnZUVh8V+ZH0qeNQ5TL0UutfZ+0619n7XddSNpcGF7nYgdRZVFsraLRrCves0\nndlY619n7TrX2ftV0UsVnrX2fteda+z9r6qip4TSQExRkmFvhXU/VoLP+FHq7wVUnaoidNHOn6hE\nTpuvjutfZ+0619n7X2PVoLM+FHq3wU6tBi+VHw/4fVRzcdEfca9r4/rX2ftOtfZ+19h1aCz/AIUe\nrvBTq8FmfCj1b4Kc3HQ+417Xx3Wvs/ada+z9r6qtp4RSTkRRgiFx+VZYDYmYRuN05Lfiy8SNdFrZ\n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\nk3PNBqxw1UzYcddIKeZ+GCW13lzicj3jMZ58llVb5iyFk0oeGtIaB9O8b3/tSna1XiYWuY3o8WDD\nG0BpOpGWvqq0tRLNHEyR12xAtYOQvdB6yrnZC+FshwPaGkel72v3C/coURARERAiIgIiICIiAiqd\nZk9PZOsyensgtoqnWZPT2TrMnp7ILaKp1mT09k6zJ6eyC2iqdZk9PZOsyensgtoqnWZPT2TrMnp7\nILaKp1mT09k6zJ6eyC2iqdZk9PZOsyensgtoqnWZPT2TrMnp7ILaKp1mT09k6zJ6eyC2iqdZk9PZ\nOsyensgtoqnWZPT2TrMnp7ILaKp1mT09k6zJ6eyC2iqdZk9PZOsyensgtoqnWZPT2TrMnp7ILaKp\n1mT09k6zJ6eyC2iqdZk9PZOsyensgtoqnWZPT2TrMnp7ILaKp1mT09k6zJ6eyC2iqdZk9PZOsyen\nsgtoqnWZPT2TrMnp7ILaKp1mT09k6zJ6eyC2iqdZk9PZOsyensgtoqnWZPT2TrMnp7ILaKp1mT09\nk6zJ6eyC2iqdZk9PZOsyensgtoqnWZPT2TrMnp7ILaKp1mT09k6zJ6eyC2iqdZk9PZOsyensgtoq\nnWZPT2TrMnp7IN3YtXTUksrqoYmOZbDgDsXp6LzblXTVtcJaVmGPBa2HD3n/AMWH9LD6zJ6eydZk\n9PZE6oUREQIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIi\nAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIi\nICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAi\nIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiIC\nIiD/2Q==\n", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo\n", "YouTubeVideo(\"3uiEyEKji0M\")" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Locality is hard. Potential trade-offs:\n", "- redundant computation to save memory bandwidth\n", "- sacrificing parallelism to get better reuse" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### Temporaries" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The issue of \"temporaries\" occurs when the result of a calculation is stored in a temporary variable in RAM, and then that variable is loaded to do another calculation on it. This is many orders of magnitude slower than simply keeping the data in cache or registers and doing all necessary computations before storing the final result in RAM. This is particularly an issue for us since numpy generally creates temporaries for every single operation or function it does. E.g. $a=b\\cdot c^2+ln(d)$ will create four temporaries (since there are four operations and functions)." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Scaling to multiple cores and nodes" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "We have a separate section for scalability, but it’s worth noting that this is also important for speed - if we can't scale across all the computing resources we have, we'll be stuck with slower computation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Scalability / parallelization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Often we'll find that we have more data than we have memory to handle, or time to compute. In such a case we would like to be able to scale our algorithm across [multiple cores](http://www.makeuseof.com/tag/processor-core-makeuseof-explains-2/) (within one computer) or nodes (i.e. multiple computers on a network). We will not be tackling multi-node scaling in this course, although we will look at scaling across multiple cores (called parallelization). In general, scalable algorithms are those where the input can be broken up into smaller pieces, each of which are handled by a different core/computer, and then are put back together at the end." ] }, { "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: nbs/2. Topic Modeling with NMF and SVD.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "You can read an overview of this Numerical Linear Algebra course in [this blog post](http://www.fast.ai/2017/07/17/num-lin-alg/). The course was originally taught in the [University of San Francisco MS in Analytics](https://www.usfca.edu/arts-sciences/graduate-programs/analytics) graduate program. Course lecture videos are [available on YouTube](https://www.youtube.com/playlist?list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY) (note that the notebook numbers and video numbers do not line up, since some notebooks took longer than 1 video to cover).\n", "\n", "You can ask questions about the course on [our fast.ai forums](http://forums.fast.ai/c/lin-alg)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2. Topic Modeling with NMF and SVD" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Topic modeling is a great way to get started with matrix factorizations. We start with a **term-document matrix**:\n", "\n", "\"term-document\n", "(source: [Introduction to Information Retrieval](http://player.slideplayer.com/15/4528582/#))\n", "\n", "We can decompose this into one tall thin matrix times one wide short matrix (possibly with a diagonal matrix in between).\n", "\n", "Notice that this representation does not take into account word order or sentence structure. It's an example of a **bag of words** approach." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Motivation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider the most extreme case - reconstructing the matrix using an outer product of two vectors. Clearly, in most cases we won't be able to reconstruct the matrix exactly. But if we had one vector with the relative frequency of each vocabulary word out of the total word count, and one with the average number of words per document, then that outer product would be as close as we can get.\n", "\n", "Now consider increasing that matrices to two columns and two rows. The optimal decomposition would now be to cluster the documents into two groups, each of which has as different a distribution of words as possible to each other, but as similar as possible amongst the documents in the cluster. We will call those two groups \"topics\". And we would cluster the words into two groups, based on those which most frequently appear in each of the topics. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### In today's class" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll take a dataset of documents in several different categories, and find topics (consisting of groups of words) for them. Knowing the actual categories helps us evaluate if the topics we find make sense.\n", "\n", "We will try this with two different matrix factorizations: **Singular Value Decomposition (SVD)** and **Non-negative Matrix Factorization (NMF)**" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "from sklearn.datasets import fetch_20newsgroups\n", "from sklearn import decomposition\n", "from scipy import linalg\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "np.set_printoptions(suppress=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Additional Resources" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- [Data source](http://scikit-learn.org/stable/datasets/twenty_newsgroups.html): Newsgroups are discussion groups on Usenet, which was popular in the 80s and 90s before the web really took off. This dataset includes 18,000 newsgroups posts with 20 topics.\n", "- [Chris Manning's book chapter](https://nlp.stanford.edu/IR-book/pdf/18lsi.pdf) on matrix factorization and LSI \n", "- Scikit learn [truncated SVD LSI details](http://scikit-learn.org/stable/modules/decomposition.html#lsa)\n", "\n", "### Other Tutorials\n", "- [Scikit-Learn: Out-of-core classification of text documents](http://scikit-learn.org/stable/auto_examples/applications/plot_out_of_core_classification.html): uses [Reuters-21578](https://archive.ics.uci.edu/ml/datasets/reuters-21578+text+categorization+collection) dataset (Reuters articles labeled with ~100 categories), HashingVectorizer\n", "- [Text Analysis with Topic Models for the Humanities and Social Sciences](https://de.dariah.eu/tatom/index.html): uses [British and French Literature dataset](https://de.dariah.eu/tatom/datasets.html) of Jane Austen, Charlotte Bronte, Victor Hugo, and more" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set up data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Scikit Learn comes with a number of built-in datasets, as well as loading utilities to load several standard external datasets. This is a [great resource](http://scikit-learn.org/stable/datasets/), and the datasets include Boston housing prices, face images, patches of forest, diabetes, breast cancer, and more. We will be using the newsgroups dataset.\n", "\n", "Newsgroups are discussion groups on Usenet, which was popular in the 80s and 90s before the web really took off. This dataset includes 18,000 newsgroups posts with 20 topics. " ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "categories = ['alt.atheism', 'talk.religion.misc', 'comp.graphics', 'sci.space']\n", "remove = ('headers', 'footers', 'quotes')\n", "newsgroups_train = fetch_20newsgroups(subset='train', categories=categories, remove=remove)\n", "newsgroups_test = fetch_20newsgroups(subset='test', categories=categories, remove=remove)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((2034,), (2034,))" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "newsgroups_train.filenames.shape, newsgroups_train.target.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look at some of the data. Can you guess which category these messages are in?" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hi,\n", "\n", "I've noticed that if you only save a model (with all your mapping planes\n", "positioned carefully) to a .3DS file that when you reload it after restarting\n", "3DS, they are given a default position and orientation. But if you save\n", "to a .PRJ file their positions/orientation are preserved. Does anyone\n", "know why this information is not stored in the .3DS file? Nothing is\n", "explicitly said in the manual about saving texture rules in the .PRJ file. \n", "I'd like to be able to read the texture rule information, does anyone have \n", "the format for the .PRJ file?\n", "\n", "Is the .CEL file format available from somewhere?\n", "\n", "Rych\n", "\n", "\n", "Seems to be, barring evidence to the contrary, that Koresh was simply\n", "another deranged fanatic who thought it neccessary to take a whole bunch of\n", "folks with him, children and all, to satisfy his delusional mania. Jim\n", "Jones, circa 1993.\n", "\n", "\n", "Nope - fruitcakes like Koresh have been demonstrating such evil corruption\n", "for centuries.\n", "\n", " >In article <1993Apr19.020359.26996@sq.sq.com>, msb@sq.sq.com (Mark Brader) \n", "\n", "MB> So the\n", "MB> 1970 figure seems unlikely to actually be anything but a perijove.\n", "\n", "JG>Sorry, _perijoves_...I'm not used to talking this language.\n", "\n", "Couldn't we just say periapsis or apoapsis?\n", "\n", " \n" ] } ], "source": [ "print(\"\\n\".join(newsgroups_train.data[:3]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "hint: definition of *perijove* is the point in the orbit of a satellite of Jupiter nearest the planet's center " ] }, { "cell_type": "code", "execution_count": 249, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['comp.graphics', 'talk.religion.misc', 'sci.space'], \n", " dtype='\n", "(source: [Facebook Research: Fast Randomized SVD](https://research.fb.com/fast-randomized-svd/))\n", "\n", "SVD is an **exact decomposition**, since the matrices it creates are big enough to fully cover the original matrix. SVD is extremely widely used in linear algebra, and specifically in data science, including:\n", "\n", "- semantic analysis\n", "- collaborative filtering/recommendations ([winning entry for Netflix Prize](https://datajobs.com/data-science-repo/Recommender-Systems-%5BNetflix%5D.pdf))\n", "- calculate Moore-Penrose pseudoinverse\n", "- data compression\n", "- principal component analysis (will be covered later in course)" ] }, { "cell_type": "code", "execution_count": 344, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 27.2 s, sys: 812 ms, total: 28 s\n", "Wall time: 27.9 s\n" ] } ], "source": [ "%time U, s, Vh = linalg.svd(vectors, full_matrices=False)" ] }, { "cell_type": "code", "execution_count": 345, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(2034, 2034) (2034,) (2034, 26576)\n" ] } ], "source": [ "print(U.shape, s.shape, Vh.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Confirm this is a decomposition of the input." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Answer" ] }, { "cell_type": "code", "execution_count": 346, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 346, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Exercise: confrim that U, s, Vh is a decomposition of the var Vectors\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Confirm that U, V are orthonormal" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Answer" ] }, { "cell_type": "code", "execution_count": 246, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 246, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Exercise: Confirm that U, Vh are orthonormal\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Topics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What can we say about the singular values s?" ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGWpJREFUeJzt3X2MHPd93/H3d/bp7ngkRYrHE0NSJhXTD3TcSAkjCVDs\nOpYdMU5qygmg0G1SthUgFFACG00RSDGSpn+wcerGTZzaTZTECOM4llkkqQgjqS1TclwDtWXKkWRR\nFMPTAy1SR/JESXw43tPufvvH/HZv73ize0fePszw8wIOO/ebmd0vZ4+f+e1vfztr7o6IiGRX1O0C\nRESkvRT0IiIZp6AXEck4Bb2ISMYp6EVEMk5BLyKScQp6EZGMU9CLiGScgl5EJOPy3S4AYN26db5l\ny5ZulyEikipPPvnka+4+1Gq7ngj6LVu2cOjQoW6XISKSKmZ2fDHbaehGRCTjFPQiIhmnoBcRyTgF\nvYhIxinoRUQyTkEvIpJxCnoRkYxLddCfOjfJp792lBfGLna7FBGRnpXqoD99fpLPPDbC8bPj3S5F\nRKRnpTroa/T95iIiyVId9GbxrYJeRCRZuoMe63YJIiI9L9VBX6MOvYhIslQHvalDLyLSUqqDvsY1\nSC8ikigTQS8iIskyEfTqz4uIJEt10Gt6pYhIa+kOek2vFBFpKdVBP0tdehGRJIsOejPLmdk/mtlX\nwu9rzexRMzsWbtc0bPugmY2Y2VEzu6sdhceP0657FhHJjqX06D8GHGn4/QHgoLtvAw6G3zGz7cBu\n4F3ATuBzZpZbnnIXpjF6EZFkiwp6M9sE/Czwpw3Nu4B9YXkfcHdD+8PuPuXuLwEjwK3LU+78utpx\nryIi2bLYHv3vA78OVBvaht19NCyfAobD8kbglYbtToS2tlGHXkQkWcugN7OfA864+5NJ23j80dQl\n5a2Z3Wdmh8zs0NjY2FJ2nb2PMOtGQzciIskW06O/A/iwmb0MPAy838z+EjhtZhsAwu2ZsP1JYHPD\n/ptC2xzu/pC773D3HUNDQ1dUvIZuRERaaxn07v6gu29y9y3Eb7I+5u6/BBwA9oTN9gCPhOUDwG4z\nK5nZVmAb8MSyV95YowZvREQS5a9i308C+83sXuA4cA+Aux82s/3Ac0AZuN/dK1dd6QLUoRcRaW1J\nQe/u3wC+EZbPAncmbLcX2HuVtS2hrk49kohI+qT6k7H1a910twwRkZ6W6qDX4I2ISGspD/qYvnhE\nRCRZqoNe0ytFRFpLddCLiEhrqQ56dehFRFpLddDXaIheRCRZqoPewiC9PhkrIpIs3UHf7QJERFIg\n1UFfo6EbEZFkqQ56Ta8UEWkt1UFfox69iEiyVAe9aZReRKSlVAd9jTr0IiLJUh309atXauxGRCRR\nqoNeRERay0TQqz8vIpIs1UGv6ZUiIq2lOujr1KUXEUmU6qDXtW5ERFpLd9B3uwARkRRIddDXaHal\niEiyVAe93owVEWkt1UFfow69iEiyVAe9rnUjItJaqoO+RmP0IiLJUh309WvdaPBGRCRRuoO+2wWI\niKRAqoO+RkM3IiLJ0h306tKLiLSU7qAP1KEXEUmW6qDX9EoRkdZSHfR1GqQXEUmU6qCfnV4pIiJJ\n0h303S5ARCQFUh30NRq5ERFJluqgN12+UkSkpZZBb2Z9ZvaEmT1tZofN7D+H9rVm9qiZHQu3axr2\nedDMRszsqJnd1c5/AICrSy8ikmgxPfop4P3u/qPAzcBOM7sdeAA46O7bgIPhd8xsO7AbeBewE/ic\nmeXaUXytP6+YFxFJ1jLoPXYx/FoIPw7sAvaF9n3A3WF5F/Cwu0+5+0vACHDrslYdaORGRKS1RY3R\nm1nOzJ4CzgCPuvt3gGF3Hw2bnAKGw/JG4JWG3U+Etvn3eZ+ZHTKzQ2NjY1f8DwC9GSsi0syigt7d\nK+5+M7AJuNXMfmTeemeJIyju/pC773D3HUNDQ0vZtU6fjBURaW1Js27c/U3gceKx99NmtgEg3J4J\nm50ENjfstim0tY069CIiyRYz62bIzK4Ly/3AB4HngQPAnrDZHuCRsHwA2G1mJTPbCmwDnljuwuPi\n2nKvIiKZkl/ENhuAfWHmTATsd/evmNn/A/ab2b3AceAeAHc/bGb7geeAMnC/u1faUXz9EggapBcR\nSdQy6N39GeCWBdrPAncm7LMX2HvV1bUQhaRXzouIJEv3J2PDbVVJLyKSKNVBX+/Rd7kOEZFeluqg\nr43Rq0cvIpIsE0GvnBcRSZbqoJ99M1ZJLyKSJBNBX1XOi4gkSnXQa9aNiEhr6Q56jdGLiLSU8qA3\nzDRGLyLSTKqDHuJxeo3Ri4gkS33QGxqjFxFpJvVBH5npk7EiIk2kPujN1KMXEWkmE0GvnBcRSZb6\noI/MNOtGRKSJTAS9Zt2IiCRLfdBr1o2ISHPpD3qN0YuINJX6oI8ijdGLiDST+qCPh266XYWISO9K\nfdDHH5hS0ouIJEl90JsZlWq3qxAR6V2pD/p8ZFSqSnoRkSSpD/pcZJQ1SC8ikij1QZ/PGRUFvYhI\novQHvXr0IiJNZSDoIyoVBb2ISJLUB73G6EVEmkt90Mdj9Jp1IyKSJPVBrx69iEhz6Q96M8oaoxcR\nSZT+oI+Mii5qJiKSKBNBX9XQjYhIokwEvXr0IiLJUh/0kalHLyLSTOqDXp+MFRFprmXQm9lmM3vc\nzJ4zs8Nm9rHQvtbMHjWzY+F2TcM+D5rZiJkdNbO72voPiHStGxGRZhbToy8Dv+bu24HbgfvNbDvw\nAHDQ3bcBB8PvhHW7gXcBO4HPmVmuHcVDPL1SXw4uIpKsZdC7+6i7fy8sXwCOABuBXcC+sNk+4O6w\nvAt42N2n3P0lYAS4dbkLr8np6pUiIk0taYzezLYAtwDfAYbdfTSsOgUMh+WNwCsNu50IbW2RMwW9\niEgziw56MxsE/hr4uLufb1zn7g5L++JWM7vPzA6Z2aGxsbGl7DqHpleKiDS3qKA3swJxyH/R3f8m\nNJ82sw1h/QbgTGg/CWxu2H1TaJvD3R9y9x3uvmNoaOhK6w/TK694dxGRzFvMrBsD/gw44u6fblh1\nANgTlvcAjzS07zazkpltBbYBTyxfyXPlNetGRKSp/CK2uQP4ZeD7ZvZUaPsN4JPAfjO7FzgO3APg\n7ofNbD/wHPGMnfvdvbLslQeR5tGLiDTVMujd/VuAJay+M2GfvcDeq6hr0XIRml4pItJE6j8Zq1k3\nIiLNpT/oo0jXuhERaSIDQY/G6EVEmkh90EeaRy8i0lTqgz6nyxSLiDSV+qDPq0cvItJU6oM+igx3\n1KsXEUmQ+qDPWTzFX716EZGFpT7ooygEvXr0IiILSn3Q5xX0IiJNpT7ocyHoNZdeRGRhqQ/6Qi7+\nJ6hHLyKysNQH/WyPXhelFxFZSOqDXmP0IiLNpT7o6z36ioJeRGQhqQ/62hi93owVEVlY6oM+Vx+6\n0Ri9iMhCUh/0eU2vFBFpKvVBrzF6EZHmUh/0+Zx69CIizaQ/6KPaB6Y0Ri8ispAMBL2GbkREmkl9\n0OtaNyIizaU+6DVGLyLSXPqDXmP0IiJNpT7oNb1SRKS51Ae9hm5ERJpLfdCvKOYBOD8x0+VKRER6\nU+qDfsPqPgBGz012uRIRkd6U+qDP5yIGijnGp8rdLkVEpCelPugBVpTyjE8r6EVEFpKJoB8s5bk4\nVel2GSIiPSkTQb+ipKEbEZEk2Qj6Yp6LCnoRkQVlIuhvWN3HS6+Nd7sMEZGelImg37SmnzfGp7td\nhohIT8pE0A8U85SrznRZ17sREZmvZdCb2efN7IyZPdvQttbMHjWzY+F2TcO6B81sxMyOmtld7Sq8\n0UAxB8AlTbEUEbnMYnr0fw7snNf2AHDQ3bcBB8PvmNl2YDfwrrDP58wst2zVJqhdBmF8WlMsRUTm\naxn07v5N4PV5zbuAfWF5H3B3Q/vD7j7l7i8BI8Cty1Rrov7Qo59Qj15E5DJXOkY/7O6jYfkUMByW\nNwKvNGx3IrRdxszuM7NDZnZobGzsCsuIrSjFQT+uD02JiFzmqt+MdXcHlnyNYHd/yN13uPuOoaGh\nq6phoD50ox69iMh8Vxr0p81sA0C4PRPaTwKbG7bbFNraqv5mrHr0IiKXudKgPwDsCct7gEca2neb\nWcnMtgLbgCeursTWaj36SzMKehGR+fKtNjCzLwHvA9aZ2QngPwGfBPab2b3AceAeAHc/bGb7geeA\nMnC/u7c9fWtj9Jd0GQQRkcu0DHp3/2jCqjsTtt8L7L2aopZqoKDplSIiSTLxyVhNrxQRSZaJoC/m\nI4q5iAsauhERuUwmgh5gw3V9vPqmvjdWRGS+zAT9jWsH+MFZXapYRGS+TAX98dcvdbsMEZGek5mg\nX7+yjzcvzVCpLvlDuiIimZaZoNelikVEFpadoK99aEpz6UVE5shM0K8bLAHwsr47VkRkjswE/R1v\nXUcxF/HY82dabywicg3JTNAPlvLcNLSCF8YudrsUEZGekpmgB9i0ZoAfaIqliMgcmQr6G9cO8Mrr\nE8TfhSIiIpCxoH/nhpVMzFR45sS5bpciItIzMhX0d7x1HQCPH9UbsiIiNZkK+h+6rp9t6wd5+pU3\nu12KiEjPyFTQA7xn2xD/99hrjJ6b6HYpIiI9IXNB/2/v2IIDnzk40u1SRER6QuaCfvPaAX7pthv5\n8nd/wOFX9aasiEjmgh7g4x94G4OlPL/6pX9kqqxr34jItS2TQb9mRZH//os38+LYOJ9+9J+6XY6I\nSFdlMugB7nznMPfs2MQf/8OLfOqrz+tDVCJyzcp3u4B22vuRd2MYn338BSIzPnbnNvK5zJ7bREQW\nlOmgL+Qifufn381MpcofPjbC0VMX+MxHb6GvkOt2aSIiHZP57m0UGb93z4/yGx96B1977jT3feFJ\nXn1Tc+xF5NqR+aAHMDPue+8P818+8m6+/eJZfuq/fYNPffV5LkzOdLs0EZG2uyaCvuZf3nYjj/3a\nP2fnj9zAZx9/gfd96ht84dvHmalUu12aiEjbXFNBD/E16/9g9y0c+JU7+OH1g/zm/36Wu37/mxx4\n+lXGp/TF4iKSPdYL0w537Njhhw4d6vjjujtfP3KG3/n7I7w4Nk4pH/HB7cP84k9s5vabrqegGToi\n0sPM7El339Fqu0zPumnFzPjg9mF+6u1DPPHy6/yfZ0/xyFOv8pVnRukv5Hj/O9Zz201ruW3r9bx1\n/SC5yLpdsojIkl3TPfqFTM5UePz5M3xr5DW+evg0r12cAmBFMcc7NqziHTes5J0bVvHODat4+w0r\nGSxd0+dKEemixfboFfRNuDsn3pjgiZde55kTb3Jk9AJHTp3nwuTsWP5brh/gbcMr2bxmgE1r+sPP\nABvX9LO6v9DF6kUk6zR0swzMjM1rB9i8doBf+PFNQBz+J9+c4PnRCxwZPc+RU+c5dvoi3zr2GhMz\ncy+gtrKU54bVfdywuo/hVX0MryoxvKqP9Sv7WL+qxPqVJdYNlvQBLhFpKwX9EpkZm9YMsGnNAB/Y\nPlxvd3deH5/m5JsTnHhjghNvXOLkGxOcOj/JqXOTHDt9kbGLU1Sql7+CGijmWLuiyPUrilw/WKov\nXzdQZM1AgdX9BVbXbvsLrOovMFjME+k9AxFZBAX9MjEzrh8scf1giX+26boFt6lU45PB6fOTnLkw\nyZnzU5wdn+b18WnOXoyXT5+f5Mjoec6OTzNdTp7fHxmsKOVZ1VdgsJRnsC/PilKelaU8g6V4eUUp\nR38xx0Ahx0AxHy8XQ1sxHy8XZtv6CznMdPIQyRoFfQflImNoZYmhlSVgddNt3Z2JmQpvXJrh3KUZ\nzk3McG5imvMTZc5Pxr9fmCxzcarMxckyF6bitpNvXGJ8qsLFqTLj02WW+hZMfyEO/b58RF8hRzEf\nUchFFPMRxVxEIdyW8hGFnMXt+YhiLkchb5TCtvV9wnIp7Dd/XXGB+y7ma/cfaaaTyDJoW9Cb2U7g\nD4Ac8Kfu/sl2PVYWmVnodefZeF3/Fd2HuzNVrnJpusKl6TIT05WwXGFipjy7XL+N2ybLFSZnqkzO\nVJguV5mpVJmuVJkuV7k0EbdNlyvMVDxeDutqt8spF1l8EsgZxXxugRPM7Imj1OSkVDvB5HNGPjLy\nUbyci4xCFJ9Q4nXxciGsq22Xj4x8LiJnVt82srg9F9W2nV2u7RtFxLeGXi1J17Ql6M0sB3wW+CBw\nAviumR1w9+fa8XiyMDOjr5CjrxC/B9AJ7s5MxeOTwwIngXp7ucpUpcrMAuumytWGk0jtZBOftObc\nRyVenipXuTBZ5uy8k1JtXW3bbk8wm3NCMCMXTiD1E0bOZk8kUUS04Mlj7nJkFk5YETmDXBTF7Qvs\nG5mRiwiPEZGL4ov+1R4zqt3W26i3zVlfb2tYb2G/xvVmRBFz1897jKhejy1ci06Qy6JdPfpbgRF3\nfxHAzB4GdgEK+owzM4r5uMe9otTtauYqV6qUq0656lQqTrk6+3ttXaUan6Ti2/j3crVKOWxfqUIl\n3JarVarulMN2FQ/bVzxuD/dXqT1mw/7lqlOtzt2mvp3X6mu8n2q9tomZJvs2LMe1Veu1Ves1d/uZ\nWJrIZk+SjSeU+SeP2RMSc06U9ZPevO0aT5j5XESh9qquvhy/mitEs68GC+FVXyFsl4+M/mKOFcX4\nfbGBYo7BUp6BUo61A8We+f6LdgX9RuCVht9PALe16bFEFiX+j9vtKrrP3al6PDmg6t5wIvA5J4XL\n22ZPZrX1jfcxZ717OKk1rPfZE1F9fcNjXF4Llz1uZd62s/cZTsBOOAnGJ9XaiXK2zZkqV6h4OOFW\nZk+MM5XZE/pMJT5JzlScmeqVvRpc3V9g/crWvZ33vX2IT/zs9it4Jheva2/Gmtl9wH0AN954Y7fK\nELnmmFkY5tGQyGLVXk3VXv3NVGZf6U3MVBifit/fujhV5tJ0PEHi6RPnuDTd+kKJw6v62l5/u4L+\nJLC54fdNoa3O3R8CHoL4k7FtqkNE5KrFwzxLezn4y22q5Uq0awDpu8A2M9tqZkVgN3CgTY8lIiJN\ntKVH7+5lM/sV4KvE0ys/7+6H2/FYIiLSXNvG6N3974C/a9f9i4jI4vTG3B8REWkbBb2ISMYp6EVE\nMk5BLyKScQp6EZGM64mvEjSzMeD4VdzFOuC1ZSpnuaimxevFunqxJujNunqxJujNupa7pre4+1Cr\njXoi6K+WmR1azPcmdpJqWrxerKsXa4LerKsXa4LerKtbNWnoRkQk4xT0IiIZl5Wgf6jbBSxANS1e\nL9bVizVBb9bVizVBb9bVlZoyMUYvIiLJstKjFxGRBKkOejPbaWZHzWzEzB7o4ONuNrPHzew5Mzts\nZh8L7b9tZifN7Knw86GGfR4MdR41s7vaWNvLZvb98PiHQttaM3vUzI6F2zWdqsvM3t5wPJ4ys/Nm\n9vFuHCsz+7yZnTGzZxvalnxszOzHwzEeMbPP2FV8qWlCTZ8ys+fN7Bkz+1szuy60bzGziYZj9kcd\nrGnJz9dy1tSkri831PSymT0V2jt1rJKyoKt/V5dx91T+EF/++AXgJqAIPA1s79BjbwB+LCyvBP4J\n2A78NvAfF9h+e6ivBGwNdefaVNvLwLp5bf8VeCAsPwD8bqfranjOTgFv6caxAt4L/Bjw7NUcG+AJ\n4HbAgL8HfmaZa/ppIB+Wf7ehpi2N2827n3bXtOTnazlrSqpr3vrfA36rw8cqKQu6+nc1/yfNPfr6\nF5C7+zRQ+wLytnP3UXf/Xli+ABwh/p7cJLuAh919yt1fAkaI6++UXcC+sLwPuLtLdd0JvODuzT4c\n17aa3P2bwOsLPN6ij42ZbQBWufu3Pf7f+RcN+yxLTe7+NXevfQfdt4m/oS1RJ2pqoiPHqVVdofd7\nD/ClZvfRhmOVlAVd/buaL81Bv9AXkDcL27Ywsy3ALcB3QtOvhpfcn294udbJWh34upk9afH38gIM\nu/toWD4FDHehLoi/aazxP2K3jxUs/dhsDMudqu/fEffuaraGoYh/MLP3NNTaiZqW8nx1+ji9Bzjt\n7sca2jp6rOZlQU/9XaU56LvOzAaBvwY+7u7ngf9JPJR0MzBK/FKy037S3W8Gfga438ze27gy9BY6\nPtXK4q+U/DDwv0JTLxyrObp1bJKY2SeAMvDF0DQK3Bie3/8A/JWZrepQOT33fM3zUeZ2Ijp6rBbI\ngrpe+LtKc9C3/ALydjKzAvET+0V3/xsAdz/t7hV3rwJ/wuyQQ8dqdfeT4fYM8LehhtPhpWHtpeuZ\nTtdFfOL5nrufDvV1/VgFSz02J5k7lNKW+szs3wA/B/yrEBSEl/tnw/KTxOO7b+tETVfwfHXkOAGY\nWR74eeDLDfV27FgtlAX02N9VmoO+a19AHsYD/ww44u6fbmjf0LDZR4Da7IADwG4zK5nZVmAb8Rsv\ny13XCjNbWVsmflPv2fD4e8Jme4BHOllXMKfH1e1j1WBJxya8HD9vZreHv4N/3bDPsjCzncCvAx92\n90sN7UNmlgvLN4WaXuxQTUt6vjpRU4MPAM+7e33oo1PHKikL6LW/q+V6V7cbP8CHiN/lfgH4RAcf\n9yeJX4o9AzwVfj4EfAH4fmg/AGxo2OcToc6jLOO76fPquon4Hf2ngcO1YwJcDxwEjgFfB9Z2uK4V\nwFlgdUNbx48V8YlmFJghHgO990qODbCDOOheAP4H4YOHy1jTCPE4bu1v64/Ctr8QntengO8B/6KD\nNS35+VrOmpLqCu1/Dvz7edt26lglZUFX/67m/+iTsSIiGZfmoRsREVkEBb2ISMYp6EVEMk5BLyKS\ncQp6EZGMU9CLiGScgl5EJOMU9CIiGff/AQqkXAuonCReAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(s);" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(s[:10])" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": true }, "outputs": [], "source": [ "num_top_words=8\n", "\n", "def show_topics(a):\n", " top_words = lambda t: [vocab[i] for i in np.argsort(t)[:-num_top_words-1:-1]]\n", " topic_words = ([top_words(t) for t in a])\n", " return [' '.join(t) for t in topic_words]" ] }, { "cell_type": "code", "execution_count": 347, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['critus ditto propagandist surname galacticentric kindergarten surreal imaginative',\n", " 'jpeg gif file color quality image jfif format',\n", " 'graphics edu pub mail 128 3d ray ftp',\n", " 'jesus god matthew people atheists atheism does graphics',\n", " 'image data processing analysis software available tools display',\n", " 'god atheists atheism religious believe religion argument true',\n", " 'space nasa lunar mars probe moon missions probes',\n", " 'image probe surface lunar mars probes moon orbit',\n", " 'argument fallacy conclusion example true ad argumentum premises',\n", " 'space larson image theory universe physical nasa material']" ] }, "execution_count": 347, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_topics(Vh[:10])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We get topics that match the kinds of clusters we would expect! This is despite the fact that this is an **unsupervised algorithm** - which is to say, we never actually told the algorithm how our documents are grouped." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will return to SVD in **much more detail** later. For now, the important takeaway is that we have a tool that allows us to exactly factor a matrix into orthogonal columns and orthogonal rows." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Non-negative Matrix Factorization (NMF)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Motivation" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "\"PCA\n", "\n", "(source: [NMF Tutorial](http://perso.telecom-paristech.fr/~essid/teach/NMF_tutorial_ICME-2014.pdf))\n", "\n", "A more interpretable approach:\n", "\n", "\"NMF\n", "\n", "(source: [NMF Tutorial](http://perso.telecom-paristech.fr/~essid/teach/NMF_tutorial_ICME-2014.pdf))" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Idea" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Rather than constraining our factors to be *orthogonal*, another idea would to constrain them to be *non-negative*. NMF is a factorization of a non-negative data set $V$: $$ V = W H$$ into non-negative matrices $W,\\; H$. Often positive factors will be **more easily interpretable** (and this is the reason behind NMF's popularity). \n", "\n", "\"NMF\n", "\n", "(source: [NMF Tutorial](http://perso.telecom-paristech.fr/~essid/teach/NMF_tutorial_ICME-2014.pdf))\n", "\n", "Nonnegative matrix factorization (NMF) is a non-exact factorization that factors into one skinny positive matrix and one short positive matrix. NMF is NP-hard and non-unique. There are a number of variations on it, created by adding different constraints. " ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Applications of NMF" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "- [Face Decompositions](http://scikit-learn.org/stable/auto_examples/decomposition/plot_faces_decomposition.html#sphx-glr-auto-examples-decomposition-plot-faces-decomposition-py)\n", "- [Collaborative Filtering, eg movie recommendations](http://www.quuxlabs.com/blog/2010/09/matrix-factorization-a-simple-tutorial-and-implementation-in-python/)\n", "- [Audio source separation](https://pdfs.semanticscholar.org/cc88/0b24791349df39c5d9b8c352911a0417df34.pdf)\n", "- [Chemistry](http://ieeexplore.ieee.org/document/1532909/)\n", "- [Bioinformatics](https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-015-0485-4) and [Gene Expression](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2623306/)\n", "- Topic Modeling (our problem!)\n", "\n", "\"NMF\n", "\n", "(source: [NMF Tutorial](http://perso.telecom-paristech.fr/~essid/teach/NMF_tutorial_ICME-2014.pdf))" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**More Reading**:\n", "\n", "- [The Why and How of Nonnegative Matrix Factorization](https://arxiv.org/pdf/1401.5226.pdf)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### NMF from sklearn" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "First, we will use [scikit-learn's implementation of NMF](http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.NMF.html):" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "m,n=vectors.shape\n", "d=5 # num topics" ] }, { "cell_type": "code", "execution_count": 363, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "clf = decomposition.NMF(n_components=d, random_state=1)\n", "\n", "W1 = clf.fit_transform(vectors)\n", "H1 = clf.components_" ] }, { "cell_type": "code", "execution_count": 296, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "['jpeg image gif file color images format quality',\n", " 'edu graphics pub mail 128 ray ftp send',\n", " 'space launch satellite nasa commercial satellites year market',\n", " 'jesus matthew prophecy people said messiah david isaiah',\n", " 'image data available software processing ftp edu analysis',\n", " 'god atheists atheism religious believe people religion does']" ] }, "execution_count": 296, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_topics(H1)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### TF-IDF" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "[Topic Frequency-Inverse Document Frequency](http://www.tfidf.com/) (TF-IDF) is a way to normalize term counts by taking into account how often they appear in a document, how long the document is, and how commmon/rare the term is.\n", "\n", "TF = (# occurrences of term t in document) / (# of words in documents)\n", "\n", "IDF = log(# of documents / # documents with term t in it)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "vectorizer_tfidf = TfidfVectorizer(stop_words='english')\n", "vectors_tfidf = vectorizer_tfidf.fit_transform(newsgroups_train.data) # (documents, vocab)" ] }, { "cell_type": "code", "execution_count": 263, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "W1 = clf.fit_transform(vectors_tfidf)\n", "H1 = clf.components_" ] }, { "cell_type": "code", "execution_count": 255, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "['don people just think like know say religion',\n", " 'thanks graphics files image file program windows format',\n", " 'space nasa launch shuttle orbit lunar moon earth',\n", " 'ico bobbe tek beauchaine bronx manhattan sank queens',\n", " 'god jesus bible believe atheism christian does belief',\n", " 'objective morality values moral subjective science absolute claim']" ] }, "execution_count": 255, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_topics(H1)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(clf.components_[0])" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "43.71292605795277" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf.reconstruction_err_" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### NMF in summary" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Benefits: Fast and easy to use!\n", "\n", "Downsides: took years of research and expertise to create" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Notes:\n", "- For NMF, matrix needs to be at least as tall as it is wide, or we get an error with fit_transform\n", "- Can use df_min in CountVectorizer to only look at words that were in at least k of the split texts" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### NMF from scratch in numpy, using SGD" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Gradient Descent" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The key idea of standard **gradient descent**:\n", "1. Randomly choose some weights to start\n", "2. Loop:\n", " - Use weights to calculate a prediction\n", " - Calculate the derivative of the loss\n", " - Update the weights\n", "3. Repeat step 2 lots of times. Eventually we end up with some decent weights.\n", "\n", "**Key**: We want to decrease our loss and the derivative tells us the direction of **steepest descent**. \n", "\n", "Note that *loss*, *error*, and *cost* are all terms used to describe the same thing.\n", "\n", "Let's take a look at the [Gradient Descent Intro notebook](gradient-descent-intro.ipynb) (originally from the [fast.ai deep learning course](https://github.com/fastai/courses))." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### Stochastic Gradient Descent (SGD)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Stochastic gradient descent** is an incredibly useful optimization method (it is also the heart of deep learning, where it is used for backpropagation).\n", "\n", "For *standard* gradient descent, we evaluate the loss using **all** of our data which can be really slow. In *stochastic* gradient descent, we evaluate our loss function on just a sample of our data (sometimes called a *mini-batch*). We would get different loss values on different samples of the data, so this is *why it is stochastic*. It turns out that this is still an effective way to optimize, and it's much more efficient!\n", "\n", "We can see how this works in this [excel spreadsheet](graddesc.xlsm) (originally from the [fast.ai deep learning course](https://github.com/fastai/courses)).\n", "\n", "**Resources**:\n", "- [SGD Lecture from Andrew Ng's Coursera ML course](https://www.coursera.org/learn/machine-learning/lecture/DoRHJ/stochastic-gradient-descent)\n", "- fast.ai wiki page on SGD\n", "- [Gradient Descent For Machine Learning](http://machinelearningmastery.com/gradient-descent-for-machine-learning/) (Jason Brownlee- Machine Learning Mastery)\n", "- [An overview of gradient descent optimization algorithms](http://sebastianruder.com/optimizing-gradient-descent/)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### Applying SGD to NMF" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "hidden": true }, "source": [ "**Goal**: Decompose $V\\;(m \\times n)$ into $$V \\approx WH$$ where $W\\;(m \\times d)$ and $H\\;(d \\times n)$, $W,\\;H\\;>=\\;0$, and we've minimized the Frobenius norm of $V-WH$.\n", "\n", "**Approach**: We will pick random positive $W$ & $H$, and then use SGD to optimize." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**To use SGD, we need to know the gradient of the loss function.**\n", "\n", "**Sources**:\n", "- Optimality and gradients of NMF: http://users.wfu.edu/plemmons/papers/chu_ple.pdf\n", "- Projected gradients: https://www.csie.ntu.edu.tw/~cjlin/papers/pgradnmf.pdf" ] }, { "cell_type": "code", "execution_count": 272, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "lam=1e3\n", "lr=1e-2\n", "m, n = vectors_tfidf.shape" ] }, { "cell_type": "code", "execution_count": 252, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "W1 = clf.fit_transform(vectors)\n", "H1 = clf.components_" ] }, { "cell_type": "code", "execution_count": 253, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "['jpeg image gif file color images format quality',\n", " 'edu graphics pub mail 128 ray ftp send',\n", " 'space launch satellite nasa commercial satellites year market',\n", " 'jesus matthew prophecy people said messiah david isaiah',\n", " 'image data available software processing ftp edu analysis',\n", " 'god atheists atheism religious believe people religion does']" ] }, "execution_count": 253, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_topics(H1)" ] }, { "cell_type": "code", "execution_count": 265, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "mu = 1e-6\n", "def grads(M, W, H):\n", " R = W@H-M\n", " return R@H.T + penalty(W, mu)*lam, W.T@R + penalty(H, mu)*lam # dW, dH" ] }, { "cell_type": "code", "execution_count": 266, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def penalty(M, mu):\n", " return np.where(M>=mu,0, np.min(M - mu, 0))" ] }, { "cell_type": "code", "execution_count": 267, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def upd(M, W, H, lr):\n", " dW,dH = grads(M,W,H)\n", " W -= lr*dW; H -= lr*dH" ] }, { "cell_type": "code", "execution_count": 268, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def report(M,W,H): \n", " print(np.linalg.norm(M-W@H), W.min(), H.min(), (W<0).sum(), (H<0).sum())" ] }, { "cell_type": "code", "execution_count": 348, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "W = np.abs(np.random.normal(scale=0.01, size=(m,d)))\n", "H = np.abs(np.random.normal(scale=0.01, size=(d,n)))" ] }, { "cell_type": "code", "execution_count": 349, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "44.4395133509 5.67503308167e-07 2.49717354504e-07 0 0\n" ] } ], "source": [ "report(vectors_tfidf, W, H)" ] }, { "cell_type": "code", "execution_count": 350, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "upd(vectors_tfidf,W,H,lr)" ] }, { "cell_type": "code", "execution_count": 351, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "44.4194155587 -0.00186845669883 -0.000182969569359 509 788\n" ] } ], "source": [ "report(vectors_tfidf, W, H)" ] }, { "cell_type": "code", "execution_count": 352, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "44.4071645597 -0.00145791197281 -0.00012862260312 343 1174\n", "44.352156176 -0.000549676823494 -9.16363641124e-05 218 4689\n", "44.3020593384 -0.000284017335617 -0.000130903875061 165 9685\n", "44.2468609535 -0.000279317810433 -0.000182173029912 169 16735\n", "44.199218 -0.000290092649623 -0.000198140867356 222 25109\n" ] } ], "source": [ "for i in range(50): \n", " upd(vectors_tfidf,W,H,lr)\n", " if i % 10 == 0: report(vectors_tfidf,W,H)" ] }, { "cell_type": "code", "execution_count": 281, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "['cview file image edu files use directory temp',\n", " 'moral like time does don software new years',\n", " 'god jesus bible believe objective exist atheism belief',\n", " 'thanks graphics program know help looking windows advance',\n", " 'space nasa launch shuttle orbit station moon lunar',\n", " 'people don said think ico tek bobbe bronx']" ] }, "execution_count": 281, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_topics(H)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "This is painfully slow to train! Lots of parameter fiddling and still slow to train (or explodes)." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### PyTorch" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "[PyTorch](http://pytorch.org/) is a Python framework for tensors and dynamic neural networks with GPU acceleration. Many of the core contributors work on Facebook's AI team. In many ways, it is similar to Numpy, only with the increased parallelization of using a GPU.\n", "\n", "From the [PyTorch documentation](http://pytorch.org/tutorials/beginner/blitz/tensor_tutorial.html):\n", "\n", "\"pytorch\"\n", "\n", "**Further learning**: If you are curious to learn what *dynamic* neural networks are, you may want to watch [this talk](https://www.youtube.com/watch?v=Z15cBAuY7Sc) by Soumith Chintala, Facebook AI researcher and core PyTorch contributor.\n", "\n", "If you want to learn more PyTorch, you can try this [tutorial](http://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html) or this [learning by examples](http://pytorch.org/tutorials/beginner/pytorch_with_examples.html)." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Note about GPUs**: If you are not using a GPU, you will need to remove the `.cuda()` from the methods below. GPU usage is not required for this course, but I thought it would be of interest to some of you. To learn how to create an AWS instance with a GPU, you can watch the [fast.ai setup lesson](http://course.fast.ai/lessons/aws.html)." ] }, { "cell_type": "code", "execution_count": 282, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "import torch\n", "import torch.cuda as tc\n", "from torch.autograd import Variable" ] }, { "cell_type": "code", "execution_count": 283, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def V(M): return Variable(M, requires_grad=True)" ] }, { "cell_type": "code", "execution_count": 284, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "v=vectors_tfidf.todense()" ] }, { "cell_type": "code", "execution_count": 285, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "t_vectors = torch.Tensor(v.astype(np.float32)).cuda()" ] }, { "cell_type": "code", "execution_count": 286, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "mu = 1e-5" ] }, { "cell_type": "code", "execution_count": 287, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def grads_t(M, W, H):\n", " R = W.mm(H)-M\n", " return (R.mm(H.t()) + penalty_t(W, mu)*lam, \n", " W.t().mm(R) + penalty_t(H, mu)*lam) # dW, dH\n", "\n", "def penalty_t(M, mu):\n", " return (M]" ] }, "execution_count": 292, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(t_H.cpu().numpy()[0])" ] }, { "cell_type": "code", "execution_count": 1328, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "0.43389660120010376" ] }, "execution_count": 1328, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t_W.mm(t_H).max()" ] }, { "cell_type": "code", "execution_count": 1329, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "0.9188119769096375" ] }, "execution_count": 1329, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t_vectors.max()" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### PyTorch: autograd" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Above, we used our knowledge of what the gradient of the loss function was to do SGD from scratch in PyTorch. However, PyTorch has an automatic differentiation package, [autograd](http://pytorch.org/docs/autograd.html) which we could use instead. This is really useful, in that we can use autograd on problems where we don't know what the derivative is. \n", "\n", "The approach we use below is very general, and would work for almost any optimization problem.\n", "\n", "In PyTorch, Variables have the same API as tensors, but Variables remember the operations used on to create them. This lets us take derivatives." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### PyTorch Autograd Introduction" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Example taken from [this tutorial](http://pytorch.org/tutorials/beginner/former_torchies/autograd_tutorial.html) in the official documentation." ] }, { "cell_type": "code", "execution_count": 375, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Variable containing:\n", " 1 1\n", " 1 1\n", "[torch.FloatTensor of size 2x2]\n", "\n" ] } ], "source": [ "x = Variable(torch.ones(2, 2), requires_grad=True)\n", "print(x)" ] }, { "cell_type": "code", "execution_count": 376, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " 1 1\n", " 1 1\n", "[torch.FloatTensor of size 2x2]\n", "\n" ] } ], "source": [ "print(x.data)" ] }, { "cell_type": "code", "execution_count": 377, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Variable containing:\n", " 0 0\n", " 0 0\n", "[torch.FloatTensor of size 2x2]\n", "\n" ] } ], "source": [ "print(x.grad)" ] }, { "cell_type": "code", "execution_count": 378, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Variable containing:\n", " 3 3\n", " 3 3\n", "[torch.FloatTensor of size 2x2]\n", "\n" ] } ], "source": [ "y = x + 2\n", "print(y)" ] }, { "cell_type": "code", "execution_count": 383, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Variable containing:\n", " 27 27\n", " 27 27\n", "[torch.FloatTensor of size 2x2]\n", " Variable containing:\n", " 108\n", "[torch.FloatTensor of size 1]\n", "\n" ] } ], "source": [ "z = y * y * 3\n", "out = z.sum()\n", "print(z, out)" ] }, { "cell_type": "code", "execution_count": 382, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Variable containing:\n", " 18 18\n", " 18 18\n", "[torch.FloatTensor of size 2x2]\n", "\n" ] } ], "source": [ "out.backward()\n", "print(x.grad)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Using Autograd for NMF" ] }, { "cell_type": "code", "execution_count": 167, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "lam=1e6" ] }, { "cell_type": "code", "execution_count": 168, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "pW = Variable(tc.FloatTensor(m,d), requires_grad=True)\n", "pH = Variable(tc.FloatTensor(d,n), requires_grad=True)\n", "pW.data.normal_(std=0.01).abs_()\n", "pH.data.normal_(std=0.01).abs_();" ] }, { "cell_type": "code", "execution_count": 357, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def report():\n", " W,H = pW.data, pH.data\n", " print((M-pW.mm(pH)).norm(2).data[0], W.min(), H.min(), (W<0).sum(), (H<0).sum())\n", "\n", "def penalty(A):\n", " return torch.pow((A<0).type(tc.FloatTensor)*torch.clamp(A, max=0.), 2)\n", "\n", "def penalize(): return penalty(pW).mean() + penalty(pH).mean()\n", "\n", "def loss(): return (M-pW.mm(pH)).norm(2) + penalize()*lam" ] }, { "cell_type": "code", "execution_count": 358, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "M = Variable(t_vectors).cuda()" ] }, { "cell_type": "code", "execution_count": 359, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "43.66044616699219 -0.0002547535696066916 -0.00046720390673726797 319 8633\n" ] } ], "source": [ "opt = torch.optim.Adam([pW,pH], lr=1e-3, betas=(0.9,0.9))\n", "lr = 0.05\n", "report()" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "How to apply SGD, using autograd:" ] }, { "cell_type": "code", "execution_count": 361, "metadata": { "hidden": true, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "43.628597259521484 -0.022899555042386055 -0.26526615023612976 692 82579\n", "43.62860107421875 -0.021287493407726288 -0.2440912425518036 617 77552\n", "43.628597259521484 -0.020111067220568657 -0.22828206419944763 576 77726\n", "43.628604888916016 -0.01912039890885353 -0.21654289960861206 553 84411\n", "43.62861251831055 -0.018248897045850754 -0.20736189186573029 544 75546\n", "43.62862014770508 -0.01753264293074608 -0.19999365508556366 491 78949\n", "43.62862777709961 -0.016773322597146034 -0.194113627076149 513 83822\n", "43.628639221191406 -0.01622121036052704 -0.18905577063560486 485 74101\n", "43.62863540649414 -0.01574397087097168 -0.18498440086841583 478 85987\n", "43.628639221191406 -0.015293922275304794 -0.18137598037719727 487 74023\n" ] } ], "source": [ "for i in range(1000): \n", " opt.zero_grad()\n", " l = loss()\n", " l.backward()\n", " opt.step()\n", " if i % 100 == 99: \n", " report()\n", " lr *= 0.9 # learning rate annealling" ] }, { "cell_type": "code", "execution_count": 362, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "['god jesus bible believe atheism christian belief does',\n", " 'thanks graphics files image file windows program format',\n", " 'just don think people like ve graphics religion',\n", " 'objective morality values moral subjective science absolute claim',\n", " 'ico bobbe tek beauchaine bronx manhattan sank queens',\n", " 'space nasa shuttle launch orbit lunar moon data']" ] }, "execution_count": 362, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h = pH.data.cpu().numpy()\n", "show_topics(h)" ] }, { "cell_type": "code", "execution_count": 174, "metadata": { "hidden": true, "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n7iIiAfr/05ddF5ayNa4AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(h[0]);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Comparing Approaches" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Scikit-Learn's NMF\n", "- Fast\n", "- No parameter tuning\n", "- Relies on decades of academic research, took experts a long time to implement\n", "\n", "\"research\n", "source: [Python Nimfa Documentation](http://nimfa.biolab.si/)\n", "\n", "#### Using PyTorch and SGD\n", "- Took us an hour to implement, didn't have to be NMF experts\n", "- Parameters were fiddly\n", "- Not as fast (tried in numpy and was so slow we had to switch to PyTorch)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Truncated SVD" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We saved a lot of time when we calculated NMF by only calculating the subset of columns we were interested in. Is there a way to get this benefit with SVD? Yes there is! It's called truncated SVD. We are just interested in the vectors corresponding to the **largest** singular values." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"\"\n", "(source: [Facebook Research: Fast Randomized SVD](https://research.fb.com/fast-randomized-svd/))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Shortcomings of classical algorithms for decomposition:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Matrices are \"stupendously big\"\n", "- Data are often **missing or inaccurate**. Why spend extra computational resources when imprecision of input limits precision of the output?\n", "- **Data transfer** now plays a major role in time of algorithms. Techniques the require fewer passes over the data may be substantially faster, even if they require more flops (flops = floating point operations).\n", "- Important to take advantage of **GPUs**.\n", "\n", "(source: [Halko](https://arxiv.org/abs/0909.4061))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Advantages of randomized algorithms:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- inherently stable\n", "- performance guarantees do not depend on subtle spectral properties\n", "- needed matrix-vector products can be done in parallel\n", "\n", "(source: [Halko](https://arxiv.org/abs/0909.4061))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Randomized SVD" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Reminder: full SVD is **slow**. This is the calculation we did above using Scipy's Linalg SVD:" ] }, { "cell_type": "code", "execution_count": 384, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2034, 26576)" ] }, "execution_count": 384, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vectors.shape" ] }, { "cell_type": "code", "execution_count": 344, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 27.2 s, sys: 812 ms, total: 28 s\n", "Wall time: 27.9 s\n" ] } ], "source": [ "%time U, s, Vh = linalg.svd(vectors, full_matrices=False)" ] }, { "cell_type": "code", "execution_count": 345, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(2034, 2034) (2034,) (2034, 26576)\n" ] } ], "source": [ "print(U.shape, s.shape, Vh.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fortunately, there is a faster way:" ] }, { "cell_type": "code", "execution_count": 175, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 144 ms, sys: 8 ms, total: 152 ms\n", "Wall time: 154 ms\n" ] } ], "source": [ "%time u, s, v = decomposition.randomized_svd(vectors, 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The runtime complexity for SVD is $\\mathcal{O}(\\text{min}(m^2 n,\\; m n^2))$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Question**: How can we speed things up? (without new breakthroughs in SVD research)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Idea**: Let's use a smaller matrix (with smaller $n$)!\n", "\n", "Instead of calculating the SVD on our full matrix $A$ which is $m \\times n$, let's use $B = A Q$, which is just $m \\times r$ and $r << n$\n", "\n", "We haven't found a better general SVD method, we are just using the method we have on a smaller matrix." ] }, { "cell_type": "code", "execution_count": 175, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 144 ms, sys: 8 ms, total: 152 ms\n", "Wall time: 154 ms\n" ] } ], "source": [ "%time u, s, v = decomposition.randomized_svd(vectors, 5)" ] }, { "cell_type": "code", "execution_count": 177, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((2034, 5), (5,), (5, 26576))" ] }, "execution_count": 177, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u.shape, s.shape, v.shape" ] }, { "cell_type": "code", "execution_count": 178, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['jpeg image edu file graphics images gif data',\n", " 'jpeg gif file color quality image jfif format',\n", " 'space jesus launch god people satellite matthew atheists',\n", " 'jesus god matthew people atheists atheism does graphics',\n", " 'image data processing analysis software available tools display']" ] }, "execution_count": 178, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_topics(v)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are some results from [Facebook Research](https://research.fb.com/fast-randomized-svd/):\n", "\n", "\"\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Johnson-Lindenstrauss Lemma**: ([from wikipedia](https://en.wikipedia.org/wiki/Johnson%E2%80%93Lindenstrauss_lemma)) a small set of points in a high-dimensional space can be embedded into a space of much lower dimension in such a way that distances between the points are nearly preserved.\n", "\n", "It is desirable to be able to reduce dimensionality of data in a way that preserves relevant structure. The Johnson–Lindenstrauss lemma is a classic result of this type." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementing our own Randomized SVD" ] }, { "cell_type": "code", "execution_count": 112, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from scipy import linalg" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The method `randomized_range_finder` finds an orthonormal matrix whose range approximates the range of A (step 1 in our algorithm above). To do so, we use the LU and QR factorizations, both of which we will be covering in depth later.\n", "\n", "I am using the [scikit-learn.extmath.randomized_svd source code](https://github.com/scikit-learn/scikit-learn/blob/14031f65d144e3966113d3daec836e443c6d7a5b/sklearn/utils/extmath.py) as a guide." ] }, { "cell_type": "code", "execution_count": 182, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# computes an orthonormal matrix whose range approximates the range of A\n", "# power_iteration_normalizer can be safe_sparse_dot (fast but unstable), LU (imbetween), or QR (slow but most accurate)\n", "def randomized_range_finder(A, size, n_iter=5):\n", " Q = np.random.normal(size=(A.shape[1], size))\n", " \n", " for i in range(n_iter):\n", " Q, _ = linalg.lu(A @ Q, permute_l=True)\n", " Q, _ = linalg.lu(A.T @ Q, permute_l=True)\n", " \n", " Q, _ = linalg.qr(A @ Q, mode='economic')\n", " return Q" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's our randomized SVD method:" ] }, { "cell_type": "code", "execution_count": 236, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def randomized_svd(M, n_components, n_oversamples=10, n_iter=4):\n", " \n", " n_random = n_components + n_oversamples\n", " \n", " Q = randomized_range_finder(M, n_random, n_iter)\n", " \n", " # project M to the (k + p) dimensional space using the basis vectors\n", " B = Q.T @ M\n", " \n", " # compute the SVD on the thin matrix: (k + p) wide\n", " Uhat, s, V = linalg.svd(B, full_matrices=False)\n", " del B\n", " U = Q @ Uhat\n", " \n", " return U[:, :n_components], s[:n_components], V[:n_components, :]" ] }, { "cell_type": "code", "execution_count": 237, "metadata": { "collapsed": true }, "outputs": [], "source": [ "u, s, v = randomized_svd(vectors, 5)" ] }, { "cell_type": "code", "execution_count": 238, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 136 ms, sys: 0 ns, total: 136 ms\n", "Wall time: 137 ms\n" ] } ], "source": [ "%time u, s, v = randomized_svd(vectors, 5)" ] }, { "cell_type": "code", "execution_count": 239, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((2034, 5), (5,), (5, 26576))" ] }, "execution_count": 239, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u.shape, s.shape, v.shape" ] }, { "cell_type": "code", "execution_count": 247, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['jpeg image edu file graphics images gif data',\n", " 'edu graphics data space pub mail 128 3d',\n", " 'space jesus launch god people satellite matthew atheists',\n", " 'space launch satellite commercial nasa satellites market year',\n", " 'image data processing analysis software available tools display']" ] }, "execution_count": 247, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_topics(v)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Write a loop to calculate the error of your decomposition as you vary the # of topics. Plot the result" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Answer" ] }, { "cell_type": "code", "execution_count": 248, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#Exercise: Write a loop to calculate the error of your decomposition as you vary the # of topics\n" ] }, { "cell_type": "code", "execution_count": 242, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 242, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(range(0,n*step,step), error)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Further Resources**:\n", "- [a whole course on randomized algorithms](http://www.cs.ubc.ca/~nickhar/W12/)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### More Details" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Here is a process to calculate a truncated SVD, described in [Finding Structure with Randomness: Probabilistic Algorithms for Constructing Approximate Matrix Decompositions](https://arxiv.org/pdf/0909.4061.pdf) and [summarized in this blog post](https://research.fb.com/fast-randomized-svd/):\n", "\n", "1\\. Compute an approximation to the range of $A$. That is, we want $Q$ with $r$ orthonormal columns such that $$A \\approx QQ^TA$$\n", "\n", "\n", "2\\. Construct $B = Q^T A$, which is small ($r\\times n$)\n", "\n", "\n", "3\\. Compute the SVD of $B$ by standard methods (fast since $B$ is smaller than $A$), $B = S\\,\\Sigma V^T$\n", "\n", "4\\. Since $$ A \\approx Q Q^T A = Q (S\\,\\Sigma V^T)$$ if we set $U = QS$, then we have a low rank approximation $A \\approx U \\Sigma V^T$." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### So how do we find $Q$ (in step 1)?" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "To estimate the range of $A$, we can just take a bunch of random vectors $w_i$, evaluate the subspace formed by $Aw_i$. We can form a matrix $W$ with the $w_i$ as it's columns. Now, we take the QR decomposition of $AW = QR$, then the columns of $Q$ form an orthonormal basis for $AW$, which is the range of $A$.\n", "\n", "Since the matrix $AW$ of the product has far more rows than columns and therefore, approximately, orthonormal columns. This is simple probability - with lots of rows, and few columns, it's unlikely that the columns are linearly dependent." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### The QR Decomposition" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "We will be learning about the QR decomposition **in depth** later on. For now, you just need to know that $A = QR$, where $Q$ consists of orthonormal columns, and $R$ is upper triangular. Trefethen says that the QR decomposition is the most important idea in numerical linear algebra! We will definitely be returning to it." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### How should we choose $r$?" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Suppose our matrix has 100 columns, and we want 5 columns in U and V. To be safe, we should project our matrix onto an orthogonal basis with a few more rows and columns than 5 (let's use 15). At the end, we will just grab the first 5 columns of U and V\n", "\n", "So even although our projection was only approximate, by making it a bit bigger than we need, we can make up for the loss of accuracy (since we're only taking a subset later). " ] }, { "cell_type": "code", "execution_count": 175, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 144 ms, sys: 8 ms, total: 152 ms\n", "Wall time: 154 ms\n" ] } ], "source": [ "%time u, s, v = decomposition.randomized_svd(vectors, 5)" ] }, { "cell_type": "code", "execution_count": 176, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 2.38 s, sys: 592 ms, total: 2.97 s\n", "Wall time: 2.96 s\n" ] } ], "source": [ "%time u, s, v = decomposition.randomized_svd(vectors.todense(), 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## End" ] } ], "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: nbs/3. Background Removal with Robust PCA.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "You can read an overview of this Numerical Linear Algebra course in [this blog post](http://www.fast.ai/2017/07/17/num-lin-alg/). The course was originally taught in the [University of San Francisco MS in Analytics](https://www.usfca.edu/arts-sciences/graduate-programs/analytics) graduate program. Course lecture videos are [available on YouTube](https://www.youtube.com/playlist?list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY) (note that the notebook numbers and video numbers do not line up, since some notebooks took longer than 1 video to cover).\n", "\n", "You can ask questions about the course on [our fast.ai forums](http://forums.fast.ai/c/lin-alg)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3. Background Removal with Robust PCA" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Our goal today**: ![background removal](images/surveillance3.png)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "## Getting Started" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Let's use the real video 003 dataset from [BMC 2012 Background Models Challenge Dataset](http://bmc.iut-auvergne.com/?page_id=24)\n", "\n", "Other sources of datasets:\n", "- [Human Activity Video Datasets](https://www.cs.utexas.edu/~chaoyeh/web_action_data/dataset_list.html)\n", "- [Background Subtraction Website](https://sites.google.com/site/backgroundsubtraction/test-sequences) (a few links on this site are broken/outdated, but many work)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Import needed libraries:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "import moviepy.editor as mpe\n", "# from IPython.display import display\n", "from glob import glob" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "import sys, os\n", "import numpy as np\n", "import scipy" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "# MAX_ITERS = 10\n", "TOL = 1.0e-8" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "video = mpe.VideoFileClip(\"data/Video_003.avi\")" ] }, { "cell_type": "code", "execution_count": 179, "metadata": { "hidden": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|█████████▉| 350/351 [00:00<00:00, 1258.81it/s]\n" ] }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "execution_count": 179, "metadata": {}, "output_type": "execute_result" } ], "source": [ "video.subclip(0,50).ipython_display(width=300)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "113.57" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "video.duration" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "### Helper Methods" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def create_data_matrix_from_video(clip, k=5, scale=50):\n", " return np.vstack([scipy.misc.imresize(rgb2gray(clip.get_frame(i/float(k))).astype(int), \n", " scale).flatten() for i in range(k * int(clip.duration))]).T" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def rgb2gray(rgb):\n", " return np.dot(rgb[...,:3], [0.299, 0.587, 0.114])" ] }, { "cell_type": "code", "execution_count": 83, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def plt_images(M, A, E, index_array, dims, filename=None):\n", " f = plt.figure(figsize=(15, 10))\n", " r = len(index_array)\n", " pics = r * 3\n", " for k, i in enumerate(index_array):\n", " for j, mat in enumerate([M, A, E]):\n", " sp = f.add_subplot(r, 3, 3*k + j + 1)\n", " sp.axis('Off')\n", " pixels = mat[:,i]\n", " if isinstance(pixels, scipy.sparse.csr_matrix):\n", " pixels = pixels.todense()\n", " plt.imshow(np.reshape(pixels, dims), cmap='gray')\n", " return f" ] }, { "cell_type": "code", "execution_count": 95, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def plots(ims, dims, figsize=(15,20), rows=1, interp=False, titles=None):\n", " if type(ims[0]) is np.ndarray:\n", " ims = np.array(ims)\n", " f = plt.figure(figsize=figsize)\n", " for i in range(len(ims)):\n", " sp = f.add_subplot(rows, len(ims)//rows, i+1)\n", " sp.axis('Off')\n", " plt.imshow(np.reshape(ims[i], dims), cmap=\"gray\")" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "### Load and view the data" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "An image from 1 moment in time is 60 pixels by 80 pixels (when scaled). We can *unroll* that picture into a single tall column. So instead of having a 2D picture that is $60 \\times 80$, we have a $1 \\times 4,800$ column \n", "\n", "This isn't very human-readable, but it's handy because it lets us stack the images from different times on top of one another, to put a video all into 1 matrix. If we took the video image every tenth of a second for 113 seconds (so 11,300 different images, each from a different point in time), we'd have a $11300 \\times 4800$ matrix, representing the video! " ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "scale = 25 # Adjust scale to change resolution of image\n", "dims = (int(240 * (scale/100)), int(320 * (scale/100)))" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "M = create_data_matrix_from_video(video, 100, scale)\n", "# M = np.load(\"high_res_surveillance_matrix.npy\")" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(60, 80) (4800, 11300)\n" ] } ], "source": [ "print(dims, M.shape)" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "hidden": true, "scrolled": true }, "outputs": [ { "data": { "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(np.reshape(M[:,140], dims), cmap='gray');" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Since `create_data_from_matrix` is somewhat slow, we will save our matrix. In general, whenever you have slow pre-processing steps, it's a good idea to save the results for future use." ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "np.save(\"low_res_surveillance_matrix.npy\", M)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Note: High-res M is too big to plot, so only run the below with the low-res version" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "hidden": true, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12, 12))\n", "plt.imshow(M, cmap='gray')" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Questions**: What are those wavy black lines? What are the horizontal lines?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "plt.imsave(fname=\"image1.jpg\", arr=np.reshape(M[:,140], dims), cmap='gray')" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "## SVD" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Review from Lesson 2**:\n", "- What kind of matrices are returned by SVD?\n", "- What is a way to speed up truncated SVD?" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "### A first attempt with SVD" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "from sklearn import decomposition" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "u, s, v = decomposition.randomized_svd(M, 2)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "((4800, 2), (2,), (2, 11300))" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u.shape, s.shape, v.shape" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "low_rank = u @ np.diag(s) @ v" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(4800, 11300)" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "low_rank.shape" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "hidden": true, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12, 12))\n", "plt.imshow(low_rank, cmap='gray')" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The below images were created with high-res data. Very slow to process:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "hidden": true, "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(np.reshape(low_rank[:,140], dims), cmap='gray');" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(np.reshape(M[:,550] - low_rank[:,550], dims), cmap='gray');" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Rank 1 Approximation" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "u, s, v = decomposition.randomized_svd(M, 1)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "((4800, 1), (1,), (1, 11300))" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u.shape, s.shape, v.shape" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "low_rank = u @ np.diag(s) @ v" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(4800, 11300)" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "low_rank.shape" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "hidden": true, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nJ9l0kSvWnMBqVA4rtEpzDdvUVqB1Sz9aQaxBumtdr0EvpKQFpsoANs44tYP6YANld8koKTVWn8OF\nI1hBLbaifUGv7aoN3WmFfJdJoy72/HGnOZD7MGvdSHZEIj74tkKObl9jZ0FKCY4fP27qGCUlodeV\noGRwWMI/JPfcapWMKTsWOzmwidkzWffkjEorZoqMlBQCKoa213HRIzRjS9r/Wtf/1tZWVaIrWeRE\nQKuWcb5RG//p9Tkp2R4i3KQxi8X5Riy0NqWO5gbX36yLxlyk49JrYelDGxUDfezYMXjlK1/5vGOY\ng+cqi+oE1olQS1K5vCT2oghx6XzUVrZ3e057nbY/tFanpc5HUuYSCeC2DKn0UbDsULQGt6CQ2ogk\n0Ng4jEB+j6Pd1pNSjXzG817frMlztEulb0GgNYjqS5JwCuxv7Fhul6rbOe9dYodrd62wVQPexSNl\nVwLJPJgTaikXosJJNL5+b29PlA5gAQT6K1/5CvzGb/yGOH2t7bMaq6MW9rSI2Kpb0nZfaXBFbjNH\nlKcnYP2zR7JMoVY9R9msXZcR9rFFWSv0OkZ6CeGoZZsSMCT+odd2G+EhuK14Qg1Y+u3cbRm5CBjx\nxBNPiNN2T6Bf9KIXwVve8hY2nUZ91IZCaGEZLF5VOk83pwItRaQKXCOEw6OQa/tATbVci9YKCRZu\nkqOkaGHno/uxZWJsQaSsuwmU8ukhxJzC5W2X3EbkYiWKQJSOYSEt0zqS7hpRNjzQbq1HQLKbiKWh\nbJbqtcauWw1gbV5jPGHQ8qcWc5S03bxluf/++8VpuyfQly5dgocffphNl1daKTC/9IARBQ+BLg1W\nLQmOSMfZwOy2QnReUnu1nI6F0HBlaa3m9/Lqp7yPz6l2YG3Q62vsotKVMEc7YHlqX2OHnbPY06TX\n2JyWRfLe/Ojxmvuwmu3d6vWcm4CWfpBql1Kdel9jp319JAdPeS5duiRO2z2BTinB9vY2mabUoUqV\nPR5rsT1qJdBTG5I8ou9lSeEXJcxNoEvg2ogrS+tJYM4YPawcc28VYm0wndTy+tK0W7SKyLXfphBo\nTR1L2lAjrmA2rTsPpf6TUnre/5yNCLQab1h9Y/dq9UlLU6AxtCTQWF8b+6I0vTe/KTSCVKs3onVP\noHd3d+GWW25Bz1OB4xi8A4gLk/Aq0By05Z+LjOfI87BuEUemxbbKIsvmIdBzEsecjLUm1a0JdGm7\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12, 12))\n", "plt.imshow(low_rank, cmap='gray')" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(np.reshape(M[:,550] - low_rank[:,550], dims), cmap='gray');" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\nqzYINNND0UjAIdehGexywS/JoIHgyMPBYhSQOF7V+kuu3EEJIgZ4xy8pw8wh20sdMRoDsyeAHE91\nbNGHLxhgqUPGgHJICmB5GAUz4SVwNupUTsvZDKqLS6ajybrZOVFXtyf1g9/cdoME/1uHPOx1vLMD\nVzNyy92GCNvs1l2mE6T9noiwDPzJ8/S/Y/BenUG7L1++POsEMjH7S3ZoWVmHrSNph9nX7if3X4Zt\nuvAan57s4VXXCWj5TOpe3uNlgJ6/yOdypPI4aSNA02zR8amqWjtdJRc3L61367yIlcOnsiTg5ClH\nfrbq5L5YAyp17EAgZ1rzO8DI4QgskM5hrAPlAL9jma4LC3kPDg7WtgNyj/O0oVQdrxmEWfIsw0/L\nx2U6f2TnZ/f29toYl8ER4HZf52gjTz2izk7JWN3OdH6doedowH1uZ+fF6PyfJ0+ZiXY6xH0Ot0zT\ndOLIwqXJEDs0wg5cd5u6WPz29nbdunVrJicd+1zSl3Rw1oc8od9lemWG2WYydFKWb1LjkYqdmutl\n4mS9zL4/TxrJzp5EGmN8raruVtXXn3RdHjO9sS7q/Gql12K9L+r86qW/jHp/yzRNz55100aAZlXV\nGOOPpmn6T550PR4nXdT51UuvxXpf1PnVS69mvR9vKfxFukgX6SL9/zxdgOZFukgX6SI9Rtok0Pz5\nJ12BbyJd1PnVS6/Fel/U+dVLr1q9NyameZEu0kW6SK+FtElM8yJdpIt0kTY+PXHQHGN89xjjs2OM\nL4wxfvRJ1+e0NMb40hjjj8cYHx9j/NHRtWfGGB8ZY3z+6PP1T7iO/3iM8dUxxqd0bbGOY4wfO5L9\nZ8cY37VBdf7xMcZXjmT98THG92xYnd8+xvitMcafjDE+Pcb420fXN1bWp9R502V9dYzx0THGJ47q\n/RNH15+MrL1z4dX+q6pLVfXFqvrWqrpSVZ+oqvc9yTqdUd8vVdUb49r/XFU/evT9R6vqf3rCdfxg\nVf21qvrUWXWsqvcdyXy7qp4/6otLG1LnH6+qH2nu3ZQ6v6Wq/trR9xtV9bmjum2srE+p86bLelTV\n9aPvl6vqX1fVf/qkZP2kmeb7q+oL0zT92TRND6rql6rqe59wnR43fW9V/eLR91+sqv/qCdalpmn6\nnar6i7i8VMfvrapfmqbp/jRNf15VX6jDPnlV00Kdl9Km1PmFaZr+zdH321X1map6a22wrE+p81J6\n4nWuqpoO052jfy8f/U31hGT9pEHzrVX17/T/l+v0TnzSaaqq3xxjfGyM8YNH156bpumFo+//vqqe\nezJVOzUt1XHT5f+3xhifPBq+M/TauDqPMd5ZVd9RhwzoNSHrqHPVhst6jHFpjPHxqvpqVX1kmqYn\nJusnDZqvtfSBaZq+var+elX90Bjjg/5xOhwbbPRyhNdCHY/SP6zDsM23V9ULVfUPnmx1+jTGuF5V\n/7yq/s40Tbf826bKuqnzxst6mqaDI9t7W1W9f4zxH8Xvr5qsnzRofqWq3q7/33Z0bSPTNE1fOfr8\nalX9X3VI+V8cY7ylquro86tProaLaamOGyv/aZpePDKUVVX9ozoeXm1MnccYl+sQfP7JNE2/enR5\no2Xd1fm1IGvSNE0vV9VvVdV31xOS9ZMGzf+nqt41xnh+jHGlqj5UVb/2hOvUpjHG7hjjBt+r6r+s\nqk/VYX1/4Oi2H6iqf/FkanhqWqrjr1XVh8YY22OM56vqXVX10SdQvxMJYzhK31eHsq7akDqPw2Nx\nfqGqPjNN08/op42V9VKdXwOyfnaM8fTR952q+i+q6k/rScn61Z4Ja2bGvqcOZ/G+WFV/70nX55R6\nfmsdzsh9oqo+TV2r6g1V9S+r6vNV9ZtV9cwTruc/q8Mh1sM6jOX8jdPqWFV/70j2n62qv75Bdf4/\nq+qPq+qTR0bwlg2r8wfqcDj4yar6+NHf92yyrE+p86bL+j+uqn97VL9PVdX/cHT9icj6YkfQRbpI\nF+kiPUZ60sPzi3SRLtJFek2lC9C8SBfpIl2kx0gXoHmRLtJFukiPkS5A8yJdpIt0kR4jXYDmRbpI\nF+kiPUa6AM2LdJEu0kV6jHQBmhfpIl2ki/QY6QI0L9JFukgX6THS/wesROMzoJGEvQAAAABJRU5E\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(np.reshape(M[:,140] - low_rank[:,140], dims), cmap='gray');" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Let's zoom in on the people:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(np.reshape(M[:,140] - low_rank[:,140], dims)[50:150,100:270], cmap='gray');" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "This is amazing for such a simple approach! We get somewhat better results through a more complicated algorithm below." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "hidden": true, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(np.reshape(S[:,140], dims)[50:150,100:270], cmap='gray')" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "## Principal Component Analysis (PCA)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "When dealing with high-dimensional data sets, we often leverage on the fact that the data has **low intrinsic dimensionality** in order to alleviate the curse of dimensionality and scale (perhaps it lies in a low-dimensional subspace or lies on a low-dimensional manifold). [Principal component analysis](http://setosa.io/ev/principal-component-analysis/) is handy for eliminating dimensions. Classical PCA seeks the best rank-$k$ estimate $L$ of $M$ (minimizing $\\| M - L \\|$ where $L$ has rank-$k$). Truncated SVD makes this calculation!\n", "\n", "Traditional PCA can handle small noise, but is brittle with respect to grossly corrupted observations-- even one grossly corrupt observation can significantly mess up answer.\n", "\n", "**Robust PCA** factors a matrix into the sum of two matrices, $M = L + S$, where $M$ is the original matrix, $L$ is **low-rank**, and $S$ is **sparse**. This is what we'll be using for the background removal problem! **Low-rank** means that the matrix has a lot of redundant information-- in this case, it's the background, which is the same in every scene (talk about redundant info!). **Sparse** means that the matrix has mostly zero entries-- in this case, see how the picture of the foreground (the people) is mostly empty. (In the case of corrupted data, $S$ is capturing the corrupted entries)." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "### Applications of Robust PCA\n", "- **Video Surveillance**\n", "\n", "- **Face Recognition** photos from this excellent [tutorial](https://jeankossaifi.github.io/tensorly/rpca.html). The dataset here consists of images of the faces of several people taken from the same angle but with different illumniations.\n", "\n", " \"Robust\n", " ([Source: Jean Kossaifi](https://jeankossaifi.github.io/tensorly/rpca.html))\n", "\n", " \"Robust\n", " ([Source: Jean Kossaifi](https://jeankossaifi.github.io/tensorly/rpca.html))\n", "\n", "- Latent Semantic Indexing: $L$ captures common words used in all documents while $S$ captures the few key words that best distinguish each document from others\n", "\n", "- Ranking and Collaborative Filtering: a small portion of the available rankings could be noisy and even tampered with (see [Netflix RAD - Outlier Detection on Big Data](http://techblog.netflix.com/2015/02/rad-outlier-detection-on-big-data.html) on the official netflix blog)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "### L1 norm induces sparsity" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The unit ball $\\lVert x \\rVert_1 = 1$ is a diamond in the L1 norm. It's extrema are the corners:" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ " \"L1\n", " ([Source](https://www.quora.com/Why-is-L1-regularization-supposed-to-lead-to-sparsity-than-L2))\n", " \n", " A similar perspective is to look at the *contours* of the loss function:\n", " \"L2\n", " ([Source](https://www.quora.com/Why-is-L1-regularization-better-than-L2-regularization-provided-that-all-Norms-are-equivalent))" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "### Optimization Problem" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Robust PCA can be written:\n", "\n", "$$ minimize\\; \\lVert L \\rVert_* + \\lambda\\lVert S \\rVert_1 \\\\ subject\\;to\\; L + S = M$$\n", " \n", "where:\n", "\n", "- $\\lVert \\cdot \\rVert_1$ is the **L1 norm**. Minimizing the [L1 norm](https://medium.com/@shiyan/l1-norm-regularization-and-sparsity-explained-for-dummies-5b0e4be3938a) results in sparse values. For a matrix, the L1 norm is equal to the [maximum absolute column norm](https://math.stackexchange.com/questions/519279/why-is-the-matrix-norm-a-1-maximum-absolute-column-sum-of-the-matrix).\n", "\n", "- $ \\lVert \\cdot \\rVert_* $ is the **nuclear norm**, which is the L1 norm of the singular values. Trying to minimize this results in sparse singular values --> low rank.\n" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "### Implementing an algorithm from a paper" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Source\n", "We will use the general **primary component pursuit algorithm** from this [Robust PCA paper](https://arxiv.org/pdf/0912.3599.pdf) (Candes, Li, Ma, Wright), in the specific form of **Matrix Completion via the Inexact ALM Method** found in [section 3.1 of this paper](https://arxiv.org/pdf/1009.5055.pdf) (Lin, Chen, Ma). I also referenced the implemenations found [here](https://github.com/shriphani/robust_pcp/blob/master/robust_pcp.py) and [here](https://github.com/dfm/pcp/blob/master/pcp.py)." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### The Good Parts\n", "\n", "Section 1 of Candes, Li, Ma, Wright is nicely written, and section 5 Algorithms is our key interest. **You don't need to know the math or understand the proofs to implement an algorithm from a paper.** You will need to try different things and comb through resources for useful tidbits. This field has more theoretical researchers and less pragmatic advice. It took months to find what I needed and get this working.\n", "\n", "The algorithm shows up on page 29:\n", "\n", " \"PCP" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "needed definitions of $\\mathcal{S}$, the Shrinkage operator, and $\\mathcal{D}$, the singular value thresholding operator:\n", "\n", " \"PCP" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Section 3.1 of [Chen, Lin, Ma]() contains a faster vartiation of this:\n", "\n", " \"Inexact\n", "\n", "And Section 4 has some very helpful implementation details on how many singular values to calculate (as well as how to choose the parameter values):\n", "\n", " \"SVP " ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "### If you want to learn more of the theory:\n", "\n", "- Convex Optimization by Stephen Boyd (Stanford Prof): \n", " - [OpenEdX Videos](https://www.youtube.com/playlist?list=PLbBM_dvjud8oFj09MqqYnGSrT6zek42Q0)\n", " - [Jupyter Notebooks](http://web.stanford.edu/~boyd/papers/cvx_short_course.html)\n", "- Alternating Direction Method of Multipliers (more [Stephen Boyd](http://stanford.edu/~boyd/admm.html))" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "## Robust PCA (via Primary Component Pursuit)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "### Methods" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "We will use [Facebook's Fast Randomized PCA](https://github.com/facebook/fbpca) library." ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "from scipy import sparse\n", "from sklearn.utils.extmath import randomized_svd\n", "import fbpca" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "TOL=1e-9\n", "MAX_ITERS=3" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def converged(Z, d_norm):\n", " err = np.linalg.norm(Z, 'fro') / d_norm\n", " print('error: ', err)\n", " return err < TOL" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def shrink(M, tau):\n", " S = np.abs(M) - tau\n", " return np.sign(M) * np.where(S>0, S, 0)" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def _svd(M, rank): return fbpca.pca(M, k=min(rank, np.min(M.shape)), raw=True)" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def norm_op(M): return _svd(M, 1)[1][0]" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def svd_reconstruct(M, rank, min_sv):\n", " u, s, v = _svd(M, rank)\n", " s -= min_sv\n", " nnz = (s > 0).sum()\n", " return u[:,:nnz] @ np.diag(s[:nnz]) @ v[:nnz], nnz" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def pcp(X, maxiter=10, k=10): # refactored\n", " m, n = X.shape\n", " trans = m 1/mu is returned as svp\n", " L, svp = svd_reconstruct(X2 - S, sv, 1/mu)\n", " \n", " # If svp < sv, you are already calculating enough singular values.\n", " # If not, add 20% (in this case 240) to sv\n", " sv = svp + (1 if svp < sv else round(0.05*n))\n", " \n", " # residual\n", " Z = X - L - S\n", " Y += mu*Z; mu *= rho\n", " \n", " examples.extend([S[140,:], L[140,:]])\n", " \n", " if m > mu_bar: m = mu_bar\n", " if converged(Z, d_norm): break\n", " \n", " if trans: L=L.T; S=S.T\n", " return L, S, examples" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "the algorithm again (page 29 of [Candes, Li, Ma, and Wright](https://arxiv.org/pdf/0912.3599.pdf))\n", "\n", " \"PCP" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "### Results" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "240" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m, n = M.shape\n", "round(m * .05)" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "rank sv: 1\n", "error: 0.131637937114\n", "rank sv: 241\n", "error: 0.0458515689278\n", "rank sv: 49\n", "error: 0.00591314217762\n", "rank sv: 289\n", "error: 0.000567221885441\n", "rank sv: 529\n", "error: 2.4633786172e-05\n" ] } ], "source": [ "L, S, examples = pcp(M, maxiter=5, k=10)" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "hidden": true, "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n+evxG3RJkiRpRnxAlyRJkmbEiIskSUvWE8PojbikEnh8BZ9KDU6VB2Tpwpdffnn0c66fyhOmiEL7\nb243RRlSt8rUNbWUvggIl+E80lynOqWm+EmKcKRyllP774n6pIhTitRM4TlJcac01/ZcpfhLTxfU\npN1HzzGmUp69JTM5X/5+3EjZ1FL8Bl2SJEmaFR/QJUmSpBkx4iJJ0pKlCEd6Hd++/ucreVZCYWfO\nnk6J/Lzdd0+FFkYUOA/GNqYiLqkjZppXqvrBddu4Szr2FMlhnCPFINpIRZp7us492uV7Op8SK5uk\nOM9U/GTRijC8/um6tv9OFVNSd1TOY6pyS8JjStVoUuyqxXuc871w4cLC8yrFb9AlSZKkWfEBXZIk\nSZqRdYu+YpEkSZL0+vEbdEmSJGlGfECXJEmSZsQHdEmSJGlGfECXJEmSZsQHdEmSJGlGfECXJEmS\nZsQHdEmSJGlGfECXJEmSZsQHdEmSJGlGfECXJEmSZsQHdEmSJGlGfECXJEmSZsQHdEmSJGlGfECX\nJEmSZsQHdEmSJGlGfECXJEmSZsQHdEmSJGlGfECXJEmSZsQHdEmSJGlGfECXJEmSZsQHdEmSJGlG\nfECXJEmSZsQHdEmSJGlGfECXJEmSZsQHdEmSJGlGfECXJEmSZsQHdEmSJGlGfECXJEmSZsQHdEmS\nJGlGfECXJEmSZsQHdEmSJGlGfECXJEmSZsQHdEmSJGlGfECXJEmSZsQHdEmSJGlGfECXJEmSZsQH\ndEmSJGlG3vEG7+/VN3h/kt5465Y9AenN5qGHHqr/f1y37te/Qu94xztGx29/+9sH63Mdjt/2tvHv\n4c6fP1/Hp06dquMnn3yyjk+cODFY5xe/+EUdb9y4cXS7/Pxd73pXHd988811fNNNN42uW0opt9xy\nSx3/6le/quPTp0+Pfs79bdmypY7vuuuuOv7IRz4y2MehQ4fq+OLFi3XM4+N5u3LlSh3v3r179Dh4\nbVqvvvrrRx9ul9epvZ5reKztMtwul0vr//KXvxxdl/Not/Pzn/+8jt/5zneOrpPm8corr9TxpUuX\nRudRyvD8XrhwoY5ffvnlOt67d28Zw3lwO+19z3OXzgPHvBd4HNeuXRudX/tvzuuZZ57huPv/j36D\nLkmSJM3IG/0NuiRJugH8drL9hpDf2CX8FpHfFvIbxV27dtUxvy0uZfgNKn929uzZ0f2trKzU8Usv\n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\nleaVIi6MTUx1XU3L9ZzPKan6SYqTpLjLVBWXNPd0bThmJ1Cej3YfvD491yZFZ3or91Dabqqek7qj\nllLKTTfdNLrdCxcudM2l5TfokiRJ0oz4gC5JkiTNyLqev/yWJEmS9MbwG3RJkiRpRnxAlyRJkmbE\nB3RJkiRpRnxAlyRJkmbEB3RJkiRpRnxAlyRJkmbEB3RJkiRpRnxAlyRJkmbEB3RJkiRpRnxAlyRJ\nkmbEB3RJkiRpRnxAlyRJkmbEB3RJkiRpRnxAlyRJkmbEB3RJkiRpRnxAlyRJkmbEB3RJkiRpRnxA\nlyRJkmbEB3RJkiRpRnxAlyRJkmbEB3RJkiRpRnxAlyRJkmbEB3RJkiRpRnxAlyRJkmbEB3RJkiRp\nRnxAlyRJkmbEB3RJkiRpRnxAlyRJkmbEB3RJkiRpRnxAlyRJkmbEB3RJkiRpRnxAlyRJkmbEB3RJ\nkiRpRnxAlyRJkmbEB3RJkiRpRnxAlyRJkmbkHW/kzp599tlX38j9SXrjHTx4cN2y5yC92Tz00EP1\n/49ve9uvvzt7+9vfXsfveMc7Rj8vpZR169aNjrncq6/++n/B58+fr+NTp07V8U9+8pM6PnHixGAf\nP/vZz+p448aNo8fBz9/1rnfV8c0331zHN9100+i6pZRyyy231PGvfvWrOl5dXa3jX/7yl3W8adOm\nOt6yZUsdHzhwoI4/8pGPDPZx6NChOr5w4cLodnkNrly5Use7du0aPQ5em1KG14DnPV0nrs/jJs5p\najniMXGctNv8+c9/XsfvfOc765hzT/vj/cLz3O7j6tWrdcz78uWXX67jvXv3Xnffly9fruP2XKXz\nyzGv0y9+8Ys6fuWVV+r42rVro/Nr/805Pv3003X87LPPdv//0W/QJUmSpBnxAV2SJEmakTc04iJJ\nkqbxVTvxdXz7Cj+99ie+5uc+ON6xY0cd79y5c7A+Iw579uyp4zNnzozub2VlpY5feumlOl6/fv3o\nvtt/nz17to7T8fFzRk74OaMvpZTyzDPP1HEbFVrDqAbjDjwHUxGXHj0RF17n9hxwXhwTjy/Fa7i/\n9nzweJN0L7X36Jo2atMT1SHGbohzbZdh/ISRJUZWOC/GblJMqD0OnjveGz3RojF+gy5JkiTNiA/o\nkiRJ0owYcZEkackYUUjRgFSRpf0Z1+d2WfGEcQBGDFh5Y/fu3YN93HbbbXXM+Ar3x8jAVORgbH6l\n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\nKyt7jw194x0AfrvIzIGznD/LfJyR2zhpX8upQxPr7d69e9Vydc52dUT0HJXRvPbaazVWuYuWq04f\nKmtpuZ9kHOic847GMRmVtl2fdypfcQ4penwrMZZKNZyziVsL6PW11gvaRtdXTgKk6Bol3rvu2a5y\nIO0HJ51Rd5+YgMgl/JpVysov6AAAAAAAE4IFOgAAAADAhPitkriM3d5bC8bKB9w1jZFaxLJcoor/\n+Z//qfETTzxRY3V6+fznP99bTild2YZ7q95tZbp+i9IQJydSVNbiJC4LCws11q3LUrrbT3odrr1O\nyqKuOBqX8ptbk31lOTebbJIj55IzNkEUAKw9mjgmOoL0EaUILjGOztNOouKS/cX52M1Xbp539bXm\nscx85eSSbp6O9elxbs5387zKILRvo8RF/+3GwDnF6DEqo4jPLn3O6PkqAXFrCTdOUT6ichm9JicB\ncUmrtD+jXFbPcf2mz2nnyKLEezcjt1L5iia3UimRXlMrAZFbVwyBX9ABAAAAACYEC3QAAAAAgAnx\nWytxeTsyz+tzb4rrNo++Lf/qq6/W+Mknn6zxY4891ntuKX67U7eW3NvW2ibdMsw4nMQ6nExI3Wg0\nbr3dH7fF+nDbgS+88EKNv/GNb3TO+du//dve+jNSJpeIozUeAPDbxXe+850auwQ46iCiCWziv2NC\nmxWcXE7nDif/KMVLDjPyTK3bOZbEtigZWWvWZcbJc5ysRduon2eTSLlnsJM16hiohOPixYudcvV+\nUGmIK9e1Ua8pJirS+8/dP04i5e6riLr1qKTGSUhdAi2VlbTkWfr90HZp0sLz58/XWNcPKp1V159S\nvPyFREUAAAAAAG8DWKADAAAAAEyI3yqJi/J2l7uMRftHt4bUKUC3pVTicuLEiRrr28u69RTPd9IL\nty3ptg/jlqrbGnR1K7rlp/WNTSilkhyN9Zj/+I//6Jz/p3/6pzW+++67a6xv6GeThTjc1uJQSQ0A\nrD8XLlyosbp1OGlI3ObXeVT/pvO2xipxdPKYKJXR+U7lfU62oXPS4uJib7n79+/v1OFkhk5+4iQn\nLQcw/bf2lfaJnh8dWlZwiWniv901uWelc9LR9pXi3X5U6pF5NreS7DlZixtnrds5m6lMpJTuM1n7\nWu83vVa99/Re0vs71rFjx44aO6cZrfuVV16psT6nDx061FtOKd17XNseExpl4Rd0AAAAAIAJwQId\n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\nAACABfF/L9T72NqAJVEAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plots(examples, dims, rows=5)" ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "f = plt_images(M, S, L, [140], dims)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "np.save(\"high_res_L.npy\", L)\n", "np.save(\"high_res_S.npy\", S)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1AAAAJCCAYAAADOciYVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsfWmsXVd59rPPPI93Hnw9x44TO5MDKORLS5ygthFTUqpW\nStSqDaSDRCvSSULQqlL/tagtTUVpEIUSDJSQOCYQ7DRAgMRJ7BDsxHY8+w6+85nnYX8/rp73vmd5\nX/sah6/+pPNKV3faZ++11/Cu53mnZdm2ja50pStd6UpXutKVrnSlK13pyuXF9b/dgK50pStd6UpX\nutKVrnSlK135/0W6BKorXelKV7rSla50pStd6UpXVildAtWVrnSlK13pSle60pWudKUrq5QugepK\nV7rSla50pStd6UpXutKVVUqXQHWlK13pSle60pWudKUrXenKKqVLoLrSla50pStd6UpXutKVrnRl\nldIlUF3pSle60pWudKUrXelKV7qySukSqK50pStd6UpXutKVrnSlK11ZpXQJVFe60pWudKUrXelK\nV7rSla6sUjz/2w0AgM9+9rO2y+WCZVlwuZY4nfnd7XZ3fDfFsiz54r0AwLZtlEolVKtVTExMIBKJ\nAADq9TpOnDiBY8eOodlsIpFIoFgsot1uw7IstFot2LaNVqsFl8uFdrsNt9sNr9cL27ZRrVbh8Xhg\nWRZCoZD8PxqNYmRkBDt37kQkEkEwGMTU1BQmJyfhdrtRr9dx/vx5/O7v/i6+/vWvo9FoAAAqlQp6\ne3tRLpdRrVYxOzuLYDCInTt3YuPGjfB6vXj77bcRjUYRiURgWRb6+vowOzuLbDaLqakpVCoV5HI5\nlEol/PEf/zEmJycRCATw6quvIhAIYNu2bSiXy9IHfr8f7XYbtVoNHo8HjUYDXq8XrVYLPp8PzWYT\n9XodPp8PHo8H9XodXq8Xfr+/o9/L5TLC4TAajQZ8Ph8qlQoAIBAISD81m024XC40m01YlgWfzydt\naTQaaLfbaDabsG0bLpcLLpcL9XodAODxeNBqteD1elEul+HxLE1bfq7VasHtdsPtdsO2bRkXzgPb\ntmHbNprNJrxeLyqVCprNJkqlEhqNBoLBIFqtFjweD0qlkox9vV6H2+3GmTNnEA6HkUwm4fV64XK5\n5JmtVgvFYhHJZFLmarvdxr59+7B161YMDw/LtZVKBcFgUO7L/q5WqwgEAmg2m9JPtVpN+rDVaqHR\n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\nAgICxkNY2RkQEBAQEBAQEBAQEDAmgoAKCAgICAgICAgICAgYE0FABQQEBAQEBAQEBAQEjIkgoAIC\nAgICAgICAgICAsZEEFABAQEBAQEBAQEBAQFjIgiogICAgICAgICAgICAMREEVEBAQEBAQEBAQEBA\nwJgIAiogICAgICAgICAgIGBMBAEVEBAQEBAQEBAQEBAwJoKACggICAgICAgICAgIGBNBQAUEBAQE\nBAQEBAQEBIyJIKACAgICAgICAgICAgLGRBBQAQEBAQEBAQEBAQEBYyIIqICAgICAgICAgICAgDER\nBFRAQEBAQEBAQEBAQMCYCAIqICAgICAgICAgICBgTAQBFRAQEBAQEBAQEBAQMCaCgAoICAgICAgI\nCAgICBgTQUAFBAQEBAQEBAQEBASMiSCgAgICAgICAgICAgICxkQQUAEBAQEBAQEBAQEBAWMiCKiA\ngICAgICAgICAgIAxEQRUQEBAQEBAQEBAQEDAmAgCKiAgICAgICAgICAgYEwEARUQEBAQEBAQEBAQ\nEDAmgoAKCAgICAgICAgICAgYE0FABQQEBAQEBAQEBAQEjIkgoAICAgICAgICAgICAsZEEFABAQEB\nAQEBAQEBAQFjIgiogICAgICAgICAgICAMREEVEBAQEBAQEBAQEBAwJhI/2cXQJJ+93d/N0okEkok\nEkomdzSd/zuVSg2974Pv85lEIuHeq9frajQaOn/+vIrFopLJpFqtlr75zW/q9OnT6na7KhQKarVa\nkqR+v69er6dEIqFOpzN030wmo16vp36/r0QioXQ6rXw+r263q263q7m5OS0uLurNb36zKpWKJiYm\ndPHiRb300ktKpVLq9/t68cUX9eM//uP627/9W7XbbXU6HffdWq2m7e1tra6uKpvN6u6779ZrX/ta\n5XI5/cd//Iemp6dVKBSUTqe1uLioS5cuaXV1VRcvXlStVlO9XtfGxoZ+/ud/XufOnVMul9O///u/\nK5vN6uTJk6rVaiqVSpKkXC6nfr+v7e1tpdNpdTod93zZbFbdblftdlvZbFbpdFrtdluZTEYTExND\n9b69va1SqaR2u610Oq1Go+HqtNlsumsmEglXb9lsVo1GQ6VSSZ1OR/1+X51OR1EUubru9XquD0RR\n5NojnU4rkUio3W67tpCkdDqtZDKpVCo1VL4oihRFkbrdrjKZjPsedV0oFNTr9ZROp1Wv19Xr9RRF\n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\nJnDLLbcIdpqZmZGcJqfTKfuEmu9ak06ONZJkrf90SoSV08PqPVwJ7HRVECjGR2YyGWGB0WhUKmIk\nk0kpx9jV1YVkMileJQ42dioZt8PhQE9PD1KpFMrlMsLhsAwY/WJ0Doq2JJgV8jgxzGp42o3L48xC\nFFr0IszzeF1dUMBms4lLsVqtIp/Py7X1JGgn2qsFQAikfk5tNdU5AHqAsd1dXcub7LEPSexIflwu\nlxT64D0jkQjy+Tzq9TqOHz+OW265BQcOHBBi1d3dLdYHbTFJp9Po6upCIBBo2vQvn8+jWCyK52hm\nZgYej0fyAbj5bDKZRC6XQzqdFotboVBo2l/B4/Hg9ttvx+LiIm677TYcPnwY0WhUClv4/X6MjY1J\n9aKf//znUt1IV+Gz2+1iSalUKuKJMpUpn0Nbs/Qi0c6CbI4jrbhpvQKWdiufmprq6DrrsrK0W1RN\nsLkW8kMrKucnxcor9V6D2HYEoN13K7VvJY/WWmStHqjV9msrENfKY2WCRAK5VsTE6rr8mzo4Ho/j\n+uuvF8BCwEPQZEW8W727VmNMf6a/08Ss3dheJ1m/fHniiSdWxE4ExDabDel0WrBTd3e37I9khZ3S\n6TQqlQqCwSBstqU9d0yDIHB1YCd6yEzsREMpsdBK2EmH064WO7GNug/4md1u7wg7JRIJIYO1Wg3R\naBS5XK4ldtKGao2dWN5b7w3HYlbETi6XSwpyBYNB8fwQN+fzecFOdGBQHzUaDQSDQYyNjcn+lvl8\nHqOjo1I4y+12Y9u2bYhEIqjVanj66aelXXrLF74vnQ+mQ5rZX8zv1NhJV9q7UthpcnKyo+sAVwmB\nOnnyJCKRCKLRKCKRiLBuxnH6fD4Jo3I6nRgbGxMXJ3+Y7MgX4/f74XA4EI/HpXgEXxQ7nErA6/UK\n4GXoIF2bFO0a1Ml6OgZYH98uaVHHD2vLJS2MZNYcmNlsViaYnpxW7k3T22GKHnz6MysrSrvcKpvN\nJi7iRqMhNfkrlQqi0ai4dxmHW6/XMTs7iw9/+MM4e/YsRkZGZLJyAHN/AioZKnKSnVwuh/n5eXG5\n7t69G6lUCgsLC3Ivu92OeDwu4XQ8n/0NLOdt9Pf3o6+vD4uLi+ju7padrUnMmOfk9/vx7LPPSk6e\nLnfO67MwBRWvDm1gf2mwZgKvTqwmVqIVuLbIMNdrXd5bMefYWshUKyAOoGkhuVKyFqBr5UHS1j4r\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "f = plt_images(M, S, L, [0, 100, 1000], dims)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Extracting a bit of the foreground is easier than identifying the background. To accurately get the background, you need to remove all the foreground, not just parts of it" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "## LU Factorization" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Both `fbpca` and our own `randomized_range_finder` methods used LU factorization, which factors a matrix into the product of a lower triangular matrix and an upper triangular matrix." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Gaussian Elimination" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "This section is based on lectures 20-22 in Trefethen." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "If you are unfamiliar with Gaussian elimination or need a refresher, watch [this Khan Academy video](https://www.khanacademy.org/math/precalculus/precalc-matrices/row-echelon-and-gaussian-elimination/v/matrices-reduced-row-echelon-form-2)." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Let's use Gaussian Elimination by hand to review:\n", "\n", "A =\n", " \\begin{pmatrix}\n", " 1 & -2 & -2 & -3 \\\\\n", " 3 & -9 & 0 & -9 \\\\\n", " -1 & 2 & 4 & 7 \\\\\n", " -3 & -6 & 26 & 2\n", " \\end{pmatrix}" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Answer:" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "$$ LU = \\begin{bmatrix} 1 & 0 & 0 & 0\\\\ 3 & 1 & 0 & 0 \\\\ -1 & 0 & 1 & 0 \\\\ -3 & 4 & -2 & 1\\end{bmatrix} \\cdot \\begin{bmatrix} 1 & -2 & -2 & -3 \\\\ 0 & -3 & 6 & 0 \\\\ 0 & 0 & 2 & 4 \\\\ 0 & 0 & 0 & 1 \\end{bmatrix}$$" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Above example is from Lectures 20, 21 of Trefethen." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Gaussian Elimination** transform a linear system into an upper triangular one by applying linear transformations on the left. It is *triangular triangularization*.\n", "\n", "$ L_{m-1} \\dots L_2 L_1 A = U $\n", "\n", "L is *unit lower-triangular*: all diagonal entries are 1" ] }, { "cell_type": "code", "execution_count": 206, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def LU(A):\n", " U = np.copy(A)\n", " m, n = A.shape\n", " L = np.eye(n)\n", " for k in range(n-1):\n", " for j in range(k+1,n):\n", " L[j,k] = U[j,k]/U[k,k]\n", " U[j,k:n] -= L[j,k] * U[k,k:n]\n", " return L, U" ] }, { "cell_type": "code", "execution_count": 207, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "A = np.array([[2,1,1,0],[4,3,3,1],[8,7,9,5],[6,7,9,8]]).astype(np.float)" ] }, { "cell_type": "code", "execution_count": 208, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "L, U = LU(A)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(A, L @ U)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The LU factorization is useful!\n", "\n", "Solving Ax = b becomes LUx = b:\n", "1. find A = LU\n", "2. solve Ly = b\n", "3. solve Ux = y" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Work**\n", "\n", "Work for Gaussian Elimination: $2\\cdot\\frac{1}{3} n^3$" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Memory**\n", "\n", "Above, we created two new matrices, $L$ and $U$. However, we can store the values of $L$ and $U$ in our matrix A (overwriting the original matrix). Since the diagonal of $L$ is all $1$s, it doesn't need to be stored. Doing factorizations or computations **in-place** is a common technique in numerical linear algebra to save memory. Note: you wouldn't want to do this if you needed to use your original matrix $A$ again in the future. One of the homework questions is to rewrite the LU method to operate in place." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Consider the matrix $$ A = \\begin{bmatrix} 10^{-20} & 1 \\\\ 1 & 1 \\end{bmatrix} $$" ] }, { "cell_type": "code", "execution_count": 128, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "A = np.array([[1e-20, 1], [1,1]])" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "By hand, use Gaussian Elimination to calculate what L and U are:" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Answer" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "#Exercise:\n" ] }, { "cell_type": "code", "execution_count": 123, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "np.set_printoptions(suppress=True)" ] }, { "cell_type": "code", "execution_count": 127, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "#Exercise:\n" ] }, { "cell_type": "code", "execution_count": 129, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1.00000000e-20 1.00000000e+00]\n", " [ 0.00000000e+00 -1.00000000e+20]]\n" ] } ], "source": [ "L2, U2 = LU(A)" ] }, { "cell_type": "code", "execution_count": 130, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(array([[ 1.00000000e+00, 0.00000000e+00],\n", " [ 1.00000000e+20, 1.00000000e+00]]),\n", " array([[ 1.00000000e-20, 1.00000000e+00],\n", " [ 0.00000000e+00, -1.00000000e+20]]))" ] }, "execution_count": 130, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L2, U2" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(L1, L2)" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(U1, U2)" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "hidden": true, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(A, L2 @ U2)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "This is the motivation for $LU$ factorization **with pivoting**.\n", "\n", "This also illustrates that LU factorization is *stable*, but not *backward stable*. (spoiler alert: even with partial pivoting, LU is \"explosively unstable\" for certain matrices, yet stable in practice)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Stability" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "An algorithm $\\hat{f}$ for a problem $f$ is **stable** if for each $x$,\n", "$$ \\frac{\\lVert \\hat{f}(x) - f(y) \\rVert}{ \\lVert f(y) \\rVert } = \\mathcal{O}(\\varepsilon_{machine}) $$\n", "\n", "for some $y$ with\n", "$$ \\frac{\\lVert y - x \\rVert }{\\lVert x \\rVert} = \\mathcal{O}(\\varepsilon_{machine}) $$" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**A stable algorithm gives nearly the right answer to nearly the right question** (Trefethen, pg 104)\n", "\n", "To translate that:\n", "- right question: $x$\n", "- nearly the right question: $y$\n", "- right answer: $f$\n", "- right answer to nearly the right question: $f(y)$" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Backwards Stability" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Backwards stability is both **stronger** and **simpler** than stability. \n", "\n", "An algorithm $\\hat{f}$ for a problem $f$ is **backwards stable** if for each $x$,\n", "$$ \\hat{f}(x) = f(y) $$\n", "\n", "for some $y$ with\n", "$$ \\frac{\\lVert y - x \\rVert }{\\lVert x \\rVert} = \\mathcal{O}(\\varepsilon_{machine}) $$\n", "\n", "**A backwards stable algorithm gives exactly the right answer to nearly the right question** (Trefethen, pg 104)\n", "\n", "Translation:\n", "\n", "- right question: $x$\n", "- nearly the right question: $y$\n", "- right answer: $f$\n", "- right answer to nearly the right question: $f(y)$" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "### LU factorization with Partial Pivoting" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Let's now look at the matrix $$ \\hat{A} = \\begin{bmatrix} 1 & 1 \\\\ 10^{-20} & 1 \\end{bmatrix} $$" ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "A = np.array([[1,1], [1e-20, 1]])" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "By hand, use Gaussian Elimination to calculate what L and U are:" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Answer" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "#Exercise:\n" ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "L, U = LU(A)" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(A, L @ U)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Idea: We can switch the order of the rows around to get more stable answers! This is equivalent to multiplying by a permutation matrix $P$. For instance,\n", "\n", "$$\\begin{bmatrix} 0 & 1 \\\\ 1 & 0 \\end{bmatrix} \\cdot \\begin{bmatrix} 10^{-20} & 1 \\\\ 1 & 1 \\end{bmatrix} = \\begin{bmatrix} 1 & 1 \\\\ 10^{-20} & 1 \\end{bmatrix} $$\n", "\n", "$$ PA = \\hat{A} $$\n", "\n", "Apply Gaussian elimination to $PA$." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "At each step, choose the largest value in column k, and move that row to be row k." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### Homework" ] }, { "cell_type": "code", "execution_count": 100, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def swap(a,b):\n", " temp = np.copy(a)\n", " a[:] = b\n", " b[:] = temp\n", "\n", "a=np.array([1,2,3])\n", "b=np.array([3,2,1])\n", "swap(a,b)\n", "a,b" ] }, { "cell_type": "code", "execution_count": 102, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "#Exercise: re-write the LU factorization above to use pivoting\n" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### Example" ] }, { "cell_type": "code", "execution_count": 104, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "A = np.array([[2,1,1,0],[4,3,3,1],[8,7,9,5],[6,7,9,8]]).astype(np.float)" ] }, { "cell_type": "code", "execution_count": 105, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "L, U, P = LU_pivot(A)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Can compare below to answers in Trefethen, page 159:" ] }, { "cell_type": "code", "execution_count": 106, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 2., 1., 1., 0.],\n", " [ 4., 3., 3., 1.],\n", " [ 8., 7., 9., 5.],\n", " [ 6., 7., 9., 8.]])" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A" ] }, { "cell_type": "code", "execution_count": 107, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 8. , 7. , 9. , 5. ],\n", " [ 0. , 1.75 , 2.25 , 4.25 ],\n", " [ 0. , 0. , -0.28571429, 0.57142857],\n", " [ 0. , 0. , 0. , -2. ]])" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "U" ] }, { "cell_type": "code", "execution_count": 114, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 0., 1., 0.],\n", " [ 0., 0., 0., 1.],\n", " [ 1., 0., 0., 0.],\n", " [ 0., 1., 0., 0.]])" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Partial pivoting** permutes the rows. It is such a universal practice, that this is usually what is meant by *LU factorization*.\n", "\n", "**Complete pivoting** permutes the rows and columns. Complete pivoting is significantly time-consuming and rarely used in practice." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### Example" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Consider the system of equations:\n", "\n", "$$ \\begin{bmatrix} 1 & 0 & 0 & 0 & 0 & 1 \\\\ -1 & 1 & 0 & 0 & 0 & 1 \\\\ -1 & -1 & 1 & 0 & 0 & 1 \\\\ -1 & -1 & -1 & 1 & 0 & 1 \\\\ -1 & -1 & -1 & -1 & 1 & 1 \\\\ -1 & -1 & -1 & -1 & -1 & 1 \\end{bmatrix} \\mathbf{x} = \\begin{bmatrix} 1 \\\\ 1 \\\\ 1 \\\\ 1 \\\\ 2 \\\\ 1 \\end{bmatrix} $$" ] }, { "cell_type": "code", "execution_count": 99, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def make_matrix(n):\n", " A = np.eye(n)\n", " for i in range(n):\n", " A[i,-1] = 1\n", " for j in range(i):\n", " A[i,j] = -1\n", " return A " ] }, { "cell_type": "code", "execution_count": 117, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def make_vector(n):\n", " b = np.ones(n)\n", " b[-2] = 2\n", " return b" ] }, { "cell_type": "code", "execution_count": 101, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([ 1., 1., 1., 1., 1., 2., 1.])" ] }, "execution_count": 101, "metadata": {}, "output_type": "execute_result" } ], "source": [ "make_vector(7)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Exercise" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Exercise: Let's use Gaussian Elimination on the $5 \\times 5$ system." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Scipy has this funtionality as well. Let's look at the solution for the last 5 equations with $n=10,\\,20,\\,30,\\,40,\\,50,\\,60$." ] }, { "cell_type": "code", "execution_count": 131, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "?scipy.linalg.solve" ] }, { "cell_type": "code", "execution_count": 112, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-0.00195312 -0.00390625 -0.0078125 -0.015625 -0.03125 -0.0625 -0.125\n", " -0.25 0.5 1.00195312]\n", "[ -1.90734863e-06 -3.81469727e-06 -7.62939453e-06 -1.52587891e-05\n", " -3.05175781e-05 -6.10351562e-05 -1.22070312e-04 -2.44140625e-04\n", " -4.88281250e-04 -9.76562500e-04 -1.95312500e-03 -3.90625000e-03\n", " -7.81250000e-03 -1.56250000e-02 -3.12500000e-02 -6.25000000e-02\n", " -1.25000000e-01 -2.50000000e-01 5.00000000e-01 1.00000191e+00]\n", "[ -1.86264515e-09 -3.72529030e-09 -7.45058060e-09 -1.49011612e-08\n", " -2.98023224e-08 -5.96046448e-08 -1.19209290e-07 -2.38418579e-07\n", " -4.76837158e-07 -9.53674316e-07 -1.90734863e-06 -3.81469727e-06\n", " -7.62939453e-06 -1.52587891e-05 -3.05175781e-05 -6.10351562e-05\n", " -1.22070312e-04 -2.44140625e-04 -4.88281250e-04 -9.76562500e-04\n", " -1.95312500e-03 -3.90625000e-03 -7.81250000e-03 -1.56250000e-02\n", " -3.12500000e-02 -6.25000000e-02 -1.25000000e-01 -2.50000000e-01\n", " 5.00000000e-01 1.00000000e+00]\n", "[ -1.81898940e-12 -3.63797881e-12 -7.27595761e-12 -1.45519152e-11\n", " -2.91038305e-11 -5.82076609e-11 -1.16415322e-10 -2.32830644e-10\n", " -4.65661287e-10 -9.31322575e-10 -1.86264515e-09 -3.72529030e-09\n", " -7.45058060e-09 -1.49011612e-08 -2.98023224e-08 -5.96046448e-08\n", " -1.19209290e-07 -2.38418579e-07 -4.76837158e-07 -9.53674316e-07\n", " -1.90734863e-06 -3.81469727e-06 -7.62939453e-06 -1.52587891e-05\n", " -3.05175781e-05 -6.10351562e-05 -1.22070312e-04 -2.44140625e-04\n", " -4.88281250e-04 -9.76562500e-04 -1.95312500e-03 -3.90625000e-03\n", " -7.81250000e-03 -1.56250000e-02 -3.12500000e-02 -6.25000000e-02\n", " -1.25000000e-01 -2.50000000e-01 5.00000000e-01 1.00000000e+00]\n", "[ -1.77635684e-15 -3.55271368e-15 -7.10542736e-15 -1.42108547e-14\n", " -2.84217094e-14 -5.68434189e-14 -1.13686838e-13 -2.27373675e-13\n", " -4.54747351e-13 -9.09494702e-13 -1.81898940e-12 -3.63797881e-12\n", " -7.27595761e-12 -1.45519152e-11 -2.91038305e-11 -5.82076609e-11\n", " -1.16415322e-10 -2.32830644e-10 -4.65661287e-10 -9.31322575e-10\n", " -1.86264515e-09 -3.72529030e-09 -7.45058060e-09 -1.49011612e-08\n", " -2.98023224e-08 -5.96046448e-08 -1.19209290e-07 -2.38418579e-07\n", " -4.76837158e-07 -9.53674316e-07 -1.90734863e-06 -3.81469727e-06\n", " -7.62939453e-06 -1.52587891e-05 -3.05175781e-05 -6.10351562e-05\n", " -1.22070312e-04 -2.44140625e-04 -4.88281250e-04 -9.76562500e-04\n", " -1.95312500e-03 -3.90625000e-03 -7.81250000e-03 -1.56250000e-02\n", " -3.12500000e-02 -6.25000000e-02 -1.25000000e-01 -2.50000000e-01\n", " 5.00000000e-01 1.00000000e+00]\n", "[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 1.]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for n, ls in zip(range(10, 70, 10), ['--', ':', '-', '-.', '--', ':']):\n", " soln = scipy.linalg.lu_solve(scipy.linalg.lu_factor(make_matrix(n)), make_vector(n))\n", " plt.plot(soln[-5:], ls)\n", " print(soln)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "What is going on when $n=60$?" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Theorem**: Let the factorization $PA = LU$ of a matrix A be computed by Gaussian Elimination with partial pivoting. The *computed* (by a computer with Floating Point Arithmetic) matrices $\\hat{P}$, $\\hat{L}$, and $\\hat{U}$ satisfy\n", "\n", "$$\\hat{L}\\hat{U} = \\hat{P} A + \\delta A, \\quad \\frac{\\delta A}{A} = \\mathcal{O}(\\rho \\varepsilon_{machine}) $$\n", "\n", "where $\\rho$ is the *growth factor*, \n", "\n", "$$\\rho = \\frac{max_{i,j} \\lvert u_{ij} \\rvert }{max_{i,j} \\lvert a_{ij} \\rvert } $$" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "For our matrix above, $\\rho = 2^{m-1}$" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Unstable in theory, stable in practice" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Stability of most algorithms (such as QR) is straightforward. Not the case for Gaussian Elimination with partial pivoting. Instability in Gaussian elimination (with or without pivoting) arises only if L and/or U is large relative to the size of A.\n", "\n", "Trefethen: \"Despite examples like (22.4), Gaussian elimination with partial pivoting is utterly stable in practice... In fifty years of computing, no matrix problems that excite an explosive instability are known to have arisen under natural circumstances.\" [although can easily be constructed as contrived examples]\n", "\n", "Although some matrices cause instability, but extraordinarily small proportion of all matrices so \"never\" arise in practice for statistical reasons. \"If you pick a billion matrices at random, you will almost certainly not find one for which Gaussian elimination is unstable.\"" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "### Further Reading\n", "- Gaussian Elimination/LU factorization-- Trefethn Lecture 20\n", "- Pivoting -- Trefethn Lecture 21\n", "- Stability of Gaussian Elimination -- Trefethn Lecture 22" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Follow up from last class" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### What is going on with Randomized Projections?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We are taking a linear combination (with random weights) of the columns in the matrix below:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12, 12))\n", "plt.imshow(M, cmap='gray')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's like a random weighted average. If you take several of these, you end up with columns that are orthonormal to each other." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Johnson-Lindenstrauss Lemma**: ([from wikipedia](https://en.wikipedia.org/wiki/Johnson%E2%80%93Lindenstrauss_lemma)) a small set of points in a high-dimensional space can be embedded into a space of much lower dimension in such a way that distances between the points are nearly preserved.\n", "\n", "It is desirable to be able to reduce dimensionality of data in a way that preserves relevant structure. The Johnson–Lindenstrauss lemma is a classic result of this type." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### History of Gaussian Elimination" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "[Fascinating history of Gaussian Elimination](https://jvns.ca/blog/2017/04/16/making-small-culture-changes/). Some highlights:\n", "\n", "- First written record of Gaussian elimination from ~200 BC in the Chinese book *Nine Chapters on Arithmetic*\n", "- The ancient Chinese used colored bamboo rods placed in columns on a \"counting board\"\n", "- Japanese mathematicican Seki Kowa (16432-1708) carried forward the Chinese elimintion methods and invented the determinant before 1683. Around the same time, Leibniz made similar discoveries independently, but neither Kowa nor Leibniz go credit for their discoveries.\n", "- Gauss referred to the elimination method as being \"commonly known\" and never claimed to have invented it, although he may have invented the Cholesky decomposition\n", "\n", "[More history here](http://www.sciencedirect.com/science/article/pii/S0315086010000376)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Speeding Up Gaussian Elimination" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "[Parallelized LU Decomposition](https://courses.engr.illinois.edu/cs554/fa2013/notes/06_lu_8up.pdf) LU decomposition can be fully parallelized\n", "\n", "[Randomized LU Decomposition](http://www.sciencedirect.com/science/article/pii/S1063520316300069) (2016 article): The randomized LU is fully implemented to run on a standard GPU card without any GPU–CPU data transfer." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Scipy.linalg solve vs lu_solve" ] }, { "cell_type": "code", "execution_count": 142, "metadata": { "collapsed": true }, "outputs": [], "source": [ "n = 100\n", "A = make_matrix(n)\n", "b = make_vector(n)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This problem has a large *growth factor* $= 2^{59}$. We get the wrong answer using scipy.linalg.lu_solve, but the right answer with scipy.linalg.solve. What is scipy.linalg.solve doing?" ] }, { "cell_type": "code", "execution_count": 143, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0. 0. 0. 0. 1.]\n", "[-0.0625 -0.125 -0.25 0.5 1. ]\n" ] } ], "source": [ "print(scipy.linalg.lu_solve(scipy.linalg.lu_factor(A), b)[-5:])\n", "print(scipy.linalg.solve(A, b)[-5:])" ] }, { "cell_type": "code", "execution_count": 136, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "91.2 µs ± 192 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n" ] } ], "source": [ "%%timeit\n", "soln = scipy.linalg.lu_solve(scipy.linalg.lu_factor(A), b)\n", "soln[-5:]" ] }, { "cell_type": "code", "execution_count": 137, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "153 µs ± 5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" ] } ], "source": [ "%%timeit\n", "soln = scipy.linalg.solve(A, b)\n", "soln[-5:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Looking at the [source code for scipy](https://github.com/scipy/scipy/blob/v0.19.0/scipy/linalg/basic.py#L25-L224), we see that it is calling the LAPACK routine `gesvx`. Here is the [Fortran source code for sgesvx](http://www.netlib.org/lapack/explore-html/d0/db8/group__real_g_esolve_ga982d53a8a62d66af9bcaa50642c95ea4.html#ga982d53a8a62d66af9bcaa50642c95ea4) (`s` refers to single, there is also `dgesvx` for doubles and `cgesvx` for complex numbers). In the comments, we see that it is computing a *reciprocal pivot growth factor*, so it is taking into account this growth factor and doing something more complex than plain partial pivot LU factorization." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Block Matrices" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a follow-up to a question about block matrices asked in a previous class. But first," ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Ordinary Matrix Multiplication" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Question**: What is the computational complexity (big $\\mathcal{O}$) of matrix multiplication for multiplying two $n \\times n$ matrices $A \\times B = C$?\n", "\n", "You can learn (or refresh) about big $\\mathcal{O}$ on [Codecademy](https://www.codecademy.com/courses/big-o/0/1)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "What this looks like:\n", "\n", " for i=1 to n\n", " {read row i of A into fast memory}\n", " for j=1 to n\n", " {read col j of B into fast memory}\n", " for k=1 to n\n", " C[i,j] = C[i,j] + A[i,k] x B[k,j]\n", " {write C[i,j] back to slow memory}\n", " \n", "**Question**: How many reads and writes are made?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Block Matrix Multiplication" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Divide $A,\\, B,\\, C$ into $N\\times N$ blocks of size $\\frac{n}{N} \\times \\frac{n}{N}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " \"Block\n", " ([Source](http://avishek.net/blog/?p=804))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What this looks like:\n", "\n", " for i=1 to N\n", " for j=1 to N\n", " for k=1 to N\n", " {read block (i,k) of A}\n", " {read block (k,j) of B}\n", " block (i,j) of C += block of A times block of B\n", " {write block (i,j) of C back to slow memory}\n", " \n", "**Question 1**: What is the big-$\\mathcal{O}$ of this?\n", "\n", "**Question 2**: How many reads and writes are made?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# End" ] } ], "metadata": { "anaconda-cloud": {}, "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: nbs/4. Compressed Sensing of CT Scans with Robust Regression.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "You can read an overview of this Numerical Linear Algebra course in [this blog post](http://www.fast.ai/2017/07/17/num-lin-alg/). The course was originally taught in the [University of San Francisco MS in Analytics](https://www.usfca.edu/arts-sciences/graduate-programs/analytics) graduate program. Course lecture videos are [available on YouTube](https://www.youtube.com/playlist?list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY) (note that the notebook numbers and video numbers do not line up, since some notebooks took longer than 1 video to cover).\n", "\n", "You can ask questions about the course on [our fast.ai forums](http://forums.fast.ai/c/lin-alg)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 4. Compressed Sensing of CT Scans with Robust Regression " ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "## Broadcasting" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The term **broadcasting** describes how arrays with different shapes are treated during arithmetic operations. The term broadcasting was first used by Numpy, although is now used in other libraries such as [Tensorflow](https://www.tensorflow.org/performance/xla/broadcasting) and Matlab; the rules can vary by library.\n", "\n", "From the [Numpy Documentation](https://docs.scipy.org/doc/numpy-1.10.0/user/basics.broadcasting.html):\n", "\n", " Broadcasting provides a means of vectorizing array operations so that looping \n", " occurs in C instead of Python. It does this without making needless copies of data \n", " and usually leads to efficient algorithm implementations." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The simplest example of broadcasting occurs when multiplying an array by a scalar." ] }, { "cell_type": "code", "execution_count": 718, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([ 2., 4., 6.])" ] }, "execution_count": 718, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = np.array([1.0, 2.0, 3.0])\n", "b = 2.0\n", "a * b" ] }, { "cell_type": "code", "execution_count": 128, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 2 3] (3,)\n" ] } ], "source": [ "v=np.array([1,2,3])\n", "print(v, v.shape)" ] }, { "cell_type": "code", "execution_count": 129, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(array([[1, 2, 3],\n", " [2, 4, 6],\n", " [3, 6, 9]]), (3, 3))" ] }, "execution_count": 129, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m=np.array([v,v*2,v*3]); m, m.shape" ] }, { "cell_type": "code", "execution_count": 133, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "n = np.array([m*1, m*5])" ] }, { "cell_type": "code", "execution_count": 134, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[[ 1, 2, 3],\n", " [ 2, 4, 6],\n", " [ 3, 6, 9]],\n", "\n", " [[ 5, 10, 15],\n", " [10, 20, 30],\n", " [15, 30, 45]]])" ] }, "execution_count": 134, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n" ] }, { "cell_type": "code", "execution_count": 136, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "((2, 3, 3), (3, 3))" ] }, "execution_count": 136, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n.shape, m.shape" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "We can use broadcasting to **add** a matrix and an array:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 2, 4, 6],\n", " [ 3, 6, 9],\n", " [ 4, 8, 12]])" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m+v" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Notice what happens if we transpose the array:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(array([[1],\n", " [2],\n", " [3]]), (3, 1))" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v1=np.expand_dims(v,-1); v1, v1.shape" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 2, 3, 4],\n", " [ 4, 6, 8],\n", " [ 6, 9, 12]])" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m+v1" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### General Numpy Broadcasting Rules" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "When operating on two arrays, NumPy compares their shapes element-wise. It starts with the **trailing dimensions**, and works its way forward. Two dimensions are **compatible** when\n", "\n", "- they are equal, or\n", "- one of them is 1" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Arrays do not need to have the same number of dimensions. For example, if you have a $256 \\times 256 \\times 3$ array of RGB values, and you want to scale each color in the image by a different value, you can multiply the image by a one-dimensional array with 3 values. Lining up the sizes of the trailing axes of these arrays according to the broadcast rules, shows that they are compatible:\n", "\n", " Image (3d array): 256 x 256 x 3\n", " Scale (1d array): 3\n", " Result (3d array): 256 x 256 x 3" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Review" ] }, { "cell_type": "code", "execution_count": 165, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "v = np.array([1,2,3,4])\n", "m = np.array([v,v*2,v*3])\n", "A = np.array([5*m, -1*m])" ] }, { "cell_type": "code", "execution_count": 166, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "((4,), (3, 4), (2, 3, 4))" ] }, "execution_count": 166, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v.shape, m.shape, A.shape" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Will the following operations work?" ] }, { "cell_type": "code", "execution_count": 159, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[[ 5, 10, 15],\n", " [10, 20, 30],\n", " [15, 30, 45]],\n", "\n", " [[-1, -2, -3],\n", " [-2, -4, -6],\n", " [-3, -6, -9]]])" ] }, "execution_count": 159, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A" ] }, { "cell_type": "code", "execution_count": 158, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[[ 6, 12, 18],\n", " [11, 22, 33],\n", " [16, 32, 48]],\n", "\n", " [[ 0, 0, 0],\n", " [-1, -2, -3],\n", " [-2, -4, -6]]])" ] }, "execution_count": 158, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A + v" ] }, { "cell_type": "code", "execution_count": 167, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[[ 5, 10, 15, 20],\n", " [ 10, 20, 30, 40],\n", " [ 15, 30, 45, 60]],\n", "\n", " [[ -1, -2, -3, -4],\n", " [ -2, -4, -6, -8],\n", " [ -3, -6, -9, -12]]])" ] }, "execution_count": 167, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A" ] }, { "cell_type": "code", "execution_count": 168, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(4, 3, 2)" ] }, "execution_count": 168, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.T.shape" ] }, { "cell_type": "code", "execution_count": 169, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[[ 5, -1],\n", " [ 10, -2],\n", " [ 15, -3]],\n", "\n", " [[ 10, -2],\n", " [ 20, -4],\n", " [ 30, -6]],\n", "\n", " [[ 15, -3],\n", " [ 30, -6],\n", " [ 45, -9]],\n", "\n", " [[ 20, -4],\n", " [ 40, -8],\n", " [ 60, -12]]])" ] }, "execution_count": 169, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.T" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "### Sparse Matrices (in Scipy)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "A matrix with lots of zeros is called **sparse** (the opposite of sparse is **dense**). For sparse matrices, you can save a lot of memory by only storing the non-zero values.\n", "\n", "\"floating\n", "\n", "Another example of a large, sparse matrix:\n", "\n", "\"floating\n", "[Source](https://commons.wikimedia.org/w/index.php?curid=2245335)\n", "\n", "There are the most common sparse storage formats:\n", "- coordinate-wise (scipy calls COO)\n", "- compressed sparse row (CSR)\n", "- compressed sparse column (CSC)\n", "\n", "Let's walk through [these examples](http://www.mathcs.emory.edu/~cheung/Courses/561/Syllabus/3-C/sparse.html)\n", "\n", "There are actually [many more formats](http://www.cs.colostate.edu/~mcrob/toolbox/c++/sparseMatrix/sparse_matrix_compression.html) as well.\n", "\n", "A class of matrices (e.g, diagonal) is generally called sparse if the number of non-zero elements is proportional to the number of rows (or columns) instead of being proportional to the product rows x columns.\n", "\n", "**Scipy Implementation**\n", "\n", "From the [Scipy Sparse Matrix Documentation](https://docs.scipy.org/doc/scipy-0.18.1/reference/sparse.html)\n", "\n", "- To construct a matrix efficiently, use either dok_matrix or lil_matrix. The lil_matrix class supports basic slicing and fancy indexing with a similar syntax to NumPy arrays. As illustrated below, the COO format may also be used to efficiently construct matrices\n", "- To perform manipulations such as multiplication or inversion, first convert the matrix to either CSC or CSR format.\n", "- All conversions among the CSR, CSC, and COO formats are efficient, linear-time operations." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "## Today: CT scans" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "[\"Can Maths really save your life? Of course it can!!\"](https://plus.maths.org/content/saving-lives-mathematics-tomography) (lovely article)\n", "\n", "\"Computed\n", "\n", "(CAT and CT scan refer to the [same procedure](http://blog.cincinnatichildrens.org/radiology/whats-the-difference-between-a-cat-scan-and-a-ct-scan/). CT scan is the more modern term)\n", "\n", "This lesson is based off the Scikit-Learn example [Compressive sensing: tomography reconstruction with L1 prior (Lasso)](http://scikit-learn.org/stable/auto_examples/applications/plot_tomography_l1_reconstruction.html)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### Our goal today" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Take the readings from a CT scan and construct what the original looks like.\n", "\n", "\"Projections\"" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "For each x-ray (at a particular position and particular angle), we get a single measurement. We need to construct the original picture just from these measurements. Also, we don't want the patient to experience a ton of radiation, so we are gathering less data than the area of the picture.\n", "\n", "\"Projections\"" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "### Review" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "In the previous lesson, we used Robust PCA for background removal of a surveillance video. We saw that this could be written as the optimization problem:\n", "\n", "$$ minimize\\; \\lVert L \\rVert_* + \\lambda\\lVert S \\rVert_1 \\\\ subject\\;to\\; L + S = M$$\n", "\n", "**Question**: Do you remember what is special about the L1 norm?" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### Today" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "We will see that:\n", "\n", "\"Computed\n" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Resources:\n", "[Compressed Sensing](https://people.csail.mit.edu/indyk/princeton.pdf)\n", "\n", "\"Computed\n", "\n", "[Source](https://www.fields.utoronto.ca/programs/scientific/10-11/medimaging/presentations/Plenary_Sidky.pdf)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "### Imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np, matplotlib.pyplot as plt, math\n", "from scipy import ndimage, sparse" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "np.set_printoptions(suppress=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generate Data" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Intro" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "hidden": true }, "source": [ "We will use generated data today (not real CT scans). There is some interesting numpy and linear algebra involved in generating the data, and we will return to that later.\n", "\n", "Code is from this Scikit-Learn example [Compressive sensing: tomography reconstruction with L1 prior (Lasso)](http://scikit-learn.org/stable/auto_examples/applications/plot_tomography_l1_reconstruction.html)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Generate pictures" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def generate_synthetic_data():\n", " rs = np.random.RandomState(0)\n", " n_pts = 36\n", " x, y = np.ogrid[0:l, 0:l]\n", " mask_outer = (x - l / 2) ** 2 + (y - l / 2) ** 2 < (l / 2) ** 2\n", " mx,my = rs.randint(0, l, (2,n_pts))\n", " mask = np.zeros((l, l))\n", " mask[mx,my] = 1\n", " mask = ndimage.gaussian_filter(mask, sigma=l / n_pts)\n", " res = (mask > mask.mean()) & mask_outer\n", " return res ^ ndimage.binary_erosion(res)" ] }, { "cell_type": "code", "execution_count": 208, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "l = 128\n", "data = generate_synthetic_data()" ] }, { "cell_type": "code", "execution_count": 209, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5,5))\n", "plt.imshow(data, cmap=plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### What generate_synthetic_data() is doing" ] }, { "cell_type": "code", "execution_count": 155, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "l=8; n_pts=5\n", "rs = np.random.RandomState(0)" ] }, { "cell_type": "code", "execution_count": 156, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(array([[0],\n", " [1],\n", " [2],\n", " [3],\n", " [4],\n", " [5],\n", " [6],\n", " [7]]), array([[0, 1, 2, 3, 4, 5, 6, 7]]))" ] }, "execution_count": 156, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x, y = np.ogrid[0:l, 0:l]; x,y" ] }, { "cell_type": "code", "execution_count": 170, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 1, 2, 3, 4, 5, 6, 7],\n", " [ 1, 2, 3, 4, 5, 6, 7, 8],\n", " [ 2, 3, 4, 5, 6, 7, 8, 9],\n", " [ 3, 4, 5, 6, 7, 8, 9, 10],\n", " [ 4, 5, 6, 7, 8, 9, 10, 11],\n", " [ 5, 6, 7, 8, 9, 10, 11, 12],\n", " [ 6, 7, 8, 9, 10, 11, 12, 13],\n", " [ 7, 8, 9, 10, 11, 12, 13, 14]])" ] }, "execution_count": 170, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x + y" ] }, { "cell_type": "code", "execution_count": 157, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 16.],\n", " [ 9.],\n", " [ 4.],\n", " [ 1.],\n", " [ 0.],\n", " [ 1.],\n", " [ 4.],\n", " [ 9.]])" ] }, "execution_count": 157, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(x - l/2) ** 2 " ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 32., 25., 20., 17., 16., 17., 20., 25.],\n", " [ 25., 18., 13., 10., 9., 10., 13., 18.],\n", " [ 20., 13., 8., 5., 4., 5., 8., 13.],\n", " [ 17., 10., 5., 2., 1., 2., 5., 10.],\n", " [ 16., 9., 4., 1., 0., 1., 4., 9.],\n", " [ 17., 10., 5., 2., 1., 2., 5., 10.],\n", " [ 20., 13., 8., 5., 4., 5., 8., 13.],\n", " [ 25., 18., 13., 10., 9., 10., 13., 18.]])" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(x - l/2) ** 2 + (y - l/2) ** 2" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[False, False, False, False, False, False, False, False],\n", " [False, False, True, True, True, True, True, False],\n", " [False, True, True, True, True, True, True, True],\n", " [False, True, True, True, True, True, True, True],\n", " [False, True, True, True, True, True, True, True],\n", " [False, True, True, True, True, True, True, True],\n", " [False, True, True, True, True, True, True, True],\n", " [False, False, True, True, True, True, True, False]], dtype=bool)" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mask_outer = (x - l/2) ** 2 + (y - l/2) ** 2 < (l/2) ** 2; mask_outer" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\ngQOF/Rf3BIPnGnrH8wAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(mask_outer, cmap='gray')" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 1., 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 1., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 1., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 0., 0., 0., 0., 1.],\n", " [ 0., 0., 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 1., 0., 0., 0., 0.]])" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mask = np.zeros((l, l))\n", "mx,my = rs.randint(0, l, (2,n_pts))\n", "mask[mx,my] = 1; mask" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\ntAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(mask, cmap='gray')" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "mask = ndimage.gaussian_filter(mask, sigma=l / n_pts)" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(mask, cmap='gray')" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\nFsEhqI8yLQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "res = np.logical_and(mask > mask.mean(), mask_outer)\n", "plt.imshow(res, cmap='gray');" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "hidden": true, "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(ndimage.binary_erosion(res), cmap='gray');" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "hidden": true, "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(res ^ ndimage.binary_erosion(res), cmap='gray');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generate Projections" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Code" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def _weights(x, dx=1, orig=0):\n", " x = np.ravel(x)\n", " floor_x = np.floor((x - orig) / dx)\n", " alpha = (x - orig - floor_x * dx) / dx\n", " return np.hstack((floor_x, floor_x + 1)), np.hstack((1 - alpha, alpha))\n", "\n", "\n", "def _generate_center_coordinates(l_x):\n", " X, Y = np.mgrid[:l_x, :l_x].astype(np.float64)\n", " center = l_x / 2.\n", " X += 0.5 - center\n", " Y += 0.5 - center\n", " return X, Y" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def build_projection_operator(l_x, n_dir):\n", " X, Y = _generate_center_coordinates(l_x)\n", " angles = np.linspace(0, np.pi, n_dir, endpoint=False)\n", " data_inds, weights, camera_inds = [], [], []\n", " data_unravel_indices = np.arange(l_x ** 2)\n", " data_unravel_indices = np.hstack((data_unravel_indices,\n", " data_unravel_indices))\n", " for i, angle in enumerate(angles):\n", " Xrot = np.cos(angle) * X - np.sin(angle) * Y\n", " inds, w = _weights(Xrot, dx=1, orig=X.min())\n", " mask = (inds >= 0) & (inds < l_x)\n", " weights += list(w[mask])\n", " camera_inds += list(inds[mask] + i * l_x)\n", " data_inds += list(data_unravel_indices[mask])\n", " proj_operator = sparse.coo_matrix((weights, (camera_inds, data_inds)))\n", " return proj_operator" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Projection operator" ] }, { "cell_type": "code", "execution_count": 210, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "l = 128" ] }, { "cell_type": "code", "execution_count": 211, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "proj_operator = build_projection_operator(l, l // 7)" ] }, { "cell_type": "code", "execution_count": 212, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "<2304x16384 sparse matrix of type ''\n", "\twith 555378 stored elements in COOrdinate format>" ] }, "execution_count": 212, "metadata": {}, "output_type": "execute_result" } ], "source": [ "proj_operator" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "dimensions: angles (l//7), positions (l), image for each (l x l)" ] }, { "cell_type": "code", "execution_count": 213, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "proj_t = np.reshape(proj_operator.todense().A, (l//7,l,l,l))" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The first coordinate refers to the angle of the line, and the second coordinate refers to the location of the line." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The lines for the angle indexed with 3:" ] }, { "cell_type": "code", "execution_count": 214, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(proj_t[3,0], cmap='gray');" ] }, { "cell_type": "code", "execution_count": 215, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(proj_t[3,1], cmap='gray');" ] }, { "cell_type": "code", "execution_count": 216, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(proj_t[3,2], cmap='gray');" ] }, { "cell_type": "code", "execution_count": 217, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(proj_t[3,40], cmap='gray');" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Other lines at vertical location 40:" ] }, { "cell_type": "code", "execution_count": 218, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\nP+kAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(proj_t[4,40], cmap='gray');" ] }, { "cell_type": "code", "execution_count": 219, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(proj_t[15,40], cmap='gray');" ] }, { "cell_type": "code", "execution_count": 220, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(proj_t[17,40], cmap='gray');" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Intersection between x-rays and data" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Next, we want to see how the line intersects with our data. Remember, this is what the data looks like:" ] }, { "cell_type": "code", "execution_count": 221, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\nNo8tAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5,5))\n", "plt.imshow(data, cmap=plt.cm.gray)\n", "plt.axis('off')\n", "plt.savefig(\"images/data.png\")" ] }, { "cell_type": "code", "execution_count": 222, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "proj = proj_operator @ data.ravel()[:, np.newaxis]" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "An x-ray at angle 17, location 40 passing through the data:" ] }, { "cell_type": "code", "execution_count": 223, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\nIIX/ATGQOHfWpmE5AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5,5))\n", "plt.imshow(data + proj_t[17,40], cmap=plt.cm.gray)\n", "plt.axis('off')\n", "plt.savefig(\"images/data_xray.png\")" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Where they intersect:" ] }, { "cell_type": "code", "execution_count": 224, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "both = data + proj_t[17,40]\n", "plt.imshow((both > 1.1).astype(int), cmap=plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The intensity of an x-ray at angle 17, location 40 passing through the data:" ] }, { "cell_type": "code", "execution_count": 225, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "6.4384498372605989" ] }, "execution_count": 225, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.resize(proj, (l//7,l))[17,40]" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The intensity of an x-ray at angle 3, location 14 passing through the data:" ] }, { "cell_type": "code", "execution_count": 226, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(data + proj_t[3,14], cmap=plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Where they intersect:" ] }, { "cell_type": "code", "execution_count": 227, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "both = data + proj_t[3,14]\n", "plt.imshow((both > 1.1).astype(int), cmap=plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The measurement from the CT scan would be a small number here:" ] }, { "cell_type": "code", "execution_count": 228, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "2.1374953737965541" ] }, "execution_count": 228, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.resize(proj, (l//7,l))[3,14]" ] }, { "cell_type": "code", "execution_count": 229, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "proj += 0.15 * np.random.randn(*proj.shape)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### About *args" ] }, { "cell_type": "code", "execution_count": 230, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "a = [1,2,3]\n", "b= [4,5,6]" ] }, { "cell_type": "code", "execution_count": 231, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "c = list(zip(a, b))" ] }, { "cell_type": "code", "execution_count": 232, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "[(1, 4), (2, 5), (3, 6)]" ] }, "execution_count": 232, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c" ] }, { "cell_type": "code", "execution_count": 233, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "[(1, 2, 3), (4, 5, 6)]" ] }, "execution_count": 233, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(zip(*c))" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### The Projection (CT readings)" ] }, { "cell_type": "code", "execution_count": 234, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAawAAABZCAYAAABi4BCyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFwhJREFUeJzt3UmsJ1XZx/EDCg0CMgjKPIOAILTKPM9BGUKCIZK4IBJg\nASSEhB0YF2wgrAkQwgqahGHDTDPTzJMyI4OigAzKrDTN5KqffKryP7zkXdz3rZvfd/X07XurzlRV\nOd96zqkVvv766xZCCCH8f2fF/+sChBBCCN+GPLBCCCFMgjywQgghTII8sEIIIUyCPLBCCCFMgjyw\nQgghTII8sEIIIUyCPLBCCCFMgjywQgghTILvzuXJVlpppdpWY4UVVqiff/XVVxWvuOKKM38up556\nasUffPBBxS+//HLFa6yxxuBvPN9HH31UsTt9eO4NNtig4tVWW63iF154oeINN9yw4jXXXLPie+65\np+Lvfe97Fa+11loz69PD+luG8XHefPPNmX9/xBFHVLzXXntVfM4551T8xRdfVPyd73yn4l4/9PrE\nMm2zzTYVf/nllxWvvPLKFb/++uszf+e73x0OSc/n/33++ef/4+9stNFGFW+99dYVP/744xUvWbJk\n5nEcF8YHHnhgxcccc0zFn376acWfffbZzHMdddRRFf/5z39uYv8++uijFS9YsKDiZcuWVez43nXX\nXSu23zzODjvsUPFhhx1W8c0331zx9ddfX7HXi/3jGFl99dVnxmeddVaTN954o+JFixa1WdjG9qHn\ns/6WTzbeeOOKf/rTn1b88ccfV3zeeedV7PjfY489Kv7www8r/sc//jGznK0N27tHbzch62b/n3TS\nSRVfeOGFFdsuvetwlVVWqfitt96q+JNPPpl5nK222qri73//+xV7X22ttXfeeafiXr97vV155ZUz\nz+dYkmXLls3u0BGZYYUQQpgEeWCFEEKYBCvM5ea3CxYsqJP1VFxPxYg6wGn1vvvuW/FYky1durTi\nH/3oRxWrqdZZZ52KnXKvtNJKM8/XUyUeR0Xx17/+tWJVkdrwb3/7W8U9BTLWAU7lFy5cWPHaa69d\n8d///veKbW/r79Rd5fTPf/6z4v/85z8VW09/X13373//u2LbSIUmq6666uDfqoxtt912ZjlUvD/+\n8Y8rtv3uv//+mT+3jeyfAw44oGLHzs9+9rOZZVMDv/vuu20WP/nJTypWn7Q27MPXXnutYpXVuuuu\n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\nfEuWLKnYbMjeJ2l8HeG4H+2BGSUYQghh/pAHVgghhEkwp0pwwYIFdTLPa/aXysk9q8wQMlPLbCsX\nkzptba2fAejUdbxodRbqDafJHsdptlNgFZ9ZN+OMxuWcdNJJM485Votmxqn+1GD+vfrBfRxvvPHG\nintZPocddljF7nNm5pVt1Ms8VBOoBsafb1A5+CVa2WuvvSpW5dn2Hscy2Q+qpSeffLLis88+u2I/\nTbJ48eKZ57IMKk4zSV002dqwLdVJllX9ZGy2lW2hvlJf259mpdrnZrq66LSX0Wt5VK6tDRWk41B9\n5f6JXtNmcY4X7S7HNrIPXQhsn6hcR1+9nXn83l6drQ01svePni72GrD+3gMtk5rObF31W+9662lA\ndbxjwYXtXi+tDcekGzd4TZr16XVlZqkKfqRHowRDCCHMH/LACiGEMAnmVAmGEEII/1sywwohhDAJ\n8sAKIYQwCfLACiGEMAnywAohhDAJ8sAKIYQwCfLACiGEMAnywAohhDAJ8sAKIYQwCfLACiGEMAny\nwAohhDAJ8sAKIYQwCfLACiGEMAnywAohhDAJ8sAKIYQwCfLACiGEMAnywAohhDAJ8sAKIYQwCfLA\nCiGEMAnywAohhDAJ8sAKIYQwCfLACiGEMAnywAohhDAJ8sAKIYQwCf4LclFXLDARjdEAAAAASUVO\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(7,7))\n", "plt.imshow(np.resize(proj, (l//7,l)), cmap='gray')\n", "plt.axis('off')\n", "plt.savefig(\"images/proj.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Regresssion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we will try to recover the data just from the projections (the measurements of the CT scan)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Linear Regression: $Ax = b$" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Our matrix $A$ is the projection operator. This was our 4d matrix above (angle, location, x, y) of the different x-rays:" ] }, { "cell_type": "code", "execution_count": 203, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 203, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtAAAACNCAYAAACe2E2cAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXmYFdXVr3+LRmakBURbQECJIPEqH/C1LaJCRIaIAhdR\niMgQROGaBIkS6OsAxktUxCEiKoTBQMQ4oAgamRJBJDLJICq0MjQgk6IiXGJkcH1/VGGKc6rpOqeG\nXef0732e9+H0rtp7r9p9ulldZ9feoqoghBBCCCGEeKOc6QAIIYQQQgjJJJhAE0IIIYQQkgJMoAkh\nhBBCCEkBJtCEEEIIIYSkABNoQgghhBBCUoAJNCGEEEIIISnABJoQQkJCRG4WkQWZ0i4hhBBvMIEm\nhGQlIrJYRL4RkYpp1Pu3iPx/EdkvIq+JSF46MajqC6raIZ26jngaioiKSPkg2z1Ff7ki8qyI7BWR\nf4nIBhEZEEZfHuPpLyLvmeqfEELcYAJNCMk6RKQhgCsAKIDr02jiV6paDcAFAHIBPFFCPzlphhhL\nRKQCgEUAGgC4DEANAMMBPCwivw2hv/KlnxX/PgghZQ8m0ISQbKQvgOUAngfQL91GVPVrALMAXAQA\nIvK8fXf2byJyGEA7EakhItNF5EsR2S4i94pIOfv8k+6eikhTEVkoIl+LSJGI3Og4VllEHrPb+FZE\n3hORygDetU85YN8Vv8yl3dYissqut0pEWjuOLRaRB0VkmYgcEpEFIlK7hEu+BcC5AHqq6jZVPaqq\n8wD8BsDvReR0u81iESkUkU/su/zTRKSSo88uIrJORA6IyD9F5GLHsWIRGSEiHwI4LCLlRWSkiGyx\n4/tERLrb514I4DkAl9nXfsAuL23Ml4nIEyLyFYDRKXzLCSHEE0ygCSHZSF8AL9h2FJGzThwQkV/Y\nyVup2IlmDwBrHcW/ADAGQHUA7wEYD+tO7XkArrL7TpryICJVASwEMBNAHQC9ADwjIs3sU8YBaAmg\nNYCaAH4H4AcAV9rHc1W1mqq+n9BuTQBvAXgKQC0AjwN4S0RqJcQ8wO63AoC7S7jkawC8raqHE8pn\nAagE6670CW4G0BHA+bDu1N9rx/NfAKYCuN2OZyKAOQlTaXoDuNa+pmMAtsD6xKAGgAcA/EVE8lR1\nI4DBAN63rz3Xrl/amF8KYCuAs2B9rwghJFCYQBNCsgoRaQNrCsLLqvoBrOTsFyeOq+pMVb24pPo2\nT9l3O9cD2APAOX3hDVVdpqo/ADgKKxEuVNVDqloM4DFYd3IT6QKgWFWnqeoxVV0LKzHtad89/SWA\noaq6S1WPq+o/VfV7D5d8LYDPVHWG3e6LADYBuM5xzjRV/VRVvwPwMoDmJbRV277ek7CT3P328RM8\nrao77bv0Y2AlxQBwG4CJqrrCvo4/A/geQIGj7lN23e/s9l9R1d2q+oOqvgTgMwD5bgHa02ZKG/Pd\nqjreHo/vSrhWQghJGybQhJBsox+ABaq63/56JlKfxvEbVc1V1bqqerOqfuk4ttPxujaA0wBsd5Rt\nB1DXpc0GAC61pzUcsBP0mwGcbbdTCVaynyrnJPTvFsNex+t/AahWQlv7ASQ9MGnPI65tHz+Bcxy2\n23EA1nXelXCd9R3HE+tCRPo6pnwcgDVlpqRpJl7G/KT2CSEkaPhwBSEka7DnDN8IIEdETiSNFQHk\nisglqro+gG7U8Xo/rLvQDQB8YpedC2CXS72dAJao6jUucZcD8G9Y0yESY9TE8xPYbffv5FwA80qp\n58YiAH8QkaoJ0zh6wLqLvNxRVj+hv932650AxqjqqaZO/HhNItIAwJ8AXA1rqsZxEVkHQBLPtfEy\n5qWNGSGE+IJ3oAkh2UQ3AMcBNIM1TaE5gAsBLIU1TzZQVPU4rCkRY0Skup0M/hbAX1xOfxPABSJy\ni4icZvvfInKhPR1kKoDHReQcEcmxHxasCOBLWHOhzyshjL/Z7f7CfiDvJljX/2YalzQDwOcAXhFr\n+bzTRKQjrPnVo1X1W8e5d4hIPXsO9j0AXrLL/wRgsIhcKhZVReRaEaleQp9VYSW8XwKAWEvmXeQ4\nvg9APbFWCEl1zAkhJBSYQBNCsol+sOb77lDVvScE8DSAm+0E82YR+TjAPn8N4DCsh9begzVlZGri\nSap6CEAHWPN3d8OaVvEIrDvkgPVg3wYAqwB8bR8rp6r/gjXHeJk9xaEgod2vYM2vvgvAV7AePuzi\nmMLiGXvOdXtYd5FXADgI66HEe1T10YTTZwJYYF/3FgD/z25jNYBBsMb8GwCbAfQ/RZ+fwJrD/D6s\nZPl/AVjmOOUfAD4GsFdETlyTpzEnhJCwEFV+0kUIIWEgIr8E0EdVf2Y6liARkWIAt6rqItOxEEKI\nCXgHmhBCwuOnALaZDoIQQkiwRJ5Ai0gnsTYQ2CwiI6PunxBCokBEZgPoBGt6AiGEkCwi0ikc9vqd\nn8JarP9zWHP9ettz4AghhBBCCIk9Ud+BzgewWVW3quoRAH8F0DXiGAghhBBCCEmbqBPoujh5gfvP\n4b7hACGEEEIIIbEklhupiMhtsLaDBYCWJmMhJEpatnR/u3/wwQcRR0IIIYSUPVRVSj8r+gR6F07e\nvaoeXHbsUtVJACYBgIhwnT1SZmCiXDZxexZFxNPvcEIIIQaIegrHKgA/EZFG9q5SvQDMiTgGQgiJ\nFSKSJMl+VDVJQkhmEOkdaFU9JiK/AjAfQA6Aqaoa5I5ghBBCSEbAP5TICfgpVOYR+TrQqvo3Vb1A\nVc9X1TFe6rRr185z++PGjfN87scfe8/di4uLPZ/7zDPPeD73uuuu83xuTk6O53PduOqqq3zVJ4QQ\nQkjw8FOoDMTtI6Q4CUBp9M6aNcvzuQMHDvR8bl5eXlJZ1apVPdfv2bOn53OnTZvm+dy9e/d6PveD\nDz7wfO6DDz7o+dzWrVv7+p5VqlTJ87ndu3cP9P1CKaWUZoOe81PTCTITaErj7aRJkzyf261bN8/n\nVqhQwVdcbdq08XzumDFjPJ+7du1az+fu3r3b87lTpkzxfG6PHj08n1u5cmXj7xFKKc0WmUBTSikN\n3WHDhnk+d+HChZ7PPXLkiOdzt2zZ4vnc8ePHez63c+fOvsamcePGns8dOnSo53PnzZvn+dzjx48b\nf49QmkkygaaUUkppZPbq1cvzudOnT/d87v79+z2fu3LlSs/njh492vO5+fn5vsamWrVqns8Na6ri\nvn37jL9HMkEm0JRSSimlNGVzcnJ81b/qqqs8n/vII494PvfDDz/0fO7OnTs9nztx4sQfX2dNAl2n\nTh1f38StW7f6qj937lxf9VP569DNFi1a+KofpWeeeaav+s2aNfNV/9lnn/VV/+jRo77qP/74477q\nFxYW+qqfyh0OSimllCabNQm06YGk4eo3aUzlIS43jx075qu+36Td7x8NmWTLli191X/++ed91X/r\nrbd81U9lnq2bqcwVdrN8+fLGv4eUUprtMoGmlGa8gwcPNh5DpjhgwABf9desWeOr/tKlS33Vf/31\n133Vb9eunfHvgVf9rkBTt25dX/UffvhhX/UPHz5sfAwpDUsm0JRSSrPGGjVq+KqfyooYbv7xj3/0\nVd/vahgTJkzwVT+VB+bcrFWrlvH3gFdbtWrlq77f1VfefvttX/U3b97sq34qK7q42bt3b+PfQ5My\ngaaUUkppmXDDhg2+6t92222+6pelzaluvfVWX/VNT90sbaM4JtBpOmTIEF/1L7nkEuNv7qDdtGmT\n8RiC9v777/dVP5XNRTLFRYsW+arfp08f49dAKaWU+pEJdIr6TZz9zt+Loy+++KKv+n4fmoqju3bt\n8lXf74N0YZjKjn5u+v24MY76vUNy7rnnGr+GRP3eIXv//feNXwOllIYtE2hKA3TQoEG+6vtdDjGO\nMnFOdurUqcavIWhT2fXOTb8PN4ah3/nUfh+iO//8842PQaJdunQxWp/SuMgEmlJKI3L79u2+6hcU\nFBi/hqBj8jsmcXT48OG+6scxcfbr6tWrjccQtGPHjvVV3++eAHF0+fLlvup369bN+DUk2qBBA9dy\nJtCUUkopdZV3nJP1+8nC6aefbvwaEvX7CZDfFUXiaGkb3JXpBDqODzP5XUIpDJ988knjMSTqd2OT\nMPS7WUoYxnEDloEDBxqPgVJKKfVjViXQfhd9D8N69eoZj6GsGsePgvyuYBGGGzduNB5DogcOHDAe\nQ6IzZswwHkOi+fn5gbcpIsavKxP0u4YwpTSzzaoE2ourVq0yPuiJ+p0zFIZxvDsfR5s2bRp4m7m5\nucavK9F7773XeAyJ7t2713gMic6ePdt4DInu3LnTeAyJ/u53vzMeQ6JVqlQxHkOimbRroh/j+ACp\n3x03w9DvJjk0WMtcAk1pNuh3gfowXLdunfEYEvW7bXQYHj161HgMiT7xxBPGY0g0Gx+kyxT97rAX\nhm+99ZbxGBLdsmWL8RgS3bdvn/EYEn355ZeNx5Co32VZASbQlFJKPRjHP0bWrl1rPIZE43g3NY6G\nsZlY5cqVjV9Xon5XZAnDHTt2GI8h0Zdeesl4DIl+8cUXpzzuNT8VO0mNLfa8vUAoKCjA8uXLg2ou\ntvzqV7/C008/bTqMjGTbtm1o1KiR6TBCp1OnTpg3b57pMAghhJBYoari5bxyYQcSJxKT5+eee85Q\nJOGSmDyvW7cu8D4aN24ceJtxIDF5XrRokaFIwiWK5Llz586h9xEHiouLTYeQsfz61782HQIhhKSH\n6SkacZrCUaFChcDb/Oabb4x/XBGFfndwK8t+9dVXxmOIwhtvvDHwNktbzzNbXLFihfEYorBFixaB\ntxnHKSph+MILLwTeZhxXPApjreU9e/YYv64ofOCBBwJv8+677zZ+XUHLOdAx9dFHHzUeQxTm5eUF\n3ubZZ59t/Lqi8PXXXzceQ6YaxAMkmeDgwYONx5Cp9u/f33gMUdi+fXvjMWSq2bh5iJsNGzYMvM04\nrjaVqkygKaVl3smTJxuPIQrD2E45jKUc4+jixYuNx5CpXnfddcZjiMI4LhmZKQ4bNsx4DKnKBJpS\nSimNgXXq1DEeQ6KdOnUKvM1Zs2YZv64oXLhwYeBttm7d2vh1ReH69euNx1CaTKB9GMZUgWXLlgXe\n5ujRo42/0Wi4hrF73ObNmwNvM47bndP4e/DgwcDbfO2114xfF6U0c2UCTbPWMP6CLW1dSErdXLBg\nQeBtqvWLj2ax/fr1C7zNMLakj+OuoDRYw/gk4rHHHgu8zTAeaK1ataprORPogCwoKAi8zfvvvz/w\nNsP4hXzOOecYHXt6smHs4Hb77bcH3mYYGww0b97c+PjT/1itWrXA2+zevXvgbY4bNy7wNjt27Gh8\n/Gm4hjGdIow/cPr27Wt8rLJRJtC0TBjGR8DLly83fl008wxjasy2bduMXxfNPMOYMnj48GHj10Uz\nzzCmVB06dCjUmL3mp2VqJ0JCCCEkKIqKitCkSZNA29y+fTsaNGgQaJsk+1m6dCmuuOKKQNv897//\njUqVKgXaZiagHnciZAJNCCGEEEIIvCfQpW7lLSJTReQLEfnIUVZTRBaKyGf2v2c4jhWKyGYRKRKR\njo7yliKywT72lIh4CpCUHfLy8kyH4ImLL77YdAieuPrqq02H4IlevXqZDsETmbLt9IMPPhh4m2ee\neWbgbT733HOBt9msWbPA25w1a1bgbbZt2zbwNt99993A21ywYEHgbW7atCnwNmfMmBF4m1999VXg\nbT7xxBOBt3n8+PHA2ywsLAy8zb179wbe5qBBgwJvM6XfIR7mIF8JoAWAjxxlYwGMtF+PBPCI/boZ\ngPUAKgJoBGALgBz72EoABQAEwNsAOmfyHOg777wz8DbLlSsXeJtjxowJvM3vvvsu8Db/9Kc/Bd7m\njh07Am9z9uzZgbcZxiYYYcyBDGN3rk8//TTwNqdPnx54m998803gbYbxpPqRI0cCb3PEiBGBt7lr\n167A2xwwYEDgba5bty7wNjNl85EwHqAPwzAerg7D6tWrG4+BejPQOdAi0hDAm6p6kf11EYC2qrpH\nRPIALFbVJiJSCKv3h+zz5gMYDaAYwDuq2tQu723Xv91D36UHSAghhBBCiE8Cm8JRAmep6h779V4A\nZ9mv6wLY6Tjvc7usrv06sZwQQgghhJC0qFChgpF+002gf0StW9iB3iUWkdtEZLWIrE481r179yC7\nAgBMnjw58Dbr168feJskfFq1ahV4m6NGjQq8zYKCgsDbJJnJwIEDA2/zxhtvDLzNatWqBd4mCZ8O\nHTqYDoGQU3LkyBEzHXuch9wQJ8+BLgKQZ7/OA1Bkvy4EUOg4bz6Ay+xzNjnKewOYGIc50N9//33g\nbS5atMj4HB4aD7ds2RJ4m5s2bTJ+XTQeLl68OPA2ud4vPWEYm398/fXXxq+LZq9B7FTseZ+SNBPo\nR3HyQ4Rj7dc/xckPEW5FyQ8R/jyVBDqMh3heeOEF499sGg/DWJh9yZIlxq+LxsONGzcG3ubWrVuN\nXxeNh2FsKR/GA6k0M506dWrgbcZ5m/jAEmgALwLYA+AorLnLAwHUAvB3AJ8BWASgpuP8e2CtvlEE\nx0obAFoB+Mg+9jTsNai9JNDDhg0LfIC4HWtmWqVKlcDb7NmzZ+Bt3nrrrYG3ya3VM9MwVjN44IEH\nAm8zPz/f+FjR1K1bt27gbU6ZMiXwNnv06GF8rGg8DOMPvqFDhwbWVqB3oE164YUXBj7Qu3fvNv4G\novFwzpw5gbd57Ngx49dF4+GECRMCb7O4uNj4ddF4WFhYGHibS5cuNX5dNB726dMn8DZnzpwZeJs1\na9YMtD2v+Sl3IsxSVBXcq4aQ7II/1+HDMSYk+0jl51pDXsaOxBj+BxA+cf/DMxvgGCfDn+tw4e/O\n8OHPdfhwjJMJ4+c64xNovlGS4X8A4cL/ZMOHYxw+/N2ZDN9z4cKf6/DhGEdHRifQfKOED/+TTYbv\nuXDhz3X4cIzDh787k+F7Llz4cx0tGZtA840SDRzj/8D/EMOHP9fhwzGOBo7xf+DvzvDhz3X0ZGQC\nzTdK+PAXXjJ8z4ULf67Dh2McPvzdmQzfc+HCn2szZGQCXRbeKN9//73R/svCGEfFnj17TIeQEWTC\ne27FihWmQ0ibAQMGZMQYR8Urr7wSSrtRjHG7du0Cb7NGjRqBtxkVI0aMMB1C2jRu3Nh3G4nvuYsu\nush3m6aYMGGC6RC8Y3qd51IXqk5zHb9WrVoZX0MxXW+//XbjMcTJ7t27G48hXcNYMD6TDWNTpKgs\nKioyHgMNxu+++854DDQY9+3bZzwGGoyrVq0yHgPgfR1o4wlyWAl0pnr55ZcbjyFd+/fvbzyGONm7\nd2/jMaRru3btjMcQJ0eMGGE8hnTlxisn+8wzzxiPIV1/+OEH4zHQYNy5c6fxGKi7TKAz0Ey+w/WP\nf/zDeAw0GKdNm2Y8hjiZyVuoh7Hld1Tm5eUF3mYY26pH5YABA4zHECdvuukm4zGk6zvvvGM8hjg5\nfPhw4zE4ZQKdYd57773GY0jXBg0aGI8hTk6aNMl4DOnKbchPdv78+cZjSNetW7caj4EG4+LFi43H\nQIPxz3/+s/EY4uTZZ59tPIZEmUBTSqlH3333XeMxpOvRo0eNx5Cu8+bNMx4DDc/Zs2cbjyFdDx48\naDyGdI3LXOI4e/PNN5d4jAm0YStVqmQ8hnTt3Lmz8RjS9bHHHjMeQ7q2bdvWeAw0PDN5+kBhYaHx\nGNI1kx9Czs3NNR5D3G3cuLHxGNI1kxcMGDRokPEY0vW888475XEm0AYdO3as8RjSdfXq1cZjoOGZ\nyavTZPKDfD179jQeQ7rWqlXLeAxxt7T/kONsJidCmZyAZnLiH5Wm/oBkAm3InJwc4zHE3RYtWhiP\nIV3j9rBDKr799tvGY0jXM88803gMcbdhw4bGY0jXTH5AbsiQIcZjSNemTZsajyHuVq9e3XgM6dq1\na1fjMaTrfffdZ6xvJtCl2Lx5c+NvkHTN5LV0586dazyGdI3jww5xs379+sZjSNd+/foZjyFdp0+f\nbjyGdG3WrJnxGOJulSpVjMeQrtddd53xGNJ11KhRxmNI1zZt2hiPIVP1mp+KnaTGFhGJd4CEEEKM\nUFxcjIYNG5oOI9ZccsklWL9+fej9FBUVoUmTJqH3k8nk5+dj5cqVpsMgANq0aYP33nvP9ZiqetpO\nNCO38iYkVaZNmxZJP0OGDImkn0xm5syZkfQzYMCASPrJZGbNmhVJP3369Aml3WxKnufOnRtKu4nJ\nc8+ePUPpJ5uS5wULFoTSLpPn1FmyZEko7ZaUPKeE6SkacZgDvWPHDuMfGcTdiy66KJJ+Nm/ebPxa\n427Lli0j6efjjz82fq1xt3Xr1pH0s2bNGuPXGnej2j3z/fffN36tcbdjx46R9LNkyRLj1xp3r7/+\n+kj6WbBggfFrDcqsnAPdt29f4wMbd994441I+snkXaCiMqo1bjN5ma6ojGqnzExeAjIqly1bFkk/\nV199tfFrjbtRrbrE+bil++GHH0bST35+vvFrjbtZmUBnk1EtJ7Zhwwbj1xp3o/rlziUCSzeqpOef\n//yn8WuNu1H9McBtjUu3W7dukfTDjW0oZQIdmFFt5ZvJy81EZVTb2Xbq1Mn4tcbdqD7GjupjeUop\npRRgAk0ppUZ98sknI+knqnWI27dvH0k/US2FuHDhwkj6mTBhQiT9DB06NJJ+orrBENXmNFHdmJk4\ncWIk/dx1112R9BPV8oQXXHBBJP0sXbr0x9de81MuY0cIIYQQQggA5TJ2/ujatWsk/TRt2jSSfnJy\nciLpJ9u44YYbIunn4osvjqSfihUrRtJPttGrV69I+mnRokUk/VSrVi2SfqLiwQcfjKSfW265JZJ+\n8vPzI+knNzc3kn6i4qGHHoqkn6iWyLz88ssj6ad27dqR9BMV48aNi6SfrLwDnZOTg+PHj4cRDiGE\nEEIIyVLK9B3oxOR57969kfT77bffRtLPqlWrIulnxowZkfRz//33R9LPzp07I+nn8OHDkfSzdu3a\nSPp56aWXIunn97//fST9bNu2LZJ+CCGEZDGmHxLkQ4SUUkrjbM+ePSPpZ/DgwcavNWyPHDliPIaw\nHTZsWCT9lIV157ds2RJJP1ddddWPr7kKB6U0UsvCxhWffPKJ8RjC9tlnn42kn6iernezfPnykfRT\nFtZVnjt3biT9zJo1y/i1hm1ZWBM9ql2N/ayCxASaJhnVlp5RLadk0h9++MF4DGF7xx13RNJPWdhJ\ncefOnZH006FDB+PXGrZFRUXGYwjb8ePHR9JP06ZNjV2j/XxT6C5atMj49zNso9qBePbs2cavNQqZ\nQEdkVNtvmrRt27aR9HPfffcZv9awvfbaayPpJ6qPEE169OhR4zGEbVQf6Uc1RcGke/bsiaSfsvCx\nOqXZLBNoD1atWtXYN6hBgwaR9DNlyhTjb8awXbt2rfEYwjaq7cZHjx5t/FrDljtNUkopLcnAEmgA\n9QG8A+ATAB8DGGqX1wSwEMBn9r9nOOoUAtgMoAhAR0d5SwAb7GNPwV5GL5PvQFNKKaXZalQ7arrp\n3B0uag8fPmys702bNhnre+bMmcb6vvvuu4313a5dux9fB5lA5wFoYb+uDuBTAM0AjAUw0i4fCeAR\n+3UzAOsBVATQCMAWADn2sZUACgAIgLcBdGYCTSml8TKq7afdHDhwoLG+mzdvbnzs42Jubq6xvk0+\nkDx8+HBjfb/44ovG+jb5bMGhQ4eM9b1kyZKkstCmcAB4A8A1sO4u5zmS7CLH3edCx/nzAVxmn7PJ\nUd4bwEQm0JTGw6imibhZpUoV49fv9LTTTjPWt8mVG7744gtjfUf1oKWbUT2E5eaoUaOM9d2lSxdj\nfZ9zzjnG+qb0VIaSQANoCGAHgNMBHHCUy4mvATwNoI/j2BQANwBoBWCRo/wKAG+W0M9tAFbbGh9M\nE5qcp1lYWGisb5NLFW3bts1Y319//bWxvk0+pT527Fhjfd90001JZVElzo0bN04qKygoMDYWQ4YM\nMdb35MmTjfW9Zs0aY31TSuNp4Ak0gGoAPgDwv+2vDyQc/yaoBNr0HehnnnnG2Ddu+fLlxvo2ucC9\nydVMnn/+eWN9/+Y3vzHWt9sd54YNG0bSt9sd5x49ehgbC0oppRQIOIEGcBqsqRi/dZRxCgellFJK\nqQ/d9mjYv3+/8bhK0+SUL6+6bU5z/vnnn7KO1wS6HEpBRATWXeSNqvq449AcAP3s1/1gzY0+Ud5L\nRCqKSCMAPwGwUlX3ADgoIgV2m30ddQghhJAyw4YNG5LKatSoYSCSkrnvvvuSygYNGmQgkpIZNWpU\nUtnAgQMNRFIyTZs2TSqbP3/+j6/nzJmTdLx27dqhxpTIT3/606SyAwcOnLJOnTp1wgrHMwcPHjzl\n8Xbt2iWVbdmyJZjOPdwBbgMrK/8QwDrbnwOoBeDvsJaxWwSgpqPOPbBW3yiCY6UNWNM4PrKPPQ0u\nY0cpzVKfeuqppLJu3boZj8up2zQek8tYuXnllVcmlWXCJjpuU+JatWplPC6nbjvLtWzZ0nhcTt0e\n8Hz44YeNx0Wz18DnQJvS9EBSmopnnXVWUtmqVauMx+U0Ly8vqWzr1q1JZeXLlzceq9Pi4uKkst69\nexuPy6nbQ5G9evUyHpfTcePGJZW99tprxuNymp+fn1T26quvGo+LUpr9MoGOULc1DDt06GA8LqdT\np05NKrvmmmuMx+XUbeWRSZMmGY/Lqds2vRMnTjQeV2maXOXDqwsXLkwqa9KkifG4KKWUlh2ZQKdp\n5cqVk8rcljqqXbu28W+y03Xr1iWVmVyayk235fEGDx5sPC5KKaWUUoAJNKWUUkrLsG5rq9etWzep\nrGnTpp7qun2y7Fb30ksv9VT3hhtu8FTX7dNit7puU5/c6rotGTpgwICksvbt26dd984770wq6969\nu6e6pmUCTSmlNKt1W/7rlltuSSq74447ksrcPhHr06dP2nXdHmxz+xTQre5DDz3kqe7IkSM91XXb\nin3EiBFJZX/4wx881Z0xY0ZS2ZgxY5LKxo8fn3ZdSuMiE2hKaVbav3//pDK3Oxtud0Dc7na41XW7\n8+JW1+02D3pYAAAGmUlEQVRujNe6bneQ3O4Wud1VcqvrdofL7W6W2x0zt7pud+Dc6nbs2NFTXUop\nzQS95qdiJ6mxRUTiHSAhhBBCCMkKVFW8nFfqRioknuTk5BipW65c8lvmjDPO8FTX2j/nZHJzc9OO\nhRBCCCHEBJlwB/oQrA1ZSPrUBrDfdBBZAMcxGDiOwcBx9A/HMBg4jsHAcQwGP+PYQFXP9HJi+TQ7\niJIiVW1lOohMRkRWcwz9w3EMBo5jMHAc/cMxDAaOYzBwHIMhqnHkFA5CCCGEEEJSgAk0IYQQQggh\nKZAJCfQk0wFkARzDYOA4BgPHMRg4jv7hGAYDxzEYOI7BEMk4xv4hQkIIIYQQQuJEJtyBJoQQQggh\nJDbENoEWkU4iUiQim0VkpOl44oSI1BeRd0TkExH5WESG2uU1RWShiHxm/3uGo06hPZZFItLRUd5S\nRDbYx54St8WasxwRyRGRtSLypv01xzFFRCRXRF4VkU0islFELuM4po6IDLN/pj8SkRdFpBLHsXRE\nZKqIfCEiHznKAhs3EakoIi/Z5StEpGGU1xcFJYzho/bP9Ici8rqI5DqOcQxdcBtHx7G7RERFpLaj\njOPoQknjKCK/tt+TH4vIWEd59ONoeqvuErbvzgGwBcB5ACoAWA+gmem44iKAPAAt7NfVAXwKoBmA\nsQBG2uUjATxiv25mj2FFAI3ssc2xj60EUABAALwNoLPp6zMwnr8FMBPAm/bXHMfUx/DPAG61X1cA\nkMtxTHkM6wLYBqCy/fXLAPpzHD2N3ZUAWgD4yFEW2LgB+D8AnrNf9wLwkulrjmgMOwAob79+hGOY\n3jja5fUBzAewHUBtjmNa78d2ABYBqGh/XcfkOMb1DnQ+gM2qulVVjwD4K4CuhmOKDaq6R1XX2K8P\nAdgI6z/frrASGdj/drNfdwXwV1X9XlW3AdgMIF9E8gCcrqrL1XoXTXfUKROISD0A1wKY7CjmOKaA\niNSA9ctuCgCo6hFVPQCOYzqUB1BZRMoDqAJgNziOpaKq7wL4OqE4yHFztvUqgKuz7a6+2xiq6gJV\nPWZ/uRxAPfs1x7AESngvAsATAH4HwPngGcexBEoYxyEAHlbV7+1zvrDLjYxjXBPougB2Or7+3C4j\nCdgfO/wXgBUAzlLVPfahvQDOsl+XNJ517deJ5WWJJ2H9UvvBUcZxTI1GAL4EME2sqTCTRaQqOI4p\noaq7AIwDsAPAHgDfquoCcBzTJchx+7GOnVB+C6BWOGHHll/CuoMHcAxTQkS6AtilqusTDnEcU+MC\nAFfYUy6WiMh/2+VGxjGuCTTxgIhUAzALwJ2qetB5zP5ri0usnAIR6QLgC1X9oKRzOI6eKA/ro7Zn\nVfW/AByG9ZH5j3AcS8eeo9sV1h8k5wCoKiJ9nOdwHNOD4+YPEbkHwDEAL5iOJdMQkSoA/i+A+03H\nkgWUB1AT1pSM4QBeNnn3Pa4J9C5Y84VOUM8uIzYichqs5PkFVX3NLt5nf2QB+98TH2+UNJ678J+P\n5JzlZYXLAVwvIsWwpgn9TET+Ao5jqnwO4HNVXWF//SqshJrjmBrtAWxT1S9V9SiA1wC0BscxXYIc\ntx/r2NNragD4KrTIY4SI9AfQBcDN9h8iAMcwFc6H9Ufxevv/mnoA1ojI2eA4psrnAF5Ti5WwPjmu\nDUPjGNcEehWAn4hIIxGpAGuC9xzDMcUG+y+uKQA2qurjjkNzAPSzX/cD8IajvJf91GkjAD8BsNL+\nePOgiBTYbfZ11Ml6VLVQVeupakNY77F/qGofcBxTQlX3AtgpIk3soqsBfAKOY6rsAFAgIlXs678a\n1vMNHMf0CHLcnG3dAOt3Rdbf0RaRTrCmuF2vqv9yHOIYekRVN6hqHVVtaP9f8zmsRQD2guOYKrNh\nPUgIEbkA1gPr+2FqHEt7ytCUAH4Oa3WJLQDuMR1PnATQBtbHkR8CWGf7c1jzd/4O4DNYT6rWdNS5\nxx7LIjieyAfQCsBH9rGnYW+uU9YE0Bb/WYWD45j6+DUHsNp+T84GcAbHMa1xfADAJnsMZsB6qpzj\nWPq4vQhr3vhRWAnKwCDHDUAlAK/AejhpJYDzTF9zRGO4GdY80RP/zzzHMUx9HBOOF8NehYPjmPL7\nsQKAv9jjsgbAz0yOI3ciJIQQQgghJAXiOoWDEEIIIYSQWMIEmhBCCCGEkBRgAk0IIYQQQkgKMIEm\nhBBCCCEkBZhAE0IIIYQQkgJMoAkhhBBCCEkBJtCEEEIIIYSkABNoQgghhBBCUuB/ANomofQhCMUM\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12,12))\n", "plt.title(\"A: Projection Operator\")\n", "plt.imshow(proj_operator.todense().A, cmap='gray')" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "We are solving for $x$, the original data. We (un)ravel the 2D data into a single column." ] }, { "cell_type": "code", "execution_count": 202, "metadata": { "hidden": true, "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 202, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nLUfOEcG+gdsAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5,5))\n", "plt.title(\"x: Image\")\n", "plt.imshow(data, cmap='gray')\n", "\n", "plt.figure(figsize=(4,12))\n", "# I am tiling the column so that it's easier to see\n", "plt.imshow(np.tile(data.ravel(), (80,1)).T, cmap='gray')" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Our vector $b$ is the (un)raveled matrix of measurements: " ] }, { "cell_type": "code", "execution_count": 238, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 238, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\ngrW3r33ta1ndo48+WpVL4TbaFj6mLuNnLU61Il5Kr5pWKXWmamoMt1vbwq81dIVRm7FeX9pdSnVA\n1pFUm2ItWFM/cho+Db/h8CnViUs72tTpr0CuRatGzlof9w8g1xYnTJiQ1fH6Bz1fXUo+INcatQ/U\npSlV7YuvXcNmePypBs/9c+rUqVkd9zlNdTp37tyqrGFIbHcNIbvyyiursoabjR49uiovXrw4q5sz\nZ05V1v7IuqquhWCtnUP5AODZZ5+tytzfgXzNgaY6Zb1StXVuy49//OOsjse+arO8lkbXsvD5dC0E\nv9aQtqVLl1ZlDQXldRI/+9nPsrqbbrqpKmuYFacz1p3lWKvV9T+s7asmz6FbY8eOzermzZtXlTXd\nKI8HnbtL8yX3EQ1P5P7C88L06dOr8qpVq7Bx40ZryMYYY8yugh/IxhhjTAvQVJf1oEGD0i233AJg\nW9ceu+zUxcShJJo9h5fEqxvpiiuuqMrqEmE3nbrJOIxGXYJ8HHW/ciYfdWuyO0hdhCU3eClzVsm9\nzJ/TOr5ezXzG6PnY5XP22WdndexiZakAyN2l6iIsuYlL2cbY/ashGtwnNLsTu9BK2av0fKXNzdlN\npmFIpSxeI0aMqMq6IxHbU9vJ9uRzA7k9uaz3i938J510UlbHbtXrr78+q+MQGw4RAvL717mrWycs\nUWm2Iw5z1HHD4ZEawsOZ+ErzmLpYORxGM1Lx9Wm4DY8VzggFAHfeeWdV5vsK5K52db9yu1VCqQuj\nAfIMd6effnpWx6GMHB4F5BLcjTfemNXdcccdVfmCCy7I6h5//PGqfPvtt2d1Rx11VFXWEDqWW3Qs\n8H248MILszqeLzVrHvczlblY0tT5i/uPSgfsBtf+yfdFQ6l4jLG0OmXKlKq8ZcsWbN261S5rY4wx\nZlfhUx/IEfGriFgbEUvob/tHxOyIWN74v2/pGMYYY4wpsz2/kH8N4Dz527UA5qSUBgKY03htjDHG\nmB1kuzTkiDgCwL0ppaGN10sBnJVSeiMiDgbwaErp2MIhAACHHHJImjx5MoBtU5dxOAWHFzTOV5V1\nKTvrthr+MnLkyKqsugBrbxpmxeEonC4PyJf/q1bK2rCGL6nuyLC2ojoq64V6r7hten28PF9T5LEm\nr/oyvy5pz6NGjcrqOC2kauulPsZ1pbZoWEIpJGt7tVPeGQnINSbV1lmze+utt7I61ho1JSxT6vNn\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nku9OoAhR+70AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(8,8))\n", "plt.imshow(np.resize(proj, (l//7,l)), cmap='gray')\n", "\n", "plt.figure(figsize=(10,10))\n", "plt.imshow(np.tile(proj.ravel(), (20,1)).T, cmap='gray')" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Scikit Learn Linear Regression" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "from sklearn.linear_model import Lasso\n", "from sklearn.linear_model import Ridge" ] }, { "cell_type": "code", "execution_count": 126, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 126, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Reconstruction with L2 (Ridge) penalization\n", "rgr_ridge = Ridge(alpha=0.2)\n", "rgr_ridge.fit(proj_operator, proj.ravel())\n", "rec_l2 = rgr_ridge.coef_.reshape(l, l)\n", "plt.imshow(rec_l2, cmap='gray')" ] }, { "cell_type": "code", "execution_count": 179, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "2304" ] }, "execution_count": 179, "metadata": {}, "output_type": "execute_result" } ], "source": [ "18*128" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "18 x 128 x 128 x 128" ] }, { "cell_type": "code", "execution_count": 178, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(2304, 16384)" ] }, "execution_count": 178, "metadata": {}, "output_type": "execute_result" } ], "source": [ "proj_operator.shape" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n/B8DgYMcgRCkOgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Reconstruction with L1 (Lasso) penalization\n", "# the best value of alpha was determined using cross validation\n", "# with LassoCV\n", "rgr_lasso = Lasso(alpha=0.001)\n", "rgr_lasso.fit(proj_operator, proj.ravel())\n", "rec_l1 = rgr_lasso.coef_.reshape(l, l)\n", "plt.imshow(rec_l1, cmap='gray')" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The L1 penalty works significantly better than the L2 penalty here!" ] } ], "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: nbs/5. Health Outcomes with Linear Regression.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "You can read an overview of this Numerical Linear Algebra course in [this blog post](http://www.fast.ai/2017/07/17/num-lin-alg/). The course was originally taught in the [University of San Francisco MS in Analytics](https://www.usfca.edu/arts-sciences/graduate-programs/analytics) graduate program. Course lecture videos are [available on YouTube](https://www.youtube.com/playlist?list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY) (note that the notebook numbers and video numbers do not line up, since some notebooks took longer than 1 video to cover).\n", "\n", "You can ask questions about the course on [our fast.ai forums](http://forums.fast.ai/c/lin-alg)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 5. Health Outcomes with Linear Regression" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn import datasets, linear_model, metrics\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import PolynomialFeatures\n", "import math, scipy, numpy as np\n", "from scipy import linalg" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Diabetes Dataset" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will use a dataset from patients with diabates. The data consists of 442 samples and 10 variables (all are physiological characteristics), so it is tall and skinny. The dependent variable is a quantitative measure of disease progression one year after baseline." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a classic dataset, famously used by Efron, Hastie, Johnstone, and Tibshirani in their [Least Angle Regression](https://arxiv.org/pdf/math/0406456.pdf) paper, and one of the [many datasets included with scikit-learn](http://scikit-learn.org/stable/datasets/)." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": true }, "outputs": [], "source": [ "data = datasets.load_diabetes()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": true }, "outputs": [], "source": [ "feature_names=['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": true }, "outputs": [], "source": [ "trn,test,y_trn,y_test = train_test_split(data.data, data.target, test_size=0.2)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((353, 10), (89, 10))" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trn.shape, test.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Linear regression in Scikit Learn" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider a system $X\\beta = y$, where $X$ has more rows than columns. This occurs when you have more data samples than variables. We want to find $\\hat{\\beta}$ that minimizes: \n", "$$ \\big\\vert\\big\\vert X\\beta - y \\big\\vert\\big\\vert_2$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's start by using the sklearn implementation:" ] }, { "cell_type": "code", "execution_count": 173, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "458 µs ± 62.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" ] } ], "source": [ "regr = linear_model.LinearRegression()\n", "%timeit regr.fit(trn, y_trn)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pred = regr.predict(test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It will be helpful to have some metrics on how good our prediciton is. We will look at the mean squared norm (L2) and mean absolute error (L1)." ] }, { "cell_type": "code", "execution_count": 128, "metadata": { "collapsed": true, "scrolled": true }, "outputs": [], "source": [ "def regr_metrics(act, pred):\n", " return (math.sqrt(metrics.mean_squared_error(act, pred)), \n", " metrics.mean_absolute_error(act, pred))" ] }, { "cell_type": "code", "execution_count": 129, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(75.36166834955054, 60.629082113104403)" ] }, "execution_count": 129, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regr_metrics(y_test, regr.predict(test))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Polynomial Features" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Linear regression finds the best coefficients $\\beta_i$ for:\n", "\n", "$$ x_0\\beta_0 + x_1\\beta_1 + x_2\\beta_2 = y $$\n", "\n", "Adding polynomial features is still a linear regression problem, just with more terms:\n", "\n", "$$ x_0\\beta_0 + x_1\\beta_1 + x_2\\beta_2 + x_0^2\\beta_3 + x_0 x_1\\beta_4 + x_0 x_2\\beta_5 + x_1^2\\beta_6 + x_1 x_2\\beta_7 + x_2^2\\beta_8 = y $$\n", "\n", "We need to use our original data $X$ to calculate the additional polynomial features." ] }, { "cell_type": "code", "execution_count": 172, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(353, 10)" ] }, "execution_count": 172, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trn.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we want to try improving our model's performance by adding some more features. Currently, our model is linear in each variable, but we can add polynomial features to change this." ] }, { "cell_type": "code", "execution_count": 130, "metadata": { "collapsed": true }, "outputs": [], "source": [ "poly = PolynomialFeatures(include_bias=False)" ] }, { "cell_type": "code", "execution_count": 131, "metadata": { "collapsed": true }, "outputs": [], "source": [ "trn_feat = poly.fit_transform(trn)" ] }, { "cell_type": "code", "execution_count": 132, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'age, sex, bmi, bp, s1, s2, s3, s4, s5, s6, age^2, age sex, age bmi, age bp, age s1, age s2, age s3, age s4, age s5, age s6, sex^2, sex bmi, sex bp, sex s1, sex s2, sex s3, sex s4, sex s5, sex s6, bmi^2, bmi bp, bmi s1, bmi s2, bmi s3, bmi s4, bmi s5, bmi s6, bp^2, bp s1, bp s2, bp s3, bp s4, bp s5, bp s6, s1^2, s1 s2, s1 s3, s1 s4, s1 s5, s1 s6, s2^2, s2 s3, s2 s4, s2 s5, s2 s6, s3^2, s3 s4, s3 s5, s3 s6, s4^2, s4 s5, s4 s6, s5^2, s5 s6, s6^2'" ] }, "execution_count": 132, "metadata": {}, "output_type": "execute_result" } ], "source": [ "', '.join(poly.get_feature_names(feature_names))" ] }, { "cell_type": "code", "execution_count": 133, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "(353, 65)" ] }, "execution_count": 133, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trn_feat.shape" ] }, { "cell_type": "code", "execution_count": 134, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)" ] }, "execution_count": 134, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regr.fit(trn_feat, y_trn)" ] }, { "cell_type": "code", "execution_count": 135, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(55.747345922929185, 42.836164292252235)" ] }, "execution_count": 135, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regr_metrics(y_test, regr.predict(poly.fit_transform(test)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Time is squared in #features and linear in #points, so this will get very slow!" ] }, { "cell_type": "code", "execution_count": 136, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "635 µs ± 9.25 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" ] } ], "source": [ "%timeit poly.fit_transform(trn)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Speeding up feature generation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We would like to speed this up. We will use [Numba](http://numba.pydata.org/numba-doc/0.12.2/tutorial_firststeps.html), a Python library that compiles code directly to C." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Numba is a compiler.**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Resources" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[This tutorial](https://jakevdp.github.io/blog/2012/08/24/numba-vs-cython/) from Jake VanderPlas is a nice introduction. Here Jake [implements a non-trivial algorithm](https://jakevdp.github.io/blog/2015/02/24/optimizing-python-with-numpy-and-numba/) (non-uniform fast Fourier transform) with Numba.\n", "\n", "Cython is another alternative. I've found Cython to require more knowledge to use than Numba (it's closer to C), but to provide similar speed-ups to Numba.\n", "\n", "\"Cython\n", "\n", "Here is a [thorough answer](https://softwareengineering.stackexchange.com/questions/246094/understanding-the-differences-traditional-interpreter-jit-compiler-jit-interp) on the differences between an Ahead Of Time (AOT) compiler, a Just In Time (JIT) compiler, and an interpreter." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Experiments with vectorization and native code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's first get aquainted with Numba, and then we will return to our problem of polynomial features for regression on the diabates data set." ] }, { "cell_type": "code", "execution_count": 140, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 141, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import math, numpy as np, matplotlib.pyplot as plt\n", "from pandas_summary import DataFrameSummary\n", "from scipy import ndimage" ] }, { "cell_type": "code", "execution_count": 142, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from numba import jit, vectorize, guvectorize, cuda, float32, void, float64" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will show the impact of:\n", "- Avoiding memory allocations and copies (slower than CPU calculations)\n", "- Better locality\n", "- Vectorization\n", "\n", "If we use numpy on whole arrays at a time, it creates lots of temporaries, and can't use cache. If we use numba looping through an array item at a time, then we don't have to allocate large temporary arrays, and can reuse cached data since we're doing multiple calculations on each array item." ] }, { "cell_type": "code", "execution_count": 175, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Untype and Unvectorized\n", "def proc_python(xx,yy):\n", " zz = np.zeros(nobs, dtype='float32')\n", " for j in range(nobs): \n", " x, y = xx[j], yy[j] \n", " x = x*2 - ( y * 55 )\n", " y = x + y*2 \n", " z = x + y + 99 \n", " z = z * ( z - .88 ) \n", " zz[j] = z \n", " return zz" ] }, { "cell_type": "code", "execution_count": 176, "metadata": { "collapsed": true }, "outputs": [], "source": [ "nobs = 10000\n", "x = np.random.randn(nobs).astype('float32')\n", "y = np.random.randn(nobs).astype('float32')" ] }, { "cell_type": "code", "execution_count": 177, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "49.8 ms ± 1.19 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" ] } ], "source": [ "%timeit proc_python(x,y) # Untyped and unvectorized" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Numpy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numpy lets us vectorize this:" ] }, { "cell_type": "code", "execution_count": 146, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Typed and Vectorized\n", "def proc_numpy(x,y):\n", " z = np.zeros(nobs, dtype='float32')\n", " x = x*2 - ( y * 55 )\n", " y = x + y*2 \n", " z = x + y + 99 \n", " z = z * ( z - .88 ) \n", " return z" ] }, { "cell_type": "code", "execution_count": 147, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 147, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose( proc_numpy(x,y), proc_python(x,y), atol=1e-4 )" ] }, { "cell_type": "code", "execution_count": 148, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "35.9 µs ± 166 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n" ] } ], "source": [ "%timeit proc_numpy(x,y) # Typed and vectorized" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Numba" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numba offers several different decorators. We will try two different ones:\n", "\n", "- `@jit`: very general\n", "- `@vectorize`: don't need to write a for loop. useful when operating on vectors of the same size" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we will use Numba's jit (just-in-time) compiler decorator, without explicitly vectorizing. This avoids large memory allocations, so we have better locality:" ] }, { "cell_type": "code", "execution_count": 149, "metadata": { "collapsed": true, "scrolled": false }, "outputs": [], "source": [ "@jit()\n", "def proc_numba(xx,yy,zz):\n", " for j in range(nobs): \n", " x, y = xx[j], yy[j] \n", " x = x*2 - ( y * 55 )\n", " y = x + y*2 \n", " z = x + y + 99 \n", " z = z * ( z - .88 ) \n", " zz[j] = z \n", " return zz" ] }, { "cell_type": "code", "execution_count": 150, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 150, "metadata": {}, "output_type": "execute_result" } ], "source": [ "z = np.zeros(nobs).astype('float32')\n", "np.allclose( proc_numpy(x,y), proc_numba(x,y,z), atol=1e-4 )" ] }, { "cell_type": "code", "execution_count": 151, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6.4 µs ± 17.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n" ] } ], "source": [ "%timeit proc_numba(x,y,z)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we will use Numba's `vectorize` decorator. Numba's compiler optimizes this in a smarter way than what is possible with plain Python and Numpy." ] }, { "cell_type": "code", "execution_count": 152, "metadata": { "collapsed": true }, "outputs": [], "source": [ "@vectorize\n", "def vec_numba(x,y):\n", " x = x*2 - ( y * 55 )\n", " y = x + y*2 \n", " z = x + y + 99 \n", " return z * ( z - .88 ) " ] }, { "cell_type": "code", "execution_count": 153, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 153, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(vec_numba(x,y), proc_numba(x,y,z), atol=1e-4 )" ] }, { "cell_type": "code", "execution_count": 154, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5.82 µs ± 14.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n" ] } ], "source": [ "%timeit vec_numba(x,y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numba is **amazing**. Look how fast this is!" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Numba polynomial features" ] }, { "cell_type": "code", "execution_count": 155, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "@jit(nopython=True)\n", "def vec_poly(x, res):\n", " m,n=x.shape\n", " feat_idx=0\n", " for i in range(n):\n", " v1=x[:,i]\n", " for k in range(m): res[k,feat_idx] = v1[k]\n", " feat_idx+=1\n", " for j in range(i,n):\n", " for k in range(m): res[k,feat_idx] = v1[k]*x[k,j]\n", " feat_idx+=1" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### Row-Major vs Column-Major Storage" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "From this [blog post by Eli Bendersky](http://eli.thegreenplace.net/2015/memory-layout-of-multi-dimensional-arrays/):\n", "\n", "\"The row-major layout of a matrix puts the first row in contiguous memory, then the second row right after it, then the third, and so on. Column-major layout puts the first column in contiguous memory, then the second, etc.... While knowing which layout a particular data set is using is critical for good performance, there's no single answer to the question which layout 'is better' in general.\n", "\n", "\"It turns out that matching the way your algorithm works with the data layout can make or break the performance of an application.\n", "\n", "\"The short takeaway is: **always traverse the data in the order it was laid out**.\"\n", "\n", "**Column-major layout**: Fortran, Matlab, R, and Julia\n", "\n", "**Row-major layout**: C, C++, Python, Pascal, Mathematica" ] }, { "cell_type": "code", "execution_count": 156, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "trn = np.asfortranarray(trn)\n", "test = np.asfortranarray(test)" ] }, { "cell_type": "code", "execution_count": 157, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "m,n=trn.shape\n", "n_feat = n*(n+1)//2 + n\n", "trn_feat = np.zeros((m,n_feat), order='F')\n", "test_feat = np.zeros((len(y_test), n_feat), order='F')" ] }, { "cell_type": "code", "execution_count": 158, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "vec_poly(trn, trn_feat)\n", "vec_poly(test, test_feat)" ] }, { "cell_type": "code", "execution_count": 159, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)" ] }, "execution_count": 159, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regr.fit(trn_feat, y_trn)" ] }, { "cell_type": "code", "execution_count": 160, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(55.74734592292935, 42.836164292252306)" ] }, "execution_count": 160, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regr_metrics(y_test, regr.predict(test_feat))" ] }, { "cell_type": "code", "execution_count": 161, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "7.33 µs ± 19.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n" ] } ], "source": [ "%timeit vec_poly(trn, trn_feat)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Recall, this was the time from the scikit learn implementation PolynomialFeatures, which was created by experts: " ] }, { "cell_type": "code", "execution_count": 136, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "635 µs ± 9.25 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" ] } ], "source": [ "%timeit poly.fit_transform(trn)" ] }, { "cell_type": "code", "execution_count": 162, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "78.57142857142857" ] }, "execution_count": 162, "metadata": {}, "output_type": "execute_result" } ], "source": [ "605/7.7" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "This is a big deal! Numba is **amazing**! With a single line of code, we are getting a 78x speed-up over scikit learn (which was optimized by experts)." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "## Regularization and noise" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Regularization is a way to reduce over-fitting and create models that better generalize to new data." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "### Regularization" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Lasso regression uses an L1 penalty, which pushes towards sparse coefficients. The parameter $\\alpha$ is used to weight the penalty term. Scikit Learn's LassoCV performs cross validation with a number of different values for $\\alpha$.\n", "\n", "Watch this [Coursera video on Lasso regression](https://www.coursera.org/learn/machine-learning-data-analysis/lecture/0KIy7/what-is-lasso-regression) for more info." ] }, { "cell_type": "code", "execution_count": 163, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "reg_regr = linear_model.LassoCV(n_alphas=10)" ] }, { "cell_type": "code", "execution_count": 164, "metadata": { "hidden": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/jhoward/anaconda3/lib/python3.6/site-packages/sklearn/linear_model/coordinate_descent.py:484: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n" ] }, { "data": { "text/plain": [ "LassoCV(alphas=None, copy_X=True, cv=None, eps=0.001, fit_intercept=True,\n", " max_iter=1000, n_alphas=10, n_jobs=1, normalize=False, positive=False,\n", " precompute='auto', random_state=None, selection='cyclic', tol=0.0001,\n", " verbose=False)" ] }, "execution_count": 164, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reg_regr.fit(trn_feat, y_trn)" ] }, { "cell_type": "code", "execution_count": 165, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "0.0098199431661591518" ] }, "execution_count": 165, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reg_regr.alpha_" ] }, { "cell_type": "code", "execution_count": 166, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(50.0982471642817, 40.065199085003101)" ] }, "execution_count": 166, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regr_metrics(y_test, reg_regr.predict(test_feat))" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "### Noise" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Now we will add some noise to the data" ] }, { "cell_type": "code", "execution_count": 167, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "idxs = np.random.randint(0, len(trn), 10)" ] }, { "cell_type": "code", "execution_count": 168, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "y_trn2 = np.copy(y_trn)\n", "y_trn2[idxs] *= 10 # label noise" ] }, { "cell_type": "code", "execution_count": 169, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(51.1766253181518, 41.415992803872754)" ] }, "execution_count": 169, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regr = linear_model.LinearRegression()\n", "regr.fit(trn, y_trn)\n", "regr_metrics(y_test, regr.predict(test))" ] }, { "cell_type": "code", "execution_count": 170, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(62.66110319520415, 53.21914420254862)" ] }, "execution_count": 170, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regr.fit(trn, y_trn2)\n", "regr_metrics(y_test, regr.predict(test))" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Huber loss is a loss function that is less sensitive to outliers than squared error loss. It is quadratic for small error values, and linear for large values.\n", "\n", " $$L(x)= \n", "\\begin{cases}\n", " \\frac{1}{2}x^2, & \\text{for } \\lvert x\\rvert\\leq \\delta \\\\\n", " \\delta(\\lvert x \\rvert - \\frac{1}{2}\\delta), & \\text{otherwise}\n", "\\end{cases}$$" ] }, { "cell_type": "code", "execution_count": 171, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(51.24055602541746, 41.670840571376822)" ] }, "execution_count": 171, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hregr = linear_model.HuberRegressor()\n", "hregr.fit(trn, y_trn2)\n", "regr_metrics(y_test, hregr.predict(test))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# End" ] } ], "metadata": { "anaconda-cloud": {}, "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.6.1" } }, "nbformat": 4, "nbformat_minor": 1 } ================================================ FILE: nbs/6. How to Implement Linear Regression.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "You can read an overview of this Numerical Linear Algebra course in [this blog post](http://www.fast.ai/2017/07/17/num-lin-alg/). The course was originally taught in the [University of San Francisco MS in Analytics](https://www.usfca.edu/arts-sciences/graduate-programs/analytics) graduate program. Course lecture videos are [available on YouTube](https://www.youtube.com/playlist?list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY) (note that the notebook numbers and video numbers do not line up, since some notebooks took longer than 1 video to cover).\n", "\n", "You can ask questions about the course on [our fast.ai forums](http://forums.fast.ai/c/lin-alg)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 6. How to Implement Linear Regression" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "In the previous lesson, we calculated the least squares linear regression for a diabetes dataset, using scikit learn's implementation. Today, we will look at how we could write our own implementation." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn import datasets, linear_model, metrics\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import PolynomialFeatures\n", "import math, scipy, numpy as np\n", "from scipy import linalg" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.set_printoptions(precision=6)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "data = datasets.load_diabetes()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "feature_names=['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "trn,test,y_trn,y_test = train_test_split(data.data, data.target, test_size=0.2)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((353, 10), (89, 10))" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trn.shape, test.shape" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true, "scrolled": true }, "outputs": [], "source": [ "def regr_metrics(act, pred):\n", " return (math.sqrt(metrics.mean_squared_error(act, pred)), \n", " metrics.mean_absolute_error(act, pred))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### How did sklearn do it?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How is sklearn doing this? By checking [the source code](https://github.com/scikit-learn/scikit-learn/blob/14031f6/sklearn/linear_model/base.py#L417), you can see that in the dense case, it calls [scipy.linalg.lstqr](https://github.com/scipy/scipy/blob/v0.19.0/scipy/linalg/basic.py#L892-L1058), which is calling a LAPACK method:\n", "\n", " Options are ``'gelsd'``, ``'gelsy'``, ``'gelss'``. Default\n", " (``'gelsd'``) is a good choice. However, ``'gelsy'`` can be slightly\n", " faster on many problems. ``'gelss'`` was used historically. It is\n", " generally slow but uses less memory.\n", "\n", "- [gelsd](https://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mkl_lapack_examples/_gelsd.htm): uses SVD and a divide-and-conquer method\n", "- [gelsy](https://software.intel.com/en-us/node/521113): uses QR factorization\n", "- [gelss](https://software.intel.com/en-us/node/521114): uses SVD" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Scipy Sparse Least Squares" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "We will not get into too much detail about the sparse version of least squares. Here is a bit of info if you are interested: " ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "[Scipy sparse lsqr](https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.sparse.linalg.lsqr.html#id1) uses an iterative method called [Golub and Kahan bidiagonalization](https://web.stanford.edu/class/cme324/paige-saunders2.pdf)." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "from [scipy sparse lsqr source code](https://github.com/scipy/scipy/blob/v0.14.0/scipy/sparse/linalg/isolve/lsqr.py#L96):\n", " Preconditioning is another way to reduce the number of iterations. If it is possible to solve a related system ``M*x = b`` efficiently, where M approximates A in some helpful way (e.g. M - A has low rank or its elements are small relative to those of A), LSQR may converge more rapidly on the system ``A*M(inverse)*z = b``, after which x can be recovered by solving M\\*x = z.\n", " \n", "If A is symmetric, LSQR should not be used! Alternatives are the symmetric conjugate-gradient method (cg) and/or SYMMLQ. SYMMLQ is an implementation of symmetric cg that applies to any symmetric A and will converge more rapidly than LSQR. If A is positive definite, there are other implementations of symmetric cg that require slightly less work per iteration than SYMMLQ (but will take the same number of iterations)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### linalg.lstqr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The sklearn implementation handled adding a constant term (since the y-intercept is presumably not 0 for the line we are learning) for us. We will need to do that by hand now:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "trn_int = np.c_[trn, np.ones(trn.shape[0])]\n", "test_int = np.c_[test, np.ones(test.shape[0])]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since `linalg.lstsq` lets us specify which LAPACK routine we want to use, lets try them all and do some timing comparisons:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "290 µs ± 9.24 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" ] } ], "source": [ "%timeit coef, _,_,_ = linalg.lstsq(trn_int, y_trn, lapack_driver=\"gelsd\")" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "140 µs ± 91.7 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n" ] } ], "source": [ "%timeit coef, _,_,_ = linalg.lstsq(trn_int, y_trn, lapack_driver=\"gelsy\")" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "199 µs ± 228 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" ] } ], "source": [ "%timeit coef, _,_,_ = linalg.lstsq(trn_int, y_trn, lapack_driver=\"gelss\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Naive Solution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Recall that we want to find $\\hat{x}$ that minimizes: \n", "$$ \\big\\vert\\big\\vert Ax - b \\big\\vert\\big\\vert_2$$\n", "\n", "Another way to think about this is that we are interested in where vector $b$ is closest to the subspace spanned by $A$ (called the *range of* $A$). This is the projection of $b$ onto $A$. Since $b - A\\hat{x}$ must be perpendicular to the subspace spanned by $A$, we see that\n", "\n", "$$A^T (b - A\\hat{x}) = 0 $$\n", "\n", "(we are using $A^T$ because we want to multiply each column of $A$ by $b - A\\hat{x}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This leads us to the *normal equations*:\n", "$$ x = (A^TA)^{-1}A^T b $$" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def ls_naive(A, b):\n", " return np.linalg.inv(A.T @ A) @ A.T @ b" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "45.8 µs ± 4.65 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n" ] } ], "source": [ "%timeit coeffs_naive = ls_naive(trn_int, y_trn)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(57.94102134545707, 48.053565198516438)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coeffs_naive = ls_naive(trn_int, y_trn)\n", "regr_metrics(y_test, test_int @ coeffs_naive)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Normal Equations (Cholesky)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Normal equations:\n", "$$ A^TA x = A^T b $$\n", "\n", "If $A$ has full rank, the pseudo-inverse $(A^TA)^{-1}A^T$ is a **square, hermitian positive definite** matrix. The standard way of solving such a system is *Cholesky Factorization*, which finds upper-triangular R s.t. $A^TA = R^TR$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following steps are based on Algorithm 11.1 from Trefethen:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "A = trn_int" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "b = y_trn" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "AtA = A.T @ A\n", "Atb = A.T @ b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Warning:** Numpy and Scipy default to different upper/lower for Cholesky" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "R = scipy.linalg.cholesky(AtA)" ] }, { "cell_type": "code", "execution_count": 196, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.9124, 0.1438, 0.1511, 0.3002, 0.2228, 0.188 ,\n", " -0.051 , 0.1746, 0.22 , 0.2768, -0.2583],\n", " [ 0. , 0.8832, 0.0507, 0.1826, -0.0251, 0.0928,\n", " -0.3842, 0.2999, 0.0911, 0.15 , 0.4393],\n", " [ 0. , 0. , 0.8672, 0.2845, 0.2096, 0.2153,\n", " -0.2695, 0.3181, 0.3387, 0.2894, -0.005 ],\n", " [ 0. , 0. , 0. , 0.7678, 0.0762, -0.0077,\n", " 0.0383, 0.0014, 0.165 , 0.166 , 0.0234],\n", " [ 0. , 0. , 0. , 0. , 0.8288, 0.7381,\n", " 0.1145, 0.4067, 0.3494, 0.158 , -0.2826],\n", " [ 0. , 0. , 0. , 0. , 0. , 0.3735,\n", " -0.3891, 0.2492, -0.3245, -0.0323, -0.1137],\n", " [ 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0.6406, -0.511 , -0.5234, -0.172 , -0.9392],\n", " [ 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0.2887, -0.0267, -0.0062, 0.0643],\n", " [ 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0.2823, 0.0636, 0.9355],\n", " [ 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0.7238, 0.0202],\n", " [ 0. , 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 18.7319]])" ] }, "execution_count": 196, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.set_printoptions(suppress=True, precision=4)\n", "R" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "check our factorization:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4.5140158187158533e-16" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.norm(AtA - R.T @ R)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$ A^T A x = A^T b $$\n", "$$ R^T R x = A^T b $$\n", "$$ R^T w = A^T b $$\n", "$$ R x = w $$" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "w = scipy.linalg.solve_triangular(R, Atb, lower=False, trans='T')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's always good to check that our result is what we expect it to be: (in case we entered the wrong params, the function didn't return what we thought, or sometimes the docs are even outdated)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.1368683772161603e-13" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.norm(R.T @ w - Atb)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [], "source": [ "coeffs_chol = scipy.linalg.solve_triangular(R, w, lower=False)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6.861429794408013e-14" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.norm(R @ coeffs_chol - w)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def ls_chol(A, b):\n", " R = scipy.linalg.cholesky(A.T @ A)\n", " w = scipy.linalg.solve_triangular(R, A.T @ b, trans='T')\n", " return scipy.linalg.solve_triangular(R, w)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "111 µs ± 272 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n" ] } ], "source": [ "%timeit coeffs_chol = ls_chol(trn_int, y_trn)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(57.9410213454571, 48.053565198516438)" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coeffs_chol = ls_chol(trn_int, y_trn)\n", "regr_metrics(y_test, test_int @ coeffs_chol)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### QR Factorization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$ A x = b $$\n", "$$ A = Q R $$\n", "$$ Q R x = b $$\n", "\n", "$$ R x = Q^T b $$" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def ls_qr(A,b):\n", " Q, R = scipy.linalg.qr(A, mode='economic')\n", " return scipy.linalg.solve_triangular(R, Q.T @ b)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "205 µs ± 264 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" ] } ], "source": [ "%timeit coeffs_qr = ls_qr(trn_int, y_trn)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(57.94102134545711, 48.053565198516452)" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coeffs_qr = ls_qr(trn_int, y_trn)\n", "regr_metrics(y_test, test_int @ coeffs_qr)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SVD" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$ A x = b $$\n", "\n", "$$ A = U \\Sigma V $$\n", "\n", "$$ \\Sigma V x = U^T b $$\n", "\n", "$$ \\Sigma w = U^T b $$\n", "\n", "$$ x = V^T w $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "SVD gives the pseudo-inverse" ] }, { "cell_type": "code", "execution_count": 253, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def ls_svd(A,b):\n", " m, n = A.shape\n", " U, sigma, Vh = scipy.linalg.svd(A, full_matrices=False, lapack_driver='gesdd')\n", " w = (U.T @ b)/ sigma\n", " return Vh.T @ w" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.11 ms ± 320 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" ] } ], "source": [ "%timeit coeffs_svd = ls_svd(trn_int, y_trn)" ] }, { "cell_type": "code", "execution_count": 254, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "266 µs ± 8.49 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" ] } ], "source": [ "%timeit coeffs_svd = ls_svd(trn_int, y_trn)" ] }, { "cell_type": "code", "execution_count": 255, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(57.941021345457244, 48.053565198516687)" ] }, "execution_count": 255, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coeffs_svd = ls_svd(trn_int, y_trn)\n", "regr_metrics(y_test, test_int @ coeffs_svd)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Random Sketching Technique for Least Squares Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[Linear Sketching](http://researcher.watson.ibm.com/researcher/files/us-dpwoodru/journal.pdf) (Woodruff)\n", "\n", "1. Sample a r x n random matrix S, r << n\n", "2. Compute S A and S b\n", "3. Find exact solution x to regression SA x = Sb" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Timing Comparison" ] }, { "cell_type": "code", "execution_count": 244, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import timeit\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 245, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def scipylstq(A, b):\n", " return scipy.linalg.lstsq(A,b)[0]" ] }, { "cell_type": "code", "execution_count": 246, "metadata": { "collapsed": true }, "outputs": [], "source": [ "row_names = ['Normal Eqns- Naive',\n", " 'Normal Eqns- Cholesky', \n", " 'QR Factorization', \n", " 'SVD', \n", " 'Scipy lstsq']\n", "\n", "name2func = {'Normal Eqns- Naive': 'ls_naive', \n", " 'Normal Eqns- Cholesky': 'ls_chol', \n", " 'QR Factorization': 'ls_qr',\n", " 'SVD': 'ls_svd',\n", " 'Scipy lstsq': 'scipylstq'}" ] }, { "cell_type": "code", "execution_count": 247, "metadata": { "collapsed": true }, "outputs": [], "source": [ "m_array = np.array([100, 1000, 10000])\n", "n_array = np.array([20, 100, 1000])" ] }, { "cell_type": "code", "execution_count": 248, "metadata": { "collapsed": true }, "outputs": [], "source": [ "index = pd.MultiIndex.from_product([m_array, n_array], names=['# rows', '# cols'])" ] }, { "cell_type": "code", "execution_count": 249, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pd.options.display.float_format = '{:,.6f}'.format\n", "df = pd.DataFrame(index=row_names, columns=index)\n", "df_error = pd.DataFrame(index=row_names, columns=index)" ] }, { "cell_type": "code", "execution_count": 256, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# %%prun\n", "for m in m_array:\n", " for n in n_array:\n", " if m >= n: \n", " x = np.random.uniform(-10,10,n)\n", " A = np.random.uniform(-40,40,[m,n]) # removed np.asfortranarray\n", " b = np.matmul(A, x) + np.random.normal(0,2,m)\n", " for name in row_names:\n", " fcn = name2func[name]\n", " t = timeit.timeit(fcn + '(A,b)', number=5, globals=globals())\n", " df.set_value(name, (m,n), t)\n", " coeffs = locals()[fcn](A, b)\n", " reg_met = regr_metrics(b, A @ coeffs)\n", " df_error.set_value(name, (m,n), reg_met[0])" ] }, { "cell_type": "code", "execution_count": 257, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
# rows100100010000
# cols201001000201001000201001000
Normal Eqns- Naive0.0012760.003634NaN0.0009600.0051720.2931260.0022260.0212481.164655
Normal Eqns- Cholesky0.0016600.003958NaN0.0016650.0040070.0936960.0019280.0104560.399464
QR Factorization0.0021740.006486NaN0.0042350.0177730.2132320.0192290.1161222.208129
SVD0.0038800.021737NaN0.0046720.0269501.2804900.0181380.1306523.433003
Scipy lstsq0.0043380.020198NaN0.0043200.0211991.0838040.0122000.0884672.134780
\n", "
" ], "text/plain": [ "# rows 100 1000 \\\n", "# cols 20 100 1000 20 100 1000 \n", "Normal Eqns- Naive 0.001276 0.003634 NaN 0.000960 0.005172 0.293126 \n", "Normal Eqns- Cholesky 0.001660 0.003958 NaN 0.001665 0.004007 0.093696 \n", "QR Factorization 0.002174 0.006486 NaN 0.004235 0.017773 0.213232 \n", "SVD 0.003880 0.021737 NaN 0.004672 0.026950 1.280490 \n", "Scipy lstsq 0.004338 0.020198 NaN 0.004320 0.021199 1.083804 \n", "\n", "# rows 10000 \n", "# cols 20 100 1000 \n", "Normal Eqns- Naive 0.002226 0.021248 1.164655 \n", "Normal Eqns- Cholesky 0.001928 0.010456 0.399464 \n", "QR Factorization 0.019229 0.116122 2.208129 \n", "SVD 0.018138 0.130652 3.433003 \n", "Scipy lstsq 0.012200 0.088467 2.134780 " ] }, "execution_count": 257, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "code", "execution_count": 252, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
# rows100100010000
# cols201001000201001000201001000
Normal Eqns- Naive1.7027420.000000NaN1.9707671.9048730.0000001.9783831.9804491.884440
Normal Eqns- Cholesky1.7027420.000000NaN1.9707671.9048730.0000001.9783831.9804491.884440
QR Factorization1.7027420.000000NaN1.9707671.9048730.0000001.9783831.9804491.884440
SVD1.7027420.000000NaN1.9707671.9048730.0000001.9783831.9804491.884440
Scipy lstsq1.7027420.000000NaN1.9707671.9048730.0000001.9783831.9804491.884440
\n", "
" ], "text/plain": [ "# rows 100 1000 \\\n", "# cols 20 100 1000 20 100 1000 \n", "Normal Eqns- Naive 1.702742 0.000000 NaN 1.970767 1.904873 0.000000 \n", "Normal Eqns- Cholesky 1.702742 0.000000 NaN 1.970767 1.904873 0.000000 \n", "QR Factorization 1.702742 0.000000 NaN 1.970767 1.904873 0.000000 \n", "SVD 1.702742 0.000000 NaN 1.970767 1.904873 0.000000 \n", "Scipy lstsq 1.702742 0.000000 NaN 1.970767 1.904873 0.000000 \n", "\n", "# rows 10000 \n", "# cols 20 100 1000 \n", "Normal Eqns- Naive 1.978383 1.980449 1.884440 \n", "Normal Eqns- Cholesky 1.978383 1.980449 1.884440 \n", "QR Factorization 1.978383 1.980449 1.884440 \n", "SVD 1.978383 1.980449 1.884440 \n", "Scipy lstsq 1.978383 1.980449 1.884440 " ] }, "execution_count": 252, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_error" ] }, { "cell_type": "code", "execution_count": 618, "metadata": { "collapsed": true }, "outputs": [], "source": [ "store = pd.HDFStore('least_squares_results.h5')" ] }, { "cell_type": "code", "execution_count": 619, "metadata": { "collapsed": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\rache\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py:2881: PerformanceWarning: \n", "your performance may suffer as PyTables will pickle object types that it cannot\n", "map directly to c-types [inferred_type->floating,key->block0_values] [items->[(100, 20), (100, 100), (100, 1000), (1000, 20), (1000, 100), (1000, 1000), (5000, 20), (5000, 100), (5000, 1000)]]\n", "\n", " exec(code_obj, self.user_global_ns, self.user_ns)\n" ] } ], "source": [ "store['df'] = df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Notes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I used the magick %prun to profile my code." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternative: least absolute deviation (L1 regression)\n", "- Less sensitive to outliers than least squares.\n", "- No closed form solution, but can solve with linear programming" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "## Conditioning & stability" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Condition Number" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "*Condition number* is a measure of how small changes to the input cause the output to change.\n", "\n", "**Question**: Why do we care about behavior with small changes to the input in numerical linear algebra?" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The *relative condition number* is defined by\n", "\n", "$$ \\kappa = \\sup_{\\delta x} \\frac{\\|\\delta f\\|}{\\| f(x) \\|}\\bigg/ \\frac{\\| \\delta x \\|}{\\| x \\|} $$\n", " \n", "where $\\delta x$ is infinitesimal\n", "\n", "According to Trefethen (pg. 91), a problem is *well-conditioned* if $\\kappa$ is small (e.g. $1$, $10$, $10^2$) and *ill-conditioned* if $\\kappa$ is large (e.g. $10^6$, $10^{16}$)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Conditioning**: perturbation behavior of a mathematical problem (e.g. least squares)\n", "\n", "**Stability**: perturbation behavior of an algorithm used to solve that problem on a computer (e.g. least squares algorithms, householder, back substitution, gaussian elimination)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Conditioning example" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The problem of computing eigenvalues of a non-symmetric matrix is often ill-conditioned" ] }, { "cell_type": "code", "execution_count": 178, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "A = [[1, 1000], [0, 1]]\n", "B = [[1, 1000], [0.001, 1]]" ] }, { "cell_type": "code", "execution_count": 179, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "wA, vrA = scipy.linalg.eig(A)\n", "wB, vrB = scipy.linalg.eig(B)" ] }, { "cell_type": "code", "execution_count": 180, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(array([ 1.+0.j, 1.+0.j]),\n", " array([ 2.00000000e+00+0.j, -2.22044605e-16+0.j]))" ] }, "execution_count": 180, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wA, wB" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Condition Number of a Matrix" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The product $\\| A\\| \\|A^{-1} \\|$ comes up so often it has its own name: the *condition number* of $A$. Note that normally we talk about the conditioning of problems, not matrices.\n", "\n", "The *condition number* of $A$ relates to:\n", "- computing $b$ given $A$ and $x$ in $Ax = b$\n", "- computing $x$ given $A$ and $b$ in $Ax = b$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Loose ends from last time" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Full vs Reduced Factorizations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**SVD**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Diagrams from Trefethen:\n", "\n", "\"\"\n", "\n", "\"\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**QR Factorization exists for ALL matrices**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just like with SVD, there are full and reduced versions of the QR factorization.\n", "\n", "\"\"\n", "\n", "\"\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Matrix Inversion is Unstable" ] }, { "cell_type": "code", "execution_count": 197, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from scipy.linalg import hilbert" ] }, { "cell_type": "code", "execution_count": 229, "metadata": { "collapsed": true }, "outputs": [], "source": [ "n = 14\n", "A = hilbert(n)\n", "x = np.random.uniform(-10,10,n)\n", "b = A @ x" ] }, { "cell_type": "code", "execution_count": 230, "metadata": { "collapsed": true }, "outputs": [], "source": [ "A_inv = np.linalg.inv(A)" ] }, { "cell_type": "code", "execution_count": 233, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5.0516495470543212" ] }, "execution_count": 233, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.norm(np.eye(n) - A @ A_inv)" ] }, { "cell_type": "code", "execution_count": 231, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.2271635826494112e+17" ] }, "execution_count": 231, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.cond(A)" ] }, { "cell_type": "code", "execution_count": 232, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1. , 0. , -0.0001, 0.0005, -0.0006, 0.0105, -0.0243,\n", " 0.1862, -0.6351, 2.2005, -0.8729, 0.8925, -0.0032, -0.0106],\n", " [ 0. , 1. , -0. , 0. , 0.0035, 0.0097, -0.0408,\n", " 0.0773, -0.0524, 1.6926, -0.7776, -0.111 , -0.0403, -0.0184],\n", " [ 0. , 0. , 1. , 0.0002, 0.0017, 0.0127, -0.0273,\n", " 0. , 0. , 1.4688, -0.5312, 0.2812, 0.0117, 0.0264],\n", " [ 0. , 0. , -0. , 1.0005, 0.0013, 0.0098, -0.0225,\n", " 0.1555, -0.0168, 1.1571, -0.9656, -0.0391, 0.018 , -0.0259],\n", " [-0. , 0. , -0. , 0.0007, 1.0001, 0.0154, 0.011 ,\n", " -0.2319, 0.5651, -0.2017, 0.2933, -0.6565, 0.2835, -0.0482],\n", " [ 0. , -0. , 0. , -0.0004, 0.0059, 0.9945, -0.0078,\n", " -0.0018, -0.0066, 1.1839, -0.9919, 0.2144, -0.1866, 0.0187],\n", " [-0. , 0. , -0. , 0.0009, -0.002 , 0.0266, 0.974 ,\n", " -0.146 , 0.1883, -0.2966, 0.4267, -0.8857, 0.2265, -0.0453],\n", " [ 0. , 0. , -0. , 0.0002, 0.0009, 0.0197, -0.0435,\n", " 1.1372, -0.0692, 0.7691, -1.233 , 0.1159, -0.1766, -0.0033],\n", " [ 0. , 0. , -0. , 0.0002, 0. , -0.0018, -0.0136,\n", " 0.1332, 0.945 , 0.3652, -0.2478, -0.1682, 0.0756, -0.0212],\n", " [ 0. , -0. , -0. , 0.0003, 0.0038, -0.0007, 0.0318,\n", " -0.0738, 0.2245, 1.2023, -0.2623, -0.2783, 0.0486, -0.0093],\n", " [-0. , 0. , -0. , 0.0004, -0.0006, 0.013 , -0.0415,\n", " 0.0292, -0.0371, 0.169 , 1.0715, -0.09 , 0.1668, -0.0197],\n", " [ 0. , -0. , 0. , 0. , 0.0016, 0.0062, -0.0504,\n", " 0.1476, -0.2341, 0.8454, -0.7907, 1.4812, -0.15 , 0.0186],\n", " [ 0. , -0. , 0. , -0.0001, 0.0022, 0.0034, -0.0296,\n", " 0.0944, -0.1833, 0.6901, -0.6526, 0.2556, 0.8563, 0.0128],\n", " [ 0. , 0. , 0. , -0.0001, 0.0018, -0.0041, -0.0057,\n", " -0.0374, -0.165 , 0.3968, -0.2264, -0.1538, -0.0076, 1.005 ]])" ] }, "execution_count": 232, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A @ A_inv" ] }, { "cell_type": "code", "execution_count": 237, "metadata": { "collapsed": true }, "outputs": [], "source": [ "row_names = ['Normal Eqns- Naive',\n", " 'QR Factorization', \n", " 'SVD', \n", " 'Scipy lstsq']\n", "\n", "name2func = {'Normal Eqns- Naive': 'ls_naive', \n", " 'QR Factorization': 'ls_qr',\n", " 'SVD': 'ls_svd',\n", " 'Scipy lstsq': 'scipylstq'}" ] }, { "cell_type": "code", "execution_count": 238, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pd.options.display.float_format = '{:,.9f}'.format\n", "df = pd.DataFrame(index=row_names, columns=['Time', 'Error'])" ] }, { "cell_type": "code", "execution_count": 239, "metadata": { "collapsed": true }, "outputs": [], "source": [ "for name in row_names:\n", " fcn = name2func[name]\n", " t = timeit.timeit(fcn + '(A,b)', number=5, globals=globals())\n", " coeffs = locals()[fcn](A, b)\n", " df.set_value(name, 'Time', t)\n", " df.set_value(name, 'Error', regr_metrics(b, A @ coeffs)[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### SVD is best here!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "DO NOT RERUN" ] }, { "cell_type": "code", "execution_count": 240, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimeError
Normal Eqns- Naive0.0013343393.598901966
QR Factorization0.0021661390.000000000
SVD0.0015569370.000000000
Scipy lstsq0.0018715900.000000000
\n", "
" ], "text/plain": [ " Time Error\n", "Normal Eqns- Naive 0.001334339 3.598901966\n", "QR Factorization 0.002166139 0.000000000\n", "SVD 0.001556937 0.000000000\n", "Scipy lstsq 0.001871590 0.000000000" ] }, "execution_count": 240, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "code", "execution_count": 240, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimeError
Normal Eqns- Naive0.0013343393.598901966
QR Factorization0.0021661390.000000000
SVD0.0015569370.000000000
Scipy lstsq0.0018715900.000000000
\n", "
" ], "text/plain": [ " Time Error\n", "Normal Eqns- Naive 0.001334339 3.598901966\n", "QR Factorization 0.002166139 0.000000000\n", "SVD 0.001556937 0.000000000\n", "Scipy lstsq 0.001871590 0.000000000" ] }, "execution_count": 240, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Another reason not to take inverse**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Even if $A$ is incredibly sparse, $A^{-1}$ is generally dense. For large matrices, $A^{-1}$ could be so dense as to not fit in memory." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Runtime" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Matrix Inversion: $2n^3$\n", "\n", "Matrix Multiplication: $n^3$\n", "\n", "Cholesky: $\\frac{1}{3}n^3$\n", "\n", "QR, Gram Schmidt: $2mn^2$, $m\\geq n$ (chapter 8 of Trefethen)\n", "\n", "QR, Householder: $2mn^2 - \\frac{2}{3}n^3$ (chapter 10 of Trefethen)\n", "\n", "Solving a triangular system: $n^2$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Why Cholesky Factorization is Fast:**\n", "\n", "\"\"\n", "(source: [Stanford Convex Optimization: Numerical Linear Algebra Background Slides](http://stanford.edu/class/ee364a/lectures/num-lin-alg.pdf))" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### A Case Where QR is the Best" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "m=100\n", "n=15\n", "t=np.linspace(0, 1, m)" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "# Vandermonde matrix\n", "A=np.stack([t**i for i in range(n)], 1)" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "b=np.exp(np.sin(4*t))\n", "\n", "# This will turn out to normalize the solution to be 1\n", "b /= 2006.787453080206" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "from matplotlib import pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(t, b)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Check that we get 1:" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "1.4137685733217609e-07" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 - ls_qr(A, b)[14]" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Bad condition number:" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "5.827807196683593e+17" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "kappa = np.linalg.cond(A); kappa" ] }, { "cell_type": "code", "execution_count": 181, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "row_names = ['Normal Eqns- Naive',\n", " 'QR Factorization', \n", " 'SVD', \n", " 'Scipy lstsq']\n", "\n", "name2func = {'Normal Eqns- Naive': 'ls_naive', \n", " 'QR Factorization': 'ls_qr',\n", " 'SVD': 'ls_svd',\n", " 'Scipy lstsq': 'scipylstq'}" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "pd.options.display.float_format = '{:,.9f}'.format\n", "df = pd.DataFrame(index=row_names, columns=['Time', 'Error'])" ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "for name in row_names:\n", " fcn = name2func[name]\n", " t = timeit.timeit(fcn + '(A,b)', number=5, globals=globals())\n", " coeffs = locals()[fcn](A, b)\n", " df.set_value(name, 'Time', t)\n", " df.set_value(name, 'Error', np.abs(1 - coeffs[-1]))" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "hidden": true, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimeError
Normal Eqns- Naive0.0015650991.357066025
QR Factorization0.0026321040.000000116
SVD0.0035037850.000000116
Scipy lstsq0.0027635020.000000116
\n", "
" ], "text/plain": [ " Time Error\n", "Normal Eqns- Naive 0.001565099 1.357066025\n", "QR Factorization 0.002632104 0.000000116\n", "SVD 0.003503785 0.000000116\n", "Scipy lstsq 0.002763502 0.000000116" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "\n", "The solution for least squares via the normal equations is unstable in general, although stable for problems with small condition numbers." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Low-rank" ] }, { "cell_type": "code", "execution_count": 258, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "m = 100\n", "n = 10\n", "x = np.random.uniform(-10,10,n)\n", "A2 = np.random.uniform(-40,40, [m, int(n/2)]) # removed np.asfortranarray\n", "A = np.hstack([A2, A2])" ] }, { "cell_type": "code", "execution_count": 259, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "((100, 10), (100, 5))" ] }, "execution_count": 259, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.shape, A2.shape" ] }, { "cell_type": "code", "execution_count": 260, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "b = A @ x + np.random.normal(0,1,m)" ] }, { "cell_type": "code", "execution_count": 263, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "row_names = ['Normal Eqns- Naive',\n", " 'QR Factorization', \n", " 'SVD', \n", " 'Scipy lstsq']\n", "\n", "name2func = {'Normal Eqns- Naive': 'ls_naive', \n", " 'QR Factorization': 'ls_qr',\n", " 'SVD': 'ls_svd',\n", " 'Scipy lstsq': 'scipylstq'}" ] }, { "cell_type": "code", "execution_count": 264, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "pd.options.display.float_format = '{:,.9f}'.format\n", "df = pd.DataFrame(index=row_names, columns=['Time', 'Error'])" ] }, { "cell_type": "code", "execution_count": 265, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "for name in row_names:\n", " fcn = name2func[name]\n", " t = timeit.timeit(fcn + '(A,b)', number=5, globals=globals())\n", " coeffs = locals()[fcn](A, b)\n", " df.set_value(name, 'Time', t)\n", " df.set_value(name, 'Error', regr_metrics(b, A @ coeffs)[0])" ] }, { "cell_type": "code", "execution_count": 266, "metadata": { "hidden": true, "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimeError
Normal Eqns- Naive0.001227640300.658979382
QR Factorization0.0023159200.876019803
SVD0.0017456471.584746056
Scipy lstsq0.0020679890.804750398
\n", "
" ], "text/plain": [ " Time Error\n", "Normal Eqns- Naive 0.001227640 300.658979382\n", "QR Factorization 0.002315920 0.876019803\n", "SVD 0.001745647 1.584746056\n", "Scipy lstsq 0.002067989 0.804750398" ] }, "execution_count": 266, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Comparison" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our results from above:" ] }, { "cell_type": "code", "execution_count": 257, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
# rows100100010000
# cols201001000201001000201001000
Normal Eqns- Naive0.0012760.003634NaN0.0009600.0051720.2931260.0022260.0212481.164655
Normal Eqns- Cholesky0.0016600.003958NaN0.0016650.0040070.0936960.0019280.0104560.399464
QR Factorization0.0021740.006486NaN0.0042350.0177730.2132320.0192290.1161222.208129
SVD0.0038800.021737NaN0.0046720.0269501.2804900.0181380.1306523.433003
Scipy lstsq0.0043380.020198NaN0.0043200.0211991.0838040.0122000.0884672.134780
\n", "
" ], "text/plain": [ "# rows 100 1000 \\\n", "# cols 20 100 1000 20 100 1000 \n", "Normal Eqns- Naive 0.001276 0.003634 NaN 0.000960 0.005172 0.293126 \n", "Normal Eqns- Cholesky 0.001660 0.003958 NaN 0.001665 0.004007 0.093696 \n", "QR Factorization 0.002174 0.006486 NaN 0.004235 0.017773 0.213232 \n", "SVD 0.003880 0.021737 NaN 0.004672 0.026950 1.280490 \n", "Scipy lstsq 0.004338 0.020198 NaN 0.004320 0.021199 1.083804 \n", "\n", "# rows 10000 \n", "# cols 20 100 1000 \n", "Normal Eqns- Naive 0.002226 0.021248 1.164655 \n", "Normal Eqns- Cholesky 0.001928 0.010456 0.399464 \n", "QR Factorization 0.019229 0.116122 2.208129 \n", "SVD 0.018138 0.130652 3.433003 \n", "Scipy lstsq 0.012200 0.088467 2.134780 " ] }, "execution_count": 257, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From Trefethen (page 84):\n", "\n", "Normal equations/Cholesky is fastest when it works. Cholesky can only be used on symmetric, positive definite matrices. Also, normal equations/Cholesky is unstable for matrices with high condition numbers or with low-rank.\n", "\n", "Linear regression via QR has been recommended by numerical analysts as the standard method for years. It is natural, elegant, and good for \"daily use\"." ] } ], "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: nbs/7. PageRank with Eigen Decompositions.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "You can read an overview of this Numerical Linear Algebra course in [this blog post](http://www.fast.ai/2017/07/17/num-lin-alg/). The course was originally taught in the [University of San Francisco MS in Analytics](https://www.usfca.edu/arts-sciences/graduate-programs/analytics) graduate program. Course lecture videos are [available on YouTube](https://www.youtube.com/playlist?list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY) (note that the notebook numbers and video numbers do not line up, since some notebooks took longer than 1 video to cover).\n", "\n", "You can ask questions about the course on [our fast.ai forums](http://forums.fast.ai/c/lin-alg)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 7. PageRank with Eigen Decompositions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Two Handy Tricks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are two tools that we'll be using today, which are useful in general." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1\\. [Psutil](https://github.com/giampaolo/psutil) is a great way to check on your memory usage. This will be useful here since we are using a larger data set." ] }, { "cell_type": "code", "execution_count": 462, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import psutil" ] }, { "cell_type": "code", "execution_count": 447, "metadata": { "collapsed": true }, "outputs": [], "source": [ "process = psutil.Process(os.getpid())\n", "t = process.memory_info()" ] }, { "cell_type": "code", "execution_count": 449, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(19475513344, 17856520192)" ] }, "execution_count": 449, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t.vms, t.rss" ] }, { "cell_type": "code", "execution_count": 450, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def mem_usage():\n", " process = psutil.Process(os.getpid())\n", " return process.memory_info().rss / psutil.virtual_memory().total" ] }, { "cell_type": "code", "execution_count": 451, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.13217061955758594" ] }, "execution_count": 451, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mem_usage()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2\\. [TQDM](https://github.com/tqdm/tqdm) gives you progress bars." ] }, { "cell_type": "code", "execution_count": 364, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from time import sleep" ] }, { "cell_type": "code", "execution_count": 463, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "45\n" ] } ], "source": [ "# Without TQDM\n", "s = 0\n", "for i in range(10):\n", " s += i\n", " sleep(0.2)\n", "print(s)" ] }, { "cell_type": "code", "execution_count": 465, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 10/10 [00:02<00:00, 4.96it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "45\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "# With TQDM\n", "from tqdm import tqdm\n", "\n", "s = 0\n", "for i in tqdm(range(10)):\n", " s += i\n", " sleep(0.2)\n", "print(s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Motivation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Review**\n", "- What is SVD?\n", "- What are some applications of SVD?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Additional SVD Application" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An interesting use of SVD that I recently came across was as a step in the de-biasing of Word2Vec word embeddings, from [Quantifying and Reducing Stereotypes in Word Embeddings](https://arxiv.org/pdf/1606.06121.pdf)(Bolukbasi, et al).\n", "\n", "Word2Vec is a useful library released by Google that represents words as vectors. The similarity of vectors captures semantic meaning, and analogies can be found, such as *Paris:France :: Tokyo: Japan*. \n", "\n", "\"\"\n", "(source: [Vector Representations of Words](https://www.tensorflow.org/versions/r0.10/tutorials/word2vec/))\n", "\n", "However, these embeddings can implicitly encode bias, such as *father:doctor :: mother:nurse* and *man:computer programmer :: woman:homemaker*.\n", "\n", "One approach for de-biasing the space involves using SVD to reduce the dimensionality ([Bolukbasi paper](https://arxiv.org/pdf/1606.06121.pdf)).\n", "\n", "You can read more about bias in word embeddings:\n", "- [How Vector Space Mathematics Reveals the Hidden Sexism in Language](https://www.technologyreview.com/s/602025/how-vector-space-mathematics-reveals-the-hidden-sexism-in-language/)(MIT Tech Review)\n", "- [ConceptNet: better, less-stereotyped word vectors](https://blog.conceptnet.io/2017/04/24/conceptnet-numberbatch-17-04-better-less-stereotyped-word-vectors/)\n", "- [Semantics derived automatically from language corpora necessarily contain human biases](https://www.princeton.edu/~aylinc/papers/caliskan-islam_semantics.pdf) (excellent and very interesting paper!)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ways to think about SVD" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Data compression\n", "- SVD trades a large number of features for a smaller set of better features\n", "- All matrices are diagonal (if you use change of bases on the domain and range)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Perspectives on SVD" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We usually talk about SVD in terms of matrices, $$A = U \\Sigma V^T$$ but we can also think about it in terms of vectors. SVD gives us sets of orthonormal vectors ${v_j}$ and ${u_j}$ such that $$ A v_j = \\sigma_j u_j $$\n", "\n", "$\\sigma_j$ are scalars, called singular values\n", "\n", "**Q**: Does this remind you of anything?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Answer" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Relationship between SVD and Eigen Decomposition**: the left-singular vectors of A are the eigenvectors of $AA^T$. The right-singular vectors of A are the eigenvectors of $A^T A$. The non-zero singular values of A are the square roots of the eigenvalues of $A^T A$ (and $A A^T$).\n", "\n", "SVD is a generalization of eigen decomposition. Not all matrices have eigen values, but ALL matrices have singular values.\n", "\n", "Let's forget SVD for a bit and talk about how to find the eigenvalues of a symmetric positive definite matrix..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Further resources on SVD" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- [SVD: image compression and least squares](http://andrew.gibiansky.com/blog/mathematics/cool-linear-algebra-singular-value-decomposition/)\n", "\n", "- [Image Compression with SVD](http://nbviewer.jupyter.org/gist/frankcleary/4d2bd178708503b556b0)\n", "\n", "- [The Extraordinary SVD](https://sites.math.washington.edu/~morrow/498_13/svd_applied.pdf)\n", "\n", "- [A Singularly Valuable Decomposition: The SVD of a Matrix](https://sites.math.washington.edu/~morrow/498_13/svd.pdf)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Today: Eigen Decomposition" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The best classical methods for computing the SVD are variants on methods for computing eigenvalues. In addition to their links to SVD, Eigen decompositions are useful on their own as well. Here are a few practical applications of eigen decomposition:\n", "- [rapid matrix powers](http://www.onmyphd.com/?p=eigen.decomposition#h2_why)\n", "- [nth Fibonacci number](http://mathproofs.blogspot.com/2005/04/nth-term-of-fibonacci-sequence.html)\n", "- Behavior of ODEs\n", "- Markov Chains (health care economics, Page Rank)\n", "- [Linear Discriminant Analysis on Iris dataset](http://sebastianraschka.com/Articles/2014_python_lda.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check out the 3 Blue 1 Brown videos on [Change of basis](https://www.youtube.com/watch?v=P2LTAUO1TdA) and [Eigenvalues and eigenvectors](https://www.youtube.com/watch?v=PFDu9oVAE-g)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"Eigenvalues are a way to see into the heart of a matrix... All the difficulties of matrices are swept away\" -Strang " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Vocab**: A **Hermitian** matrix is one that is equal to it's own conjugate transpose. In the case of real-valued matrices (which is all we are considering in this course), **Hermitian** means the same as **Symmetric**.\n", "\n", "**Relevant Theorems:**\n", "- If A is symmetric, then eigenvalues of A are real and $A = Q \\Lambda Q^T$\n", "- If A is triangular, then its eigenvalues are equal to its diagonal entries" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DBpedia Dataset" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's start with the **Power Method**, which finds one eigenvector. *What good is just one eigenvector?* you may be wondering. This is actually the basis for PageRank (read [The $25,000,000,000 Eigenvector: the Linear Algebra Behind Google](http://www.rose-hulman.edu/~bryan/googleFinalVersionFixed.pdf) for more info)\n", "\n", "Instead of trying to rank the importance of all websites on the internet, we are going to use a dataset of Wikipedia links from [DBpedia](http://wiki.dbpedia.org/). DBpedia provides structured Wikipedia data available in 125 languages. \n", "\n", "\"*The full DBpedia data set features 38 million labels and abstracts in 125 different languages, 25.2 million links to images and 29.8 million links to external web pages; 80.9 million links to Wikipedia categories, and 41.2 million links to [YAGO](http://www.mpi-inf.mpg.de/departments/databases-and-information-systems/research/yago-naga/yago/) categories*\" --[about DBpedia](http://wiki.dbpedia.org/about)\n", "\n", "Today's lesson is inspired by this [SciKit Learn Example](http://scikit-learn.org/stable/auto_examples/applications/wikipedia_principal_eigenvector.html#sphx-glr-auto-examples-applications-wikipedia-principal-eigenvector-py)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Imports" ] }, { "cell_type": "code", "execution_count": 361, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import os, numpy as np, pickle\n", "from bz2 import BZ2File\n", "from datetime import datetime\n", "from pprint import pprint\n", "from time import time\n", "from tqdm import tqdm_notebook\n", "from scipy import sparse\n", "\n", "from sklearn.decomposition import randomized_svd\n", "from sklearn.externals.joblib import Memory\n", "from urllib.request import urlopen" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Downloading the data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The data we have are:\n", "- **redirects**: URLs that redirect to other URLs\n", "- **links**: which pages link to which other pages" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note: this takes a while" ] }, { "cell_type": "code", "execution_count": 367, "metadata": { "collapsed": true }, "outputs": [], "source": [ "PATH = 'data/dbpedia/'\n", "URL_BASE = 'http://downloads.dbpedia.org/3.5.1/en/'\n", "filenames = [\"redirects_en.nt.bz2\", \"page_links_en.nt.bz2\"]\n", "\n", "for filename in filenames:\n", " if not os.path.exists(PATH+filename):\n", " print(\"Downloading '%s', please wait...\" % filename)\n", " open(PATH+filename, 'wb').write(urlopen(URL_BASE+filename).read())" ] }, { "cell_type": "code", "execution_count": 368, "metadata": { "collapsed": true }, "outputs": [], "source": [ "redirects_filename = PATH+filenames[0]\n", "page_links_filename = PATH+filenames[1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Graph Adjacency Matrix" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will construct a graph **adjacency matrix**, of which pages point to which.\n", "\n", "\"\"\n", "(source: [PageRank and HyperLink Induced Topic Search](https://www.slideshare.net/priyabrata232/page-rank-and-hyperlink))\n", "\n", "\"\"\n", "(source: [PageRank and HyperLink Induced Topic Search](https://www.slideshare.net/priyabrata232/page-rank-and-hyperlink))\n", "\n", "The power $A^2$ will give you how many ways there are to get from one page to another in 2 steps. You can see a more detailed example, as applied to airline travel, [worked out in these notes](http://www.utdallas.edu/~jwz120030/Teaching/PastCoursesUMBC/M221HS06/ProjectFiles/Adjacency.pdf)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We want to keep track of which pages point to which pages. We will store this in a square matrix, with a $1$ in position $(r, c)$ indicating that the topic in row $r$ points to the topic in column $c$\n", "\n", "You can read [more about graphs here](http://www.geeksforgeeks.org/graph-and-its-representations/)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Data Format" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One line of the file looks like:\n", "- ` .`\n", "\n", "In the below slice, the plus 1, -1 are to remove the <>" ] }, { "cell_type": "code", "execution_count": 369, "metadata": { "collapsed": true }, "outputs": [], "source": [ "DBPEDIA_RESOURCE_PREFIX_LEN = len(\"http://dbpedia.org/resource/\")\n", "SLICE = slice(DBPEDIA_RESOURCE_PREFIX_LEN + 1, -1)" ] }, { "cell_type": "code", "execution_count": 370, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def get_lines(filename): return (line.split() for line in BZ2File(filename))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Loop through redirections and create dictionary of source to final destination" ] }, { "cell_type": "code", "execution_count": 371, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def get_redirect(targ, redirects):\n", " seen = set()\n", " while True:\n", " transitive_targ = targ\n", " targ = redirects.get(targ)\n", " if targ is None or targ in seen: break\n", " seen.add(targ)\n", " return transitive_targ" ] }, { "cell_type": "code", "execution_count": 372, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def get_redirects(redirects_filename):\n", " redirects={}\n", " lines = get_lines(redirects_filename)\n", " return {src[SLICE]:get_redirect(targ[SLICE], redirects) \n", " for src,_,targ,_ in tqdm_notebook(lines, leave=False)}" ] }, { "cell_type": "code", "execution_count": 373, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "4e6fbe6a61b84503ba29df3be06a9c77" } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\r" ] } ], "source": [ "redirects = get_redirects(redirects_filename)" ] }, { "cell_type": "code", "execution_count": 374, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "13.766303744" ] }, "execution_count": 374, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mem_usage()" ] }, { "cell_type": "code", "execution_count": 375, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def add_item(lst, redirects, index_map, item):\n", " k = item[SLICE]\n", " lst.append(index_map.setdefault(redirects.get(k, k), len(index_map)))" ] }, { "cell_type": "code", "execution_count": 376, "metadata": { "collapsed": true }, "outputs": [], "source": [ "limit=119077682 #5000000" ] }, { "cell_type": "code", "execution_count": 377, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "912599a04ead440ba016131b73398e1b" } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "# Computing the integer index map\n", "index_map = dict() # links->IDs\n", "lines = get_lines(page_links_filename)\n", "source, destination, data = [],[],[]\n", "for l, split in tqdm_notebook(enumerate(lines), total=limit):\n", " if l >= limit: break\n", " add_item(source, redirects, index_map, split[0])\n", " add_item(destination, redirects, index_map, split[2])\n", " data.append(1)" ] }, { "cell_type": "code", "execution_count": 379, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "119077682" ] }, "execution_count": 379, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n=len(data); n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Looking at our data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The below steps are just to illustrate what info is in our data and how it is structured. They are not efficient." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see what type of items are in index_map:" ] }, { "cell_type": "code", "execution_count": 425, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(b'1940_Cincinnati_Reds_Team_Issue', 9991173)" ] }, "execution_count": 425, "metadata": {}, "output_type": "execute_result" } ], "source": [ "index_map.popitem()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look at one item in our index map:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1940_Cincinnati_Reds_Team_Issue has index $9991173$. This only shows up once in the destination list:" ] }, { "cell_type": "code", "execution_count": 427, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[119077649]" ] }, "execution_count": 427, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[i for i,x in enumerate(source) if x == 9991173]" ] }, { "cell_type": "code", "execution_count": 428, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(9991173, 9991050)" ] }, "execution_count": 428, "metadata": {}, "output_type": "execute_result" } ], "source": [ "source[119077649], destination[119077649]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we want to check which page is the source (has index $9991050$). Note: usually you should not access a dictionary by searching for its values. This is inefficient and not how dictionaries are intended to be used." ] }, { "cell_type": "code", "execution_count": 429, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "b'W711-2'\n" ] } ], "source": [ "for page_name, index in index_map.items():\n", " if index == 9991050:\n", " print(page_name)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see on Wikipedia that the Cincinati Red Teams Issue has [redirected to W711-2](https://en.wikipedia.org/wiki/W711-2):\n", "\n", "\"\"" ] }, { "cell_type": "code", "execution_count": 431, "metadata": { "collapsed": true }, "outputs": [], "source": [ "test_inds = [i for i,x in enumerate(source) if x == 9991050]" ] }, { "cell_type": "code", "execution_count": 466, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "47" ] }, "execution_count": 466, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(test_inds)" ] }, { "cell_type": "code", "execution_count": 433, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[119076756, 119076757, 119076758, 119076759, 119076760]" ] }, "execution_count": 433, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_inds[:5]" ] }, { "cell_type": "code", "execution_count": 434, "metadata": { "collapsed": true }, "outputs": [], "source": [ "test_dests = [destination[i] for i in test_inds]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we want to check which page is the source (has index 9991174):" ] }, { "cell_type": "code", "execution_count": 435, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "b'Baseball'\n", "b'Ohio'\n", "b'Cincinnati'\n", "b'Flash_Thompson'\n", "b'1940'\n", "b'1938'\n", "b'Lonny_Frey'\n", "b'Cincinnati_Reds'\n", "b'Ernie_Lombardi'\n", "b'Baseball_card'\n", "b'James_Wilson'\n", "b'Trading_card'\n", "b'Detroit_Tigers'\n", "b'Baseball_culture'\n", "b'Frank_McCormick'\n", "b'Bucky_Walters'\n", "b'1940_World_Series'\n", "b'Billy_Werber'\n", "b'Ival_Goodman'\n", "b'Harry_Craft'\n", "b'Paul_Derringer'\n", "b'Johnny_Vander_Meer'\n", "b'Cigarette_card'\n", "b'Eddie_Joost'\n", "b'Myron_McCormick'\n", "b'Beckett_Media'\n", "b'Icarus_affair'\n", "b'Ephemera'\n", "b'Sports_card'\n", "b'James_Turner'\n", "b'Jimmy_Ripple'\n", "b'Lewis_Riggs'\n", "b'The_American_Card_Catalog'\n", "b'Rookie_card'\n", "b'Willard_Hershberger'\n", "b'Elmer_Riddle'\n", "b'Joseph_Beggs'\n", "b'Witt_Guise'\n", "b'Milburn_Shoffner'\n" ] } ], "source": [ "for page_name, index in index_map.items():\n", " if index in test_dests:\n", " print(page_name)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see that the items in the list appear in the wikipedia page:\n", "\n", "\"\"\n", "(Source: [Wikipedia](https://en.wikipedia.org/wiki/W711-2))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create Matrix" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Below we create a sparse matrix using Scipy's COO format, and that convert it to CSR.\n", "\n", "**Questions**: What are COO and CSR? Why would we create it with COO and then convert it right away?" ] }, { "cell_type": "code", "execution_count": 341, "metadata": { "collapsed": true }, "outputs": [], "source": [ "X = sparse.coo_matrix((data, (destination,source)), shape=(n,n), dtype=np.float32)\n", "X = X.tocsr()" ] }, { "cell_type": "code", "execution_count": 347, "metadata": { "collapsed": true }, "outputs": [], "source": [ "del(data,destination, source)" ] }, { "cell_type": "code", "execution_count": 342, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<119077682x119077682 sparse matrix of type ''\n", "\twith 93985520 stored elements in Compressed Sparse Row format>" ] }, "execution_count": 342, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X" ] }, { "cell_type": "code", "execution_count": 343, "metadata": { "collapsed": true }, "outputs": [], "source": [ "names = {i: name for name, i in index_map.items()}" ] }, { "cell_type": "code", "execution_count": 349, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "12.903882752" ] }, "execution_count": 349, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mem_usage()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Save matrix so we don't have to recompute" ] }, { "cell_type": "code", "execution_count": 350, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pickle.dump(X, open(PATH+'X.pkl', 'wb'))\n", "pickle.dump(index_map, open(PATH+'index_map.pkl', 'wb'))" ] }, { "cell_type": "code", "execution_count": 316, "metadata": { "collapsed": true }, "outputs": [], "source": [ "X = pickle.load(open(PATH+'X.pkl', 'rb'))\n", "index_map = pickle.load(open(PATH+'index_map.pkl', 'rb'))" ] }, { "cell_type": "code", "execution_count": 317, "metadata": { "collapsed": true }, "outputs": [], "source": [ "names = {i: name for name, i in index_map.items()}" ] }, { "cell_type": "code", "execution_count": 351, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<119077682x119077682 sparse matrix of type ''\n", "\twith 93985520 stored elements in Compressed Sparse Row format>" ] }, "execution_count": 351, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Power method" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Motivation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An $n \\times n$ matrix $A$ is **diagonalizable** if it has $n$ linearly independent eigenvectors $v_1,\\, \\ldots v_n$.\n", "\n", "Then any $w$ can be expressed $w = \\sum_{j=1}^n c_j v_j $, for some scalars $c_j$.\n", "\n", "**Exercise:** Show that $$ A^k w = \\sum_{j=1}^n c_j \\lambda_j^k v_j$$\n", "\n", "**Question**: How will this behave for large $k$?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is inspiration for the **power method**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code" ] }, { "cell_type": "code", "execution_count": 281, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def show_ex(v):\n", " print(', '.join(names[i].decode() for i in np.abs(v.squeeze()).argsort()[-1:-10:-1]))" ] }, { "cell_type": "code", "execution_count": 453, "metadata": { "collapsed": true }, "outputs": [], "source": [ "?np.squeeze" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How to normalize a sparse matrix:" ] }, { "cell_type": "code", "execution_count": 336, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([4, 6], dtype=int64)" ] }, "execution_count": 336, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S = sparse.csr_matrix(np.array([[1,2],[3,4]]))\n", "Sr = S.sum(axis=0).A1; Sr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[numpy.matrix.A1](https://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.A1.html#numpy.matrix.A1)" ] }, { "cell_type": "code", "execution_count": 337, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 0, 1], dtype=int32)" ] }, "execution_count": 337, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S.indices" ] }, { "cell_type": "code", "execution_count": 338, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3, 4], dtype=int64)" ] }, "execution_count": 338, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S.data" ] }, { "cell_type": "code", "execution_count": 339, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.25 , 0.33333, 0.75 , 0.66667])" ] }, "execution_count": 339, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S.data / np.take(Sr, S.indices)" ] }, { "cell_type": "code", "execution_count": 328, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def power_method(A, max_iter=100):\n", " n = A.shape[1]\n", " A = np.copy(A)\n", " A.data /= np.take(A.sum(axis=0).A1, A.indices)\n", "\n", " scores = np.ones(n, dtype=np.float32) * np.sqrt(A.sum()/(n*n)) # initial guess\n", " for i in range(max_iter):\n", " scores = A @ scores\n", " nrm = np.linalg.norm(scores)\n", " scores /= nrm\n", " print(nrm)\n", "\n", " return scores" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Question**: Why normalize the scores on each iteration?" ] }, { "cell_type": "code", "execution_count": 345, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.621209\n", "0.856139\n", "1.02793\n", "1.02029\n", "1.02645\n", "1.02504\n", "1.02364\n", "1.02126\n", "1.019\n", "1.01679\n" ] } ], "source": [ "scores = power_method(X, max_iter=10)" ] }, { "cell_type": "code", "execution_count": 346, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Living_people, Year_of_birth_missing_%28living_people%29, United_States, United_Kingdom, Race_and_ethnicity_in_the_United_States_Census, France, Year_of_birth_missing, World_War_II, Germany\n" ] } ], "source": [ "show_ex(scores)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 327, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "11.692331008" ] }, "execution_count": 327, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mem_usage()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Comments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Many advanced eigenvalue algorithms that are used in practice are variations on the power method.\n", "\n", "In Lesson 3: Background Removal, we used Facebook's [fast randomized pca/svd library, fbpca](https://github.com/facebook/fbpca). Check out [the source code](https://github.com/facebook/fbpca/blob/master/fbpca.py#L1549) for the pca method we used. It uses the power method!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Further Study**\n", "\n", "- Check out [Google Page Rank, Power Iteration and the Second EigenValue of the Google Matrix](http://rstudio-pubs-static.s3.amazonaws.com/239261_8a607707294341c4b7e26acf728c28bd.html) for animations of the distribution as it converges.\n", "\n", "- The convergence rate of the power method is the ratio of the largest eigenvalue to the 2nd largest eigenvalue. It can be speeded up by adding *shifts*. To find eigenvalues other than the largest, a method called *deflation* can be used. See Chapter 12.1 of Greenbaum & Chartier for more details.\n", "\n", "- *Krylov Subspaces*: In the Power Iteration, notice that we multiply by our matrix A each time, effectively calculating $$Ab,\\,A^2b,\\,A^3b,\\,A^4b\\, \\ldots$$\n", " \n", " The matrix with those vectors as columns is called the *Krylov matrix*, and the space spanned by those vectors is the *Krylov subspace*. Keep this in mind for later." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Compare to SVD" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 8min 40s, sys: 1min 20s, total: 10min 1s\n", "Wall time: 5min 56s\n" ] } ], "source": [ "%time U, s, V = randomized_svd(X, 3, n_iter=3)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "28.353073152" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mem_usage()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "List_of_World_War_II_air_aces, List_of_animated_feature-length_films, List_of_animated_feature_films:2000s, International_Swimming_Hall_of_Fame, List_of_museum_ships, List_of_linguists, List_of_television_programs_by_episode_count, List_of_game_show_hosts, List_of_astronomers\n" ] } ], "source": [ "# Top wikipedia pages according to principal singular vectors\n", "show_ex(U.T[0])" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "List_of_former_United_States_senators, List_of_United_States_Representatives_from_New_York, List_of_United_States_Representatives_from_Pennsylvania, Members_of_the_110th_United_States_Congress, List_of_Justices_of_the_Ohio_Supreme_Court, Congressional_endorsements_for_the_2008_United_States_presidential_election, List_of_United_States_Representatives_in_the_110th_Congress_by_seniority, List_of_Members_of_the_United_States_House_of_Representatives_in_the_103rd_Congress_by_seniority, List_of_United_States_Representatives_in_the_111th_Congress_by_seniority\n" ] } ], "source": [ "show_ex(U.T[1])" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "hidden": true, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "United_States, Japan, United_Kingdom, Germany, Race_and_ethnicity_in_the_United_States_Census, France, United_States_Army_Air_Forces, Australia, Canada\n" ] } ], "source": [ "show_ex(V[0])" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "hidden": true, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Democratic_Party_%28United_States%29, Republican_Party_%28United_States%29, Democratic-Republican_Party, United_States, Whig_Party_%28United_States%29, Federalist_Party, National_Republican_Party, Catholic_Church, Jacksonian_democracy\n" ] } ], "source": [ "show_ex(V[1])" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Exercise:** Normalize the data in various ways. Don't overwrite the adjacency matrix, but instead create a new one. See how your results differ." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Eigen Decomposition vs SVD:**\n", "- SVD involves 2 bases, eigen decomposition involves 1 basis\n", "- SVD bases are orthonormal, eigen basis generally not orthogonal\n", "- All matrices have an SVD, not all matrices (not even all square) have an eigen decomposition" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## QR Algorithm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We used the power method to find the eigenvector corresponding to the largest eigenvalue of our matrix of Wikipedia links. This eigenvector gave us the relative importance of each Wikipedia page (like a simplified PageRank).\n", "\n", "Next, let's look at a method for finding all eigenvalues of a symmetric, positive definite matrix. This method includes 2 fundamental algorithms in numerical linear algebra, and is a basis for many more complex methods.\n", "\n", "[The Second Eigenvalue of the Google Matrix](https://nlp.stanford.edu/pubs/secondeigenvalue.pdf): has \"implications for the convergence rate of the standard PageRank algorithm as the web scales, for the stability of PageRank to perturbations to the link structure of the web, for the detection of Google spammers, and for the design of algorithms to speed up PageRank\".\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Avoiding Confusion: QR Algorithm vs QR Decomposition" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The **QR algorithm** uses something called the **QR decomposition**. Both are important, so don't get them confused. The **QR decomposition** decomposes a matrix $A = QR$ into a set of orthonormal columns $Q$ and a triangular matrix $R$. We will look at several ways to calculate the QR decomposition in a future lesson. For now, just know that it is giving us an orthogonal matrix and a triangular matrix." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Linear Algebra" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Two matrices $A$ and $B$ are **similar** if there exists a non-singular matrix $X$ such that $$B = X^{-1}AX$$\n", "\n", "Watch this: [Change of Basis](https://www.youtube.com/watch?v=P2LTAUO1TdA&index=13&list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab)\n", "\n", "**Theorem**: If $X$ is non-singular, then $A$ and $X^{-1}AX$ have the same eigenvalues." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### More Linear Algebra" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A **Schur factorization** of a matrix $A$ is a factorization:\n", "$$ A = Q T Q^*$$\n", "where $Q$ is unitary and $T$ is upper-triangular.\n", "\n", "**Question**: What can you say about the eigenvalues of $A$?\n", "\n", "**Theorem:** Every square matrix has a Schur factorization." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Other resources" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Review: [Linear combinations, span, and basis vectors](https://www.youtube.com/watch?v=k7RM-ot2NWY&index=3&list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab)\n", "\n", "See Lecture 24 for proofs of above theorems (and more!)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Algorithm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The most basic version of the QR algorithm:\n", "\n", " for k=1,2,...\n", " Q, R = A\n", " A = R @ Q\n", " \n", "Under suitable assumptions, this algorithm converges to the Schur form of A!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Why it works" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Written again, only with subscripts:\n", "\n", "$A_0 = A$\n", "\n", "for $k=1,2,\\ldots$\n", "\n", " $\\quad Q_k$, $R_k$ = $A_{k-1}$\n", " \n", " $\\quad A_k$ = $R_k Q_k$\n", " \n", "We can think of this as constructing sequences of $A_k$, $Q_k$, and $R_k$.\n", "\n", "$$ A_k = Q_k \\, R_k $$\n", "\n", "$$ Q_k^{-1} \\, A_k = R_k$$\n", "\n", "Thus, \n", "\n", "$$ R_k Q_k = Q_k^{-1} \\, A_k \\, Q_k $$\n", "\n", "$$A_k = Q_k^{-1} Q_2^{-1} Q_1^{-1} A Q_1 Q_2 \\dots Q_k$$\n", "\n", "Trefethen proves the following on page 216-217:\n", "\n", "$$A^k = Q_1 Q_2 \\dots Q_k R_k R_{k-1}\\dots R_1$$\n", "\n", "**Key**: The QR algorithm constructs orthonormal bases for successive powers $A^k$. And remember the close relationship between powers of A and the eigen decomposition.\n", "\n", "To learn more, read up on *Rayleigh quotients*." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Pure QR" ] }, { "cell_type": "code", "execution_count": 467, "metadata": { "collapsed": true }, "outputs": [], "source": [ "n = 6\n", "A = np.random.rand(n,n)\n", "AT = A @ A.T" ] }, { "cell_type": "code", "execution_count": 474, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def pure_qr(A, max_iter=50000):\n", " Ak = np.copy(A)\n", " n = A.shape[0]\n", " QQ = np.eye(n)\n", " for k in range(max_iter):\n", " Q, R = np.linalg.qr(Ak)\n", " Ak = R @ Q\n", " QQ = QQ @ Q\n", " if k % 100 == 0:\n", " print(Ak)\n", " print(\"\\n\")\n", " return Ak, QQ" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Pure QR" ] }, { "cell_type": "code", "execution_count": 475, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.65646 0.21386 0.16765 0.75256 0.61251 0.93518]\n", " [ 0.52744 0.47579 0.17052 -0.41086 -0.21182 -0.01876]\n", " [ 0.29923 0.06964 0.11173 0.1879 -0.29101 0.60032]\n", " [ 0.2274 0.46162 -0.26654 0.08899 0.24631 0.26447]\n", " [-0.06093 0.02892 0.34162 0.07533 0.02393 -0.05456]\n", " [-0.06025 0.02694 -0.11675 -0.00927 -0.11939 -0.00767]]\n", "\n", "\n", "[[ 2.78023 0.52642 0.0395 -0.11135 0.1569 1.15184]\n", " [ 0. 0.18624 -0.297 -0.07256 -0.04537 0.27907]\n", " [ 0. 0.69328 0.34105 -0.12198 0.11029 0.0992 ]\n", " [-0. -0.0494 -0.02057 0.09461 0.59466 0.09115]\n", " [-0. 0.00008 -0.02659 -0.40372 0.06542 0.38612]\n", " [-0. 0. 0. 0. -0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.12185 -0.51401 0.17625 -0.07467 1.15184]\n", " [ 0. 0.2117 -0.70351 0.09974 -0.02986 0.00172]\n", " [ 0. 0.28284 0.32635 -0.0847 -0.08488 -0.29104]\n", " [-0. -0.00068 -0.00088 -0.01282 0.54836 0.13447]\n", " [-0. 0. -0.00102 -0.45718 0.16208 -0.37726]\n", " [-0. 0. 0. 0. -0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.33997 0.4049 0.17949 0.06291 1.15184]\n", " [ 0. 0.48719 -0.48788 -0.05831 -0.12286 -0.23486]\n", " [ 0. 0.49874 0.05104 -0.07191 0.03638 0.17261]\n", " [ 0. 0.00002 0. 0.02128 0.41958 0.3531 ]\n", " [ 0. -0. 0.00002 -0.58571 0.1278 -0.18838]\n", " [ 0. 0. 0. -0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35761 0.38941 0.07462 0.17493 1.15184]\n", " [ 0. 0.0597 -0.55441 -0.0681 -0.04456 0.14084]\n", " [ 0. 0.43221 0.47853 -0.06068 0.12117 0.25519]\n", " [-0. -0. -0. 0.16206 0.45708 0.37724]\n", " [-0. 0. -0. -0.54821 -0.01298 0.1336 ]\n", " [ 0. 0. 0. 0. -0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.06853 -0.52424 0.05224 -0.18287 1.15184]\n", " [ 0. 0.36572 -0.6889 0.07864 -0.09263 0.105 ]\n", " [ 0. 0.29772 0.17251 -0.09836 -0.02347 -0.27191]\n", " [ 0. -0. -0. 0.13719 0.57888 -0.20884]\n", " [ 0. 0. -0. -0.42642 0.01189 -0.34139]\n", " [ 0. 0. 0. 0. -0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.52782 0.03045 -0.14389 -0.12436 1.15184]\n", " [ 0. 0.25091 -0.27593 0.08994 -0.06581 -0.28672]\n", " [ 0. 0.7107 0.28732 0.10154 0.04751 -0.05245]\n", " [ 0. -0. -0. 0.0297 -0.59054 -0.01234]\n", " [ 0. -0. 0. 0.41475 0.11938 -0.40001]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.1533 0.50599 0.18983 0.01158 1.15184]\n", " [ 0. 0.18627 -0.69511 -0.0991 -0.00189 0.01621]\n", " [ 0. 0.29151 0.35196 0.05638 -0.10949 0.29102]\n", " [ 0. -0. -0. -0.02207 -0.48261 0.25246]\n", " [ 0. -0. 0. 0.52268 0.17116 0.31053]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.29683 -0.43751 -0.13852 0.13032 1.15184]\n", " [ 0. 0.48375 -0.53231 -0.01164 0.13482 0.216 ]\n", " [ 0. 0.45431 0.05448 -0.07972 -0.01795 -0.19571]\n", " [ 0. -0. 0. 0.10042 -0.40743 -0.39915]\n", " [ 0. -0. 0. 0.59786 0.04867 -0.02893]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.39373 -0.35284 0.00838 -0.19 1.15184]\n", " [ 0. 0.05184 -0.51278 0.05752 -0.0564 -0.16496]\n", " [ 0. 0.47384 0.48639 0.09426 0.09806 -0.24031]\n", " [ 0. -0. -0. 0.17043 -0.52593 0.30622]\n", " [ 0. -0. 0. 0.47936 -0.02134 -0.25766]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.0355 0.52751 0.10215 0.16042 1.15184]\n", " [ 0. 0.34047 -0.69946 -0.09606 -0.06944 -0.08773]\n", " [ 0. 0.28717 0.19776 0.09382 -0.04624 0.27796]\n", " [ 0. -0. -0. 0.08542 -0.60072 -0.10298]\n", " [ 0. -0. 0. 0.40458 0.06367 0.38672]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.51706 -0.11032 -0.17442 -0.07581 1.15184]\n", " [ 0. 0.31706 -0.2805 -0.08235 0.0863 0.29136]\n", " [ 0. 0.70612 0.22117 -0.09973 -0.02853 0.00826]\n", " [ 0. -0. -0. -0.01235 -0.5494 -0.13103]\n", " [ 0. -0. 0. 0.45589 0.16144 -0.37814]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.18529 -0.49517 -0.18006 0.06123 1.15184]\n", " [ 0. 0.16123 -0.68291 -0.09155 0.0279 -0.03476]\n", " [ 0. 0.30371 0.377 0.01655 -0.12472 -0.2894 ]\n", " [ 0. 0. 0. 0.01974 -0.42059 -0.35131]\n", " [ 0. 0. -0. 0.5847 0.12935 -0.19168]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25477 0.46327 -0.07615 0.17427 1.15184]\n", " [ 0. 0.47278 -0.57146 -0.03461 -0.12937 -0.19683]\n", " [ 0. 0.41516 0.06545 0.08395 -0.00278 0.21498]\n", " [ 0. -0. 0. 0.16125 -0.45555 -0.3784 ]\n", " [ 0. -0. 0. 0.54974 -0.01216 0.13028]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.42908 0.30889 0.05099 0.18322 1.15184]\n", " [ 0. 0.05265 -0.46631 0.04976 -0.06424 0.18962]\n", " [ 0. 0.52032 0.48558 0.11539 0.07122 0.22136]\n", " [ 0. 0. 0. 0.13823 -0.57801 -0.21116]\n", " [ 0. 0. -0. 0.42728 0.01086 0.33995]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.00334 -0.52869 -0.14306 -0.12531 1.15184]\n", " [ 0. 0.3149 -0.7066 -0.10679 -0.04392 0.07066]\n", " [ 0. 0.28002 0.22333 0.08372 -0.06816 -0.28278]\n", " [ 0. 0. 0. 0.03087 -0.59113 -0.00969]\n", " [ 0. 0. -0. 0.41416 0.11821 -0.40008]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.49486 0.18611 0.18973 0.01317 1.15184]\n", " [ 0. 0.37763 -0.30407 -0.06365 0.1086 -0.28934]\n", " [ 0. 0.68255 0.1606 -0.09511 -0.00985 0.03524]\n", " [ 0. 0. 0. -0.02239 -0.48423 0.24985]\n", " [ 0. 0. -0. 0.52107 0.17148 0.31262]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21799 0.48167 -0.13976 0.12898 1.15184]\n", " [ 0. 0.13689 -0.66682 0.07458 -0.05442 0.05403]\n", " [ 0. 0.31981 0.40134 0.03053 0.12464 0.28642]\n", " [ 0. 0. 0. 0.09859 -0.40695 -0.39886]\n", " [ 0. 0. -0. 0.59834 0.0505 -0.03275]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21427 -0.48333 -0.00984 0.18993 1.15184]\n", " [ 0. 0.45651 -0.60498 0.07108 0.11122 0.17774]\n", " [ 0. 0.38164 0.08172 -0.08395 0.02278 -0.23101]\n", " [ 0. -0. 0. 0.17077 -0.52445 -0.30819]\n", " [ 0. -0. 0. 0.48084 -0.02169 0.2553 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.46223 -0.25664 0.10111 0.16108 1.15184]\n", " [ 0. 0.06482 -0.41681 -0.04447 0.07111 -0.21419]\n", " [ 0. 0.56981 0.47341 -0.12657 -0.04398 -0.19769]\n", " [ 0. 0. 0. 0.08669 -0.60057 -0.10548]\n", " [ 0. 0. -0. 0.40472 0.0624 0.38605]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.02821 0.52795 0.17386 0.07707 1.15184]\n", " [ 0. 0.28917 -0.71053 -0.11126 -0.01551 -0.05366]\n", " [ 0. 0.27609 0.24906 0.06641 -0.08922 0.28649]\n", " [ 0. -0. -0. -0.01166 -0.55066 0.12827]\n", " [ 0. -0. 0. 0.45463 0.16075 0.37909]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.46334 -0.25463 0.18062 -0.05954 1.15184]\n", " [ 0. 0.42654 -0.3423 0.03075 -0.12716 0.28138]\n", " [ 0. 0.64432 0.11169 0.0883 -0.00883 -0.07605]\n", " [ 0. 0. 0. 0.01821 -0.42163 0.3495 ]\n", " [ 0. 0. -0. 0.58366 0.13087 0.19495]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25153 -0.46503 0.07768 -0.17359 1.15184]\n", " [ 0. 0.11372 -0.64641 0.05247 -0.07193 -0.07417]\n", " [ 0. 0.34021 0.42451 0.0736 0.10791 -0.28188]\n", " [ 0. -0. -0. 0.16041 -0.45403 0.37953]\n", " [ 0. -0. 0. 0.55126 -0.01132 -0.12694]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.17551 0.49872 -0.04973 -0.18356 1.15184]\n", " [ 0. 0.43663 -0.63305 0.0961 0.08709 -0.15898]\n", " [ 0. 0.35358 0.1016 -0.08053 0.04103 0.2443 ]\n", " [ 0. 0. -0. 0.13926 -0.57713 0.21349]\n", " [ 0. 0. -0. 0.42816 0.00983 -0.3385 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.49117 0.19565 -0.14223 -0.12625 1.15184]\n", " [ 0. 0.0908 -0.36765 -0.03961 0.07922 0.23763]\n", " [ 0. 0.61897 0.44743 -0.12984 -0.01694 0.16879]\n", " [ 0. -0. -0. 0.03205 -0.5917 -0.00704]\n", " [ 0. -0. 0. 0.41359 0.11704 -0.40014]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.05938 -0.52535 -0.18961 -0.01475 1.15184]\n", " [ 0. 0.26338 -0.71138 -0.10793 0.01612 0.03662]\n", " [ 0. 0.27524 0.27485 0.03935 -0.10739 -0.28917]\n", " [ 0. 0. 0. -0.02269 -0.48584 -0.24724]\n", " [ 0. 0. -0. 0.51945 0.17177 -0.31469]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.42532 0.31405 -0.14099 0.12764 1.15184]\n", " [ 0. 0.46081 -0.3892 -0.01295 -0.1334 -0.26875]\n", " [ 0. 0.59743 0.07742 0.07957 -0.02634 0.11283]\n", " [ 0. -0. -0. 0.09675 -0.40651 -0.39852]\n", " [ 0. -0. 0. 0.59879 0.05233 -0.03657]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.28599 0.44467 0.0113 -0.18985 1.15184]\n", " [ 0. 0.0924 -0.62121 -0.03168 0.07992 0.09528]\n", " [ 0. 0.36541 0.44583 -0.1049 -0.0812 0.27546]\n", " [ 0. -0. -0. 0.1711 -0.52297 0.31015]\n", " [ 0. -0. 0. 0.48232 -0.02201 -0.25291]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.13845 -0.51025 -0.10006 -0.16173 1.15184]\n", " [ 0. 0.41438 -0.65605 -0.11185 -0.06046 0.14063]\n", " [ 0. 0.33057 0.12385 0.07387 -0.05803 -0.2553 ]\n", " [ 0. 0. 0. 0.08796 -0.6004 0.10798]\n", " [ 0. 0. -0. 0.40489 0.06113 -0.38536]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.5134 -0.12629 -0.1733 -0.07834 1.15184]\n", " [ 0. 0.13174 -0.32385 0.0319 -0.08965 -0.25857]\n", " [ 0. 0.66277 0.40649 0.12582 -0.01014 -0.13453]\n", " [ 0. -0. -0. -0.01095 -0.55191 -0.12551]\n", " [ 0. -0. 0. 0.45338 0.16004 -0.38001]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.09043 0.52091 -0.18117 0.05785 1.15184]\n", " [ 0. 0.2376 -0.70917 0.09396 -0.04876 -0.01941]\n", " [ 0. 0.27745 0.30063 -0.00151 0.11739 0.29083]\n", " [ 0. 0. 0. 0.01671 -0.4227 -0.34767]\n", " [ 0. 0. -0. 0.58259 0.13238 -0.19821]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.38356 -0.36387 0.07921 -0.1729 1.15184]\n", " [ 0. 0.4804 -0.43903 -0.05633 -0.12341 0.25287]\n", " [ 0. 0.54759 0.05783 0.07018 -0.04075 -0.14496]\n", " [ 0. 0. -0. 0.15953 -0.45252 0.38064]\n", " [ 0. 0. -0. 0.55277 -0.01045 -0.12358]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.32133 -0.41985 0.04847 0.1839 1.15184]\n", " [ 0. 0.07395 -0.59076 -0.01536 0.0819 -0.11744]\n", " [ 0. 0.39586 0.46428 -0.12416 -0.05129 -0.26677]\n", " [ 0. 0. 0. 0.14027 -0.57624 -0.21581]\n", " [ 0. 0. -0. 0.42905 0.00881 0.33703]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.10295 0.51858 -0.14139 -0.12719 1.15184]\n", " [ 0. 0.39062 -0.67448 0.12025 0.03188 -0.1227 ]\n", " [ 0. 0.31214 0.14761 -0.06308 0.07439 0.26439]\n", " [ 0. 0. 0. 0.03323 -0.59225 -0.00439]\n", " [ 0. 0. -0. 0.41304 0.11586 -0.40018]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.52631 0.05017 -0.18948 -0.01632 1.15184]\n", " [ 0. 0.18641 -0.29145 -0.0171 0.10162 0.27541]\n", " [ 0. 0.69517 0.35182 -0.11404 0.03696 0.09543]\n", " [ 0. -0. -0. -0.02295 -0.48746 -0.24462]\n", " [ 0. -0. 0. 0.51783 0.17204 -0.31674]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.12158 -0.51453 -0.14221 0.12628 1.15184]\n", " [ 0. 0.21193 -0.70383 -0.06881 0.076 0.0019 ]\n", " [ 0. 0.2828 0.3263 -0.04211 -0.11272 -0.29147]\n", " [ 0. 0. 0. 0.09491 -0.4061 -0.39816]\n", " [ 0. 0. -0. 0.59919 0.05418 -0.04039]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.34032 0.4046 0.01277 -0.18975 1.15184]\n", " [ 0. 0.48718 -0.4875 0.09008 0.10189 -0.23501]\n", " [ 0. 0.49912 0.05105 -0.06166 0.05188 0.17241]\n", " [ 0. 0. -0. 0.1714 -0.52147 0.3121 ]\n", " [ 0. 0. -0. 0.48382 -0.02232 -0.25051]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35731 0.38968 0.09901 0.16238 1.15184]\n", " [ 0. 0.0598 -0.55473 0.0032 -0.08133 0.14065]\n", " [ 0. 0.43189 0.47843 0.13388 0.02096 0.2553 ]\n", " [ 0. 0. 0. 0.08922 -0.60022 -0.11048]\n", " [ 0. 0. -0. 0.40507 0.05986 0.38465]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.06881 -0.5242 -0.17273 -0.07959 1.15184]\n", " [ 0. 0.36593 -0.6888 -0.12153 -0.0007 0.10514]\n", " [ 0. 0.29783 0.1723 0.04626 -0.08989 -0.27185]\n", " [ 0. 0. 0. -0.01023 -0.55314 -0.12275]\n", " [ 0. 0. -0. 0.45215 0.15932 -0.38091]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.78023 -0.52786 0.02978 0.1817 -0.05616 1.15184]\n", " [ 0. 0.25036 -0.27597 0.00829 0.11107 -0.28665]\n", " [ 0. 0.71065 0.28787 -0.09408 0.06109 -0.05281]\n", " [ 0. 0. 0. 0.01523 -0.42379 0.34581]\n", " [ 0. 0. -0. 0.5815 0.13386 0.20144]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.15304 0.50607 -0.08074 0.17219 1.15184]\n", " [ 0. 0.18648 -0.6952 0.03825 -0.09147 0.01606]\n", " [ 0. 0.29142 0.35175 0.08101 0.09272 0.29103]\n", " [ 0. 0. 0. 0.15863 -0.45102 -0.38172]\n", " [ 0. 0. -0. 0.55427 -0.00955 0.1202 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.29718 -0.43727 -0.04721 -0.18423 1.15184]\n", " [ 0. 0.48381 -0.53197 -0.11247 -0.07526 0.21616]\n", " [ 0. 0.45466 0.05442 0.05413 -0.06119 -0.19553]\n", " [ 0. 0. -0. 0.14128 -0.57533 0.21812]\n", " [ 0. 0. -0. 0.42996 0.00781 -0.33554]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.39344 -0.35318 0.14055 0.12812 1.15184]\n", " [ 0. 0.05187 -0.51315 0.00659 0.08029 -0.16476]\n", " [ 0. 0.47347 0.48636 -0.13567 0.00965 -0.24044]\n", " [ 0. 0. 0. 0.03442 -0.59279 0.00175]\n", " [ 0. 0. -0. 0.4125 0.11467 0.4002 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.03577 0.52749 0.18934 0.01789 1.15184]\n", " [ 0. 0.34068 -0.69939 -0.1138 0.03323 -0.08788]\n", " [ 0. 0.28724 0.19755 0.02106 -0.10242 0.27791]\n", " [ 0. -0. -0. -0.02319 -0.48908 0.24199]\n", " [ 0. -0. 0. 0.51622 0.17228 0.31875]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.5172 -0.10967 -0.14341 0.12491 1.15184]\n", " [ 0. 0.31653 -0.28038 0.04262 0.11135 0.29135]\n", " [ 0. 0.70624 0.2217 -0.06857 0.07793 0.00862]\n", " [ 0. -0. -0. 0.09305 -0.40572 -0.39775]\n", " [ 0. -0. 0. 0.59957 0.05604 -0.04421]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.18503 -0.49527 -0.01424 0.18965 1.15184]\n", " [ 0. 0.16143 -0.68303 -0.01015 0.09519 -0.0346 ]\n", " [ 0. 0.3036 0.3768 -0.10826 -0.06406 -0.28941]\n", " [ 0. 0. 0. 0.17168 -0.51997 -0.31403]\n", " [ 0. 0. -0. 0.48532 -0.0226 0.24808]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25511 0.46308 0.09796 0.16302 1.15184]\n", " [ 0. 0.4729 -0.57116 -0.12554 -0.04666 -0.19698]\n", " [ 0. 0.41546 0.06533 0.04626 -0.07008 0.21484]\n", " [ 0. -0. -0. 0.09049 -0.60002 -0.11297]\n", " [ 0. -0. 0. 0.40527 0.0586 0.38392]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.4288 0.30928 -0.17215 -0.08084 1.15184]\n", " [ 0. 0.0526 -0.46671 0.01637 0.07958 0.18942]\n", " [ 0. 0.51992 0.48563 -0.12923 0.0411 0.22154]\n", " [ 0. -0. -0. -0.00949 -0.55436 -0.12 ]\n", " [ 0. -0. 0. 0.45093 0.15858 -0.38179]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.0036 -0.52869 0.18221 -0.05447 1.15184]\n", " [ 0. 0.31511 -0.70655 0.094 -0.06711 0.0708 ]\n", " [ 0. 0.28007 0.22312 0.01322 0.10712 -0.28275]\n", " [ 0. -0. -0. 0.01378 -0.42491 0.34392]\n", " [ 0. -0. 0. 0.58038 0.13531 0.20465]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.49508 0.18551 -0.08227 0.17147 1.15184]\n", " [ 0. 0.37717 -0.30381 -0.07749 -0.09914 -0.28938]\n", " [ 0. 0.68281 0.16106 0.04417 -0.08488 0.03489]\n", " [ 0. -0. -0. 0.1577 -0.44953 -0.38277]\n", " [ 0. -0. 0. 0.55576 -0.00862 0.11681]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21772 0.48179 0.04594 0.18455 1.15184]\n", " [ 0. 0.13709 -0.66697 -0.01194 -0.09157 0.05387]\n", " [ 0. 0.31966 0.40114 0.12396 0.03308 0.28645]\n", " [ 0. 0. 0. 0.14227 -0.5744 -0.22042]\n", " [ 0. 0. -0. 0.43089 0.00681 0.33402]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.2146 -0.48319 -0.1397 -0.12905 1.15184]\n", " [ 0. 0.45666 -0.60473 -0.13098 -0.01645 0.1779 ]\n", " [ 0. 0.38189 0.08157 0.0361 -0.07911 -0.23089]\n", " [ 0. 0. 0. 0.03561 -0.59331 0.0009 ]\n", " [ 0. 0. -0. 0.41198 0.11347 -0.4002 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.46197 -0.25711 -0.18919 -0.01945 1.15184]\n", " [ 0. 0.06467 -0.41722 -0.02879 -0.07874 -0.21399]\n", " [ 0. 0.5694 0.47356 0.11253 -0.07277 -0.19791]\n", " [ 0. -0. -0. -0.0234 -0.49069 -0.23935]\n", " [ 0. -0. 0. 0.5146 0.17249 -0.32073]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.02795 0.52796 0.1446 -0.12353 1.15184]\n", " [ 0. 0.28938 -0.71051 -0.06202 0.0937 -0.0538 ]\n", " [ 0. 0.27611 0.24885 -0.05182 -0.09838 0.28647]\n", " [ 0. -0. -0. 0.09118 -0.40539 0.39731]\n", " [ 0. -0. 0. 0.5999 0.0579 0.04803]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.46363 -0.25411 0.01571 -0.18953 1.15184]\n", " [ 0. 0.4262 -0.34194 -0.10508 -0.07786 0.28147]\n", " [ 0. 0.64468 0.11203 0.02623 -0.08483 -0.07573]\n", " [ 0. 0. -0. 0.17194 -0.51845 0.31595]\n", " [ 0. 0. -0. 0.48684 -0.02285 -0.24563]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25125 -0.46518 -0.0969 -0.16365 1.15184]\n", " [ 0. 0.1139 -0.6466 -0.02852 -0.08437 -0.074 ]\n", " [ 0. 0.34003 0.42433 0.13059 0.00215 -0.28193]\n", " [ 0. -0. -0. 0.09175 -0.59981 0.11546]\n", " [ 0. -0. 0. 0.40549 0.05734 -0.38318]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.17582 0.49861 -0.17156 -0.08208 1.15184]\n", " [ 0. 0.43681 -0.63284 0.12872 -0.01606 -0.15914]\n", " [ 0. 0.35379 0.10142 -0.02137 0.08779 0.2442 ]\n", " [ 0. 0. 0. -0.00874 -0.55557 -0.11724]\n", " [ 0. 0. -0. 0.44972 0.15782 -0.38264]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.49095 0.19619 0.18271 -0.05278 1.15184]\n", " [ 0. 0.09052 -0.36805 -0.04589 -0.07569 0.23745]\n", " [ 0. 0.61858 0.44771 0.08364 -0.10079 0.16905]\n", " [ 0. 0. 0. 0.01234 -0.42605 0.342 ]\n", " [ 0. 0. -0. 0.57924 0.13674 0.20783]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.05913 -0.52538 -0.08379 0.17073 1.15184]\n", " [ 0. 0.26359 -0.71139 -0.02488 0.10628 0.03676]\n", " [ 0. 0.27524 0.27464 -0.08525 -0.0762 -0.28915]\n", " [ 0. 0. 0. 0.15674 -0.44806 -0.3838 ]\n", " [ 0. 0. -0. 0.55723 -0.00766 0.11339]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.42565 0.3136 0.04466 0.18486 1.15184]\n", " [ 0. 0.46059 -0.38879 -0.12336 -0.05234 -0.26887]\n", " [ 0. 0.59783 0.07764 0.0148 -0.08254 0.11255]\n", " [ 0. -0. 0. 0.14326 -0.57346 -0.22273]\n", " [ 0. -0. 0. 0.43183 0.00583 0.33249]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.28571 0.44486 0.13885 0.12997 1.15184]\n", " [ 0. 0.09256 -0.62144 -0.04133 -0.07541 0.0951 ]\n", " [ 0. 0.36518 0.44567 0.12946 -0.02889 0.27552]\n", " [ 0. 0. 0. 0.03681 -0.59382 -0.00353]\n", " [ 0. 0. -0. 0.41147 0.11228 0.40018]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.13875 -0.51017 0.18902 0.021 1.15184]\n", " [ 0. 0.41457 -0.65588 0.11658 -0.0508 0.14078]\n", " [ 0. 0.33074 0.12366 0.00017 0.09391 -0.25522]\n", " [ 0. -0. -0. -0.02358 -0.4923 0.2367 ]\n", " [ 0. -0. 0. 0.51299 0.17267 0.32269]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.51325 -0.12689 -0.14578 0.12213 1.15184]\n", " [ 0. 0.13134 -0.32418 -0.06697 -0.06751 -0.25841]\n", " [ 0. 0.66245 0.40688 0.04539 -0.11784 -0.13483]\n", " [ 0. -0. -0. 0.08931 -0.40509 -0.39683]\n", " [ 0. -0. 0. 0.60021 0.05977 -0.05184]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.09017 0.52095 0.01719 -0.1894 1.15184]\n", " [ 0. 0.23781 -0.7092 0.00841 0.10555 -0.01955]\n", " [ 0. 0.27742 0.30042 -0.10755 -0.04702 0.29082]\n", " [ 0. -0. -0. 0.17218 -0.51693 0.31786]\n", " [ 0. -0. 0. 0.48836 -0.02309 -0.24315]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.38392 -0.3635 0.09583 0.16427 1.15184]\n", " [ 0. 0.48029 -0.43862 0.13335 0.02486 0.25301]\n", " [ 0. 0.548 0.05794 -0.00692 0.08087 -0.14472]\n", " [ 0. -0. 0. 0.09301 -0.59957 -0.11794]\n", " [ 0. -0. 0. 0.40572 0.05608 0.38242]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.32103 -0.42007 0.17097 0.08331 1.15184]\n", " [ 0. 0.07408 -0.59104 0.05211 0.06505 -0.11726]\n", " [ 0. 0.39559 0.46415 -0.11986 0.06063 -0.26685]\n", " [ 0. 0. 0. -0.00797 -0.55676 0.11449]\n", " [ 0. 0. -0. 0.44853 0.15705 0.38347]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.10324 0.51852 0.18319 -0.05108 1.15184]\n", " [ 0. 0.39082 -0.67435 -0.0914 0.08443 -0.12285]\n", " [ 0. 0.31227 0.14741 -0.02899 -0.0931 0.26432]\n", " [ 0. -0. -0. 0.01093 -0.42721 0.34006]\n", " [ 0. -0. 0. 0.57808 0.13815 0.21099]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.52625 0.05082 -0.08532 0.16997 1.15184]\n", " [ 0. 0.18591 -0.29166 0.08808 0.05336 0.27529]\n", " [ 0. 0.69497 0.35232 -0.00778 0.11968 0.09577]\n", " [ 0. -0. -0. 0.15575 -0.4466 -0.3848 ]\n", " [ 0. -0. 0. 0.55869 -0.00667 0.10996]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.12132 -0.51459 0.04338 0.18517 1.15184]\n", " [ 0. 0.21214 -0.70388 0.03415 0.0967 0.00204]\n", " [ 0. 0.28274 0.32609 -0.11915 -0.01656 -0.29147]\n", " [ 0. 0. 0. 0.14423 -0.5725 -0.22502]\n", " [ 0. 0. -0. 0.43279 0.00486 0.33095]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.34068 0.4043 -0.13799 -0.13088 1.15184]\n", " [ 0. 0.48717 -0.48711 0.13592 -0.00445 -0.23517]\n", " [ 0. 0.49951 0.05106 0.00074 0.08058 0.1722 ]\n", " [ 0. 0. 0. 0.03801 -0.59431 0.00617]\n", " [ 0. 0. -0. 0.41098 0.11107 -0.40015]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35701 0.38996 -0.18884 -0.02255 1.15184]\n", " [ 0. 0.05989 -0.55505 0.06203 0.05273 0.14045]\n", " [ 0. 0.43157 0.47834 -0.09919 0.09232 0.2554 ]\n", " [ 0. -0. -0. -0.02374 -0.49391 -0.23405]\n", " [ 0. -0. 0. 0.51138 0.17283 -0.32462]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.06908 -0.52417 0.14695 -0.12073 1.15184]\n", " [ 0. 0.36613 -0.6887 0.0536 -0.1091 0.10529]\n", " [ 0. 0.29793 0.1721 0.06074 0.08077 -0.27179]\n", " [ 0. -0. -0. 0.08744 -0.40482 0.39631]\n", " [ 0. -0. 0. 0.60047 0.06165 0.05565]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.5279 0.02911 -0.01868 0.18926 1.15184]\n", " [ 0. 0.24981 -0.27602 -0.10557 -0.03528 -0.28658]\n", " [ 0. 0.7106 0.28842 -0.01997 -0.11045 -0.05317]\n", " [ 0. -0. -0. 0.17239 -0.5154 -0.31976]\n", " [ 0. -0. 0. 0.48989 -0.0233 0.24066]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.15278 0.50615 -0.09476 -0.16489 1.15184]\n", " [ 0. 0.18668 -0.69528 0.05306 0.08378 0.01591]\n", " [ 0. 0.29134 0.35154 -0.12239 0.01324 0.29104]\n", " [ 0. -0. -0. 0.09427 -0.59933 0.12043]\n", " [ 0. -0. 0. 0.40597 0.05482 -0.38165]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.29754 -0.43703 -0.17036 -0.08453 1.15184]\n", " [ 0. 0.48387 -0.53162 -0.13043 0.03612 0.21632]\n", " [ 0. 0.455 0.05436 -0.01111 -0.08092 -0.19536]\n", " [ 0. 0. 0. -0.00718 -0.55794 -0.11174]\n", " [ 0. 0. -0. 0.44735 0.15627 -0.38428]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.39314 -0.35351 -0.18366 0.04939 1.15184]\n", " [ 0. 0.05191 -0.51351 -0.07124 -0.0376 -0.16455]\n", " [ 0. 0.47311 0.48632 0.0649 -0.11953 -0.24058]\n", " [ 0. -0. -0. 0.00955 -0.4284 -0.3381 ]\n", " [ 0. -0. 0. 0.57689 0.13954 -0.21412]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.03604 0.52747 0.08683 -0.1692 1.15184]\n", " [ 0. 0.34089 -0.69931 -0.01131 0.11804 -0.08802]\n", " [ 0. 0.28731 0.19734 -0.08731 -0.05748 0.27787]\n", " [ 0. -0. -0. 0.15474 -0.44516 0.38577]\n", " [ 0. -0. 0. 0.56014 -0.00565 -0.10651]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.51734 -0.10903 -0.04209 -0.18547 1.15184]\n", " [ 0. 0.316 -0.28026 -0.11821 -0.01508 0.29134]\n", " [ 0. 0.70636 0.22223 -0.03631 -0.09732 0.00898]\n", " [ 0. 0. 0. 0.14519 -0.57153 0.22731]\n", " [ 0. 0. -0. 0.43376 0.00389 -0.32938]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.18476 -0.49537 0.13712 0.13178 1.15184]\n", " [ 0. 0.16164 -0.68314 0.06698 0.06844 -0.03445]\n", " [ 0. 0.30348 0.37659 -0.11831 0.04269 -0.28943]\n", " [ 0. 0. 0. 0.03922 -0.59478 -0.0088 ]\n", " [ 0. 0. -0. 0.41051 0.10986 0.4001 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.78023 -0.25545 0.46289 -0.18865 -0.0241 1.15184]\n", " [ 0. 0.47301 -0.57086 0.11438 -0.0697 -0.19714]\n", " [ 0. 0.41576 0.06522 0.02643 0.07968 0.21469]\n", " [ 0. 0. 0. -0.02387 -0.49552 -0.23139]\n", " [ 0. 0. -0. 0.50977 0.17296 -0.32652]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.42851 0.30968 0.1481 -0.11931 1.15184]\n", " [ 0. 0.05255 -0.46711 -0.07872 -0.02004 0.18921]\n", " [ 0. 0.51952 0.48568 0.01962 -0.13418 0.22171]\n", " [ 0. 0. 0. 0.08555 -0.40459 0.39576]\n", " [ 0. 0. -0. 0.6007 0.06353 0.05946]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.00387 -0.52869 -0.02016 0.18911 1.15184]\n", " [ 0. 0.31532 -0.70651 0.02563 0.11264 0.07094]\n", " [ 0. 0.28012 0.22291 -0.1039 -0.02914 -0.28271]\n", " [ 0. 0. 0. 0.17258 -0.51386 -0.32164]\n", " [ 0. 0. -0. 0.49143 -0.02349 0.23814]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.49531 0.18491 -0.09369 -0.1655 1.15184]\n", " [ 0. 0.37671 -0.30355 0.12559 -0.00703 -0.28942]\n", " [ 0. 0.68307 0.16152 0.04456 0.08475 0.03454]\n", " [ 0. 0. 0. 0.09552 -0.59906 0.1229 ]\n", " [ 0. 0. -0. 0.40623 0.05356 -0.38086]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21744 0.48192 -0.16976 -0.08575 1.15184]\n", " [ 0. 0.13729 -0.66712 0.0772 0.05072 0.05371]\n", " [ 0. 0.31951 0.40094 -0.10597 0.07229 0.28648]\n", " [ 0. -0. -0. -0.00638 -0.5591 -0.10898]\n", " [ 0. -0. 0. 0.44619 0.15547 -0.38507]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21493 -0.48304 0.18411 -0.04769 1.15184]\n", " [ 0. 0.45681 -0.60448 0.08465 -0.10131 0.17806]\n", " [ 0. 0.38215 0.08142 0.04707 0.07309 -0.23077]\n", " [ 0. -0. -0. 0.00819 -0.42961 0.33611]\n", " [ 0. -0. 0. 0.57568 0.1409 0.21723]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.46171 -0.25757 0.08835 -0.16841 1.15184]\n", " [ 0. 0.06452 -0.41764 0.08378 0.0024 -0.21379]\n", " [ 0. 0.56899 0.47371 0.02583 0.13152 -0.19812]\n", " [ 0. 0. 0. 0.15369 -0.44373 0.38671]\n", " [ 0. 0. -0. 0.56157 -0.00461 -0.10304]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.02769 0.52798 -0.0408 -0.18575 1.15184]\n", " [ 0. 0.28959 -0.71049 0.05347 0.09885 -0.05394]\n", " [ 0. 0.27613 0.24864 -0.11116 -0.00061 0.28644]\n", " [ 0. -0. -0. 0.14614 -0.57054 0.2296 ]\n", " [ 0. -0. 0. 0.43475 0.00294 -0.32779]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.46392 -0.25357 0.13626 0.13268 1.15184]\n", " [ 0. 0.42585 -0.34158 0.12687 -0.03165 0.28155]\n", " [ 0. 0.64504 0.11238 0.04892 0.07416 -0.07541]\n", " [ 0. -0. -0. 0.04044 -0.59524 -0.01143]\n", " [ 0. -0. 0. 0.41006 0.10865 0.40004]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25097 -0.46534 0.18845 0.02563 1.15184]\n", " [ 0. 0.11409 -0.64678 0.0839 0.02996 -0.07383]\n", " [ 0. 0.33984 0.42414 -0.0827 0.10106 -0.28197]\n", " [ 0. 0. 0. -0.02397 -0.49713 0.22872]\n", " [ 0. 0. -0. 0.50817 0.17306 0.3284 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.17613 0.4985 -0.14925 0.11788 1.15184]\n", " [ 0. 0.43698 -0.63263 0.04223 -0.12267 -0.15929]\n", " [ 0. 0.354 0.10125 0.06943 0.05777 0.2441 ]\n", " [ 0. 0. 0. 0.08366 -0.4044 -0.39517]\n", " [ 0. 0. -0. 0.6009 0.06542 -0.06326]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.49074 0.19672 -0.02165 0.18895 1.15184]\n", " [ 0. 0.09025 -0.36844 0.08746 -0.01333 0.23726]\n", " [ 0. 0.61819 0.44798 0.0609 0.11599 0.16931]\n", " [ 0. -0. -0. 0.17274 -0.51232 -0.3235 ]\n", " [ 0. -0. 0. 0.49298 -0.02365 0.2356 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.05887 -0.52541 0.09261 0.16611 1.15184]\n", " [ 0. 0.2638 -0.71139 0.07324 0.08097 0.0369 ]\n", " [ 0. 0.27523 0.27443 -0.11115 0.02671 -0.28913]\n", " [ 0. 0. 0. 0.09677 -0.59878 -0.12538]\n", " [ 0. 0. -0. 0.40651 0.05231 0.38005]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.42598 0.31315 0.16914 0.08696 1.15184]\n", " [ 0. 0.46037 -0.38839 -0.12016 0.05927 -0.26899]\n", " [ 0. 0.59824 0.07786 -0.05295 -0.06506 0.11226]\n", " [ 0. -0. -0. -0.00557 -0.56025 0.10623]\n", " [ 0. -0. 0. 0.44504 0.15466 0.38584]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.28542 0.44504 -0.18454 0.04599 1.15184]\n", " [ 0. 0.09273 -0.62167 0.08579 0.00617 0.09493]\n", " [ 0. 0.36495 0.4455 -0.046 0.1244 0.27558]\n", " [ 0. -0. -0. 0.00686 -0.43085 -0.33409]\n", " [ 0. -0. 0. 0.57444 0.14223 -0.22032]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.13905 -0.51009 -0.08986 0.16761 1.15184]\n", " [ 0. 0.41476 -0.65571 0.0038 0.12713 0.14093]\n", " [ 0. 0.33091 0.12347 -0.08722 -0.03472 -0.25514]\n", " [ 0. 0. 0. 0.15262 -0.44231 -0.38762]\n", " [ 0. 0. -0. 0.56298 -0.00353 0.09956]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.5131 -0.12749 0.03951 0.18603 1.15184]\n", " [ 0. 0.13095 -0.3245 -0.09093 0.02761 -0.25826]\n", " [ 0. 0.66212 0.40728 -0.0829 -0.09532 -0.13514]\n", " [ 0. -0. -0. 0.14708 -0.56953 -0.23187]\n", " [ 0. -0. 0. 0.43576 0.002 0.32618]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.08992 0.521 -0.13538 -0.13357 1.15184]\n", " [ 0. 0.23803 -0.70923 0.08692 0.06051 -0.0197 ]\n", " [ 0. 0.27739 0.3002 -0.10458 0.05324 0.29081]\n", " [ 0. -0. -0. 0.04165 -0.59567 0.01405]\n", " [ 0. -0. 0. 0.40962 0.10743 -0.39995]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.38427 -0.36313 -0.18823 -0.02716 1.15184]\n", " [ 0. 0.48019 -0.43821 -0.10237 0.089 0.25315]\n", " [ 0. 0.54841 0.05804 -0.05911 -0.05564 -0.14447]\n", " [ 0. 0. 0. -0.02405 -0.49873 -0.22605]\n", " [ 0. 0. -0. 0.50656 0.17314 -0.33025]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.32074 -0.4203 -0.15037 0.11644 1.15184]\n", " [ 0. 0.07422 -0.59131 -0.08139 0.01803 -0.11707]\n", " [ 0. 0.39531 0.46401 -0.00138 -0.1343 -0.26693]\n", " [ 0. -0. -0. 0.08177 -0.40424 -0.39454]\n", " [ 0. -0. 0. 0.60105 0.06732 -0.06706]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.10353 0.51847 -0.02314 0.18877 1.15184]\n", " [ 0. 0.39102 -0.67421 -0.04293 -0.11681 -0.123 ]\n", " [ 0. 0.31241 0.14721 0.09707 0.0089 0.26425]\n", " [ 0. 0. 0. 0.17288 -0.51076 -0.32535]\n", " [ 0. 0. -0. 0.49453 -0.02379 0.23303]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.52619 0.05147 0.09153 0.16671 1.15184]\n", " [ 0. 0.18541 -0.29186 0.09381 -0.04232 0.27517]\n", " [ 0. 0.69476 0.35282 0.09424 0.07428 0.09611]\n", " [ 0. -0. -0. 0.09802 -0.59848 -0.12785]\n", " [ 0. -0. 0. 0.40681 0.05106 0.37923]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.12106 -0.51465 0.16852 0.08816 1.15184]\n", " [ 0. 0.21235 -0.70394 0.09556 0.03729 0.00219]\n", " [ 0. 0.28268 0.32588 -0.09035 0.07939 -0.29147]\n", " [ 0. 0. 0. -0.00474 -0.56138 0.10349]\n", " [ 0. 0. -0. 0.44391 0.15383 0.38659]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.34104 0.404 0.18495 -0.0443 1.15184]\n", " [ 0. 0.48716 -0.48673 -0.07033 0.1164 -0.23532]\n", " [ 0. 0.4999 0.05107 -0.06801 -0.04322 0.172 ]\n", " [ 0. -0. -0. 0.00555 -0.4321 0.33206]\n", " [ 0. -0. 0. 0.57319 0.14354 0.22338]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35671 0.39023 -0.09137 0.1668 1.15184]\n", " [ 0. 0.05998 -0.55537 0.07202 -0.03798 0.14026]\n", " [ 0. 0.43125 0.47825 0.0487 0.12644 0.25551]\n", " [ 0. -0. -0. 0.15152 -0.44091 -0.3885 ]\n", " [ 0. -0. 0. 0.56438 -0.00243 0.09605]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.06936 -0.52413 -0.03821 -0.1863 1.15184]\n", " [ 0. 0.36634 -0.68859 -0.07154 -0.09831 0.10543]\n", " [ 0. 0.29803 0.17189 0.09974 -0.01609 -0.27174]\n", " [ 0. -0. -0. 0.14801 -0.56851 0.23415]\n", " [ 0. -0. 0. 0.43678 0.00108 -0.32455]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.52793 0.02845 0.1345 0.13445 1.15184]\n", " [ 0. 0.24926 -0.27607 -0.0941 0.05933 -0.28652]\n", " [ 0. 0.71055 0.28897 -0.09819 -0.05452 -0.05353]\n", " [ 0. -0. -0. 0.04288 -0.5961 -0.01667]\n", " [ 0. -0. 0. 0.40919 0.10621 0.39985]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.15252 0.50622 0.18801 0.02868 1.15184]\n", " [ 0. 0.18689 -0.69537 -0.09862 -0.01068 0.01576]\n", " [ 0. 0.29125 0.35134 0.06588 -0.10396 0.29105]\n", " [ 0. 0. 0. -0.0241 -0.50032 0.22337]\n", " [ 0. 0. -0. 0.50497 0.17319 0.33207]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.29789 -0.43679 0.15149 -0.11498 1.15184]\n", " [ 0. 0.48393 -0.53127 0.02561 -0.1329 0.21648]\n", " [ 0. 0.45535 0.0543 0.07744 0.02593 -0.19518]\n", " [ 0. -0. -0. 0.07988 -0.40412 0.39388]\n", " [ 0. -0. 0. 0.60117 0.06921 0.07086]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.39284 -0.35383 -0.02464 0.18858 1.15184]\n", " [ 0. 0.05194 -0.51388 -0.06193 0.05152 -0.16435]\n", " [ 0. 0.47275 0.48629 -0.08566 -0.10565 -0.24072]\n", " [ 0. -0. -0. 0.173 -0.5092 -0.32719]\n", " [ 0. -0. 0. 0.49609 -0.02391 0.23045]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.03631 0.52745 -0.09044 -0.1673 1.15184]\n", " [ 0. 0.3411 -0.69924 0.09101 0.07606 -0.08816]\n", " [ 0. 0.28738 0.19713 -0.09674 0.03954 0.27782]\n", " [ 0. -0. -0. 0.09927 -0.59817 0.13032]\n", " [ 0. -0. 0. 0.40712 0.04982 -0.37839]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.51747 -0.10838 0.16789 0.08935 1.15184]\n", " [ 0. 0.31546 -0.28015 0.08854 -0.07966 0.29133]\n", " [ 0. 0.70648 0.22277 0.0975 0.03602 0.00935]\n", " [ 0. -0. -0. -0.0039 -0.5625 0.10074]\n", " [ 0. -0. 0. 0.44279 0.15299 0.38731]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.18449 -0.49547 -0.18535 0.0426 1.15184]\n", " [ 0. 0.16184 -0.68326 -0.09396 0.01864 -0.03429]\n", " [ 0. 0.30337 0.37639 0.029 -0.12236 -0.28945]\n", " [ 0. -0. -0. 0.00427 -0.43338 -0.33 ]\n", " [ 0. -0. 0. 0.57191 0.14482 -0.22641]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25579 0.4627 0.09288 -0.16596 1.15184]\n", " [ 0. 0.47312 -0.57056 0.02194 0.13215 -0.1973 ]\n", " [ 0. 0.41606 0.06511 -0.08377 -0.00517 0.21455]\n", " [ 0. -0. 0. 0.15039 -0.43953 0.38935]\n", " [ 0. -0. 0. 0.56576 -0.0013 -0.09254]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.42823 0.31007 0.0369 0.18657 1.15184]\n", " [ 0. 0.0525 -0.4675 0.0542 -0.06049 0.18901]\n", " [ 0. 0.51912 0.48573 0.10978 0.07962 0.22189]\n", " [ 0. -0. -0. 0.14893 -0.56748 -0.23641]\n", " [ 0. -0. 0. 0.43781 0.00016 0.32291]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.00413 -0.52868 -0.13362 -0.13533 1.15184]\n", " [ 0. 0.31553 -0.70646 -0.10347 -0.05144 0.07108]\n", " [ 0. 0.28016 0.2227 0.08828 -0.062 -0.28268]\n", " [ 0. -0. -0. 0.0441 -0.5965 0.01929]\n", " [ 0. -0. 0. 0.40879 0.10498 -0.39973]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.49553 0.18431 0.18777 0.0302 1.15184]\n", " [ 0. 0.37625 -0.30329 -0.07284 0.10249 -0.28946]\n", " [ 0. 0.68334 0.16198 -0.0941 -0.01801 0.03419]\n", " [ 0. -0. -0. -0.02413 -0.50192 0.22068]\n", " [ 0. -0. 0. 0.50338 0.17321 0.33386]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21717 0.48204 -0.15259 0.11352 1.15184]\n", " [ 0. 0.13748 -0.66727 0.07987 -0.04646 0.05355]\n", " [ 0. 0.31936 0.40075 0.01734 0.12708 0.28651]\n", " [ 0. -0. -0. 0.07798 -0.40403 -0.39318]\n", " [ 0. -0. 0. 0.60126 0.07111 -0.07464]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21525 -0.4829 -0.02614 0.18838 1.15184]\n", " [ 0. 0.45696 -0.60422 0.06142 0.11689 0.17821]\n", " [ 0. 0.3824 0.08127 -0.08548 0.01571 -0.23065]\n", " [ 0. 0. -0. 0.17309 -0.50763 -0.32901]\n", " [ 0. 0. -0. 0.49766 -0.024 0.22784]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.78023 -0.46145 -0.25804 -0.08935 -0.16789 1.15184]\n", " [ 0. 0.06436 -0.41805 0.04906 -0.06791 -0.21359]\n", " [ 0. 0.56857 0.47387 0.12326 0.0527 -0.19834]\n", " [ 0. 0. 0. 0.10051 -0.59784 0.13278]\n", " [ 0. 0. -0. 0.40745 0.04857 -0.37753]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.02743 0.52799 0.16725 0.09054 1.15184]\n", " [ 0. 0.28981 -0.71047 -0.1098 -0.02411 -0.05408]\n", " [ 0. 0.27615 0.24842 0.07307 -0.08374 0.28641]\n", " [ 0. 0. 0. -0.00304 -0.56361 0.098 ]\n", " [ 0. 0. -0. 0.44168 0.15213 0.38802]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.46421 -0.25304 -0.18573 0.0409 1.15184]\n", " [ 0. 0.4255 -0.34123 -0.04319 0.12338 0.28164]\n", " [ 0. 0.6454 0.11273 -0.08889 0.00025 -0.07508]\n", " [ 0. 0. 0. 0.00301 -0.43468 -0.32791]\n", " [ 0. 0. -0. 0.57061 0.14607 -0.22942]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25069 -0.46549 -0.09438 0.16511 1.15184]\n", " [ 0. 0.11427 -0.64697 -0.05918 0.06663 -0.07366]\n", " [ 0. 0.33965 0.42396 -0.06274 -0.1145 -0.28201]\n", " [ 0. -0. -0. 0.14923 -0.43816 -0.39018]\n", " [ 0. -0. 0. 0.56713 -0.00014 0.089 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.17645 0.49839 0.03559 0.18682 1.15184]\n", " [ 0. 0.43716 -0.63241 -0.08934 -0.0941 -0.15944]\n", " [ 0. 0.35421 0.10107 0.08325 -0.03494 0.244 ]\n", " [ 0. 0. -0. 0.14983 -0.56643 -0.23867]\n", " [ 0. 0. -0. 0.43886 -0.00074 0.32124]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.49052 0.19726 0.13273 0.1362 1.15184]\n", " [ 0. 0.08997 -0.36883 0.04481 -0.07623 0.23707]\n", " [ 0. 0.61779 0.44826 0.12842 0.02603 0.16957]\n", " [ 0. -0. -0. 0.04533 -0.59689 -0.0219 ]\n", " [ 0. -0. 0. 0.4084 0.10375 0.3996 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.05861 -0.52544 -0.18752 -0.03171 1.15184]\n", " [ 0. 0.26401 -0.7114 -0.10901 0.00651 0.03705]\n", " [ 0. 0.27523 0.27422 0.04867 -0.10341 -0.28911]\n", " [ 0. -0. -0. -0.02412 -0.5035 -0.21798]\n", " [ 0. -0. 0. 0.50179 0.17321 -0.33562]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.42632 0.3127 0.15367 -0.11205 1.15184]\n", " [ 0. 0.46015 -0.38798 -0.00094 0.13396 -0.26911]\n", " [ 0. 0.59864 0.07808 -0.08191 0.01822 0.11198]\n", " [ 0. -0. -0. 0.07608 -0.40399 0.39244]\n", " [ 0. -0. 0. 0.60131 0.07301 0.07843]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.28513 0.44522 0.02764 -0.18816 1.15184]\n", " [ 0. 0.0929 -0.6219 -0.03827 0.07706 0.09475]\n", " [ 0. 0.36473 0.44533 -0.09758 -0.0898 0.27565]\n", " [ 0. 0. 0. 0.17316 -0.50606 0.33082]\n", " [ 0. 0. -0. 0.49923 -0.02407 -0.2252 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.13935 -0.51001 0.08825 0.16847 1.15184]\n", " [ 0. 0.41495 -0.65554 0.10738 0.0682 0.14108]\n", " [ 0. 0.33108 0.12328 -0.07764 0.05272 -0.25506]\n", " [ 0. 0. 0. 0.10175 -0.59749 -0.13524]\n", " [ 0. 0. -0. 0.4078 0.04733 0.37665]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.51295 -0.1281 0.16661 0.09172 1.15184]\n", " [ 0. 0.13055 -0.32482 -0.0384 0.08686 -0.2581 ]\n", " [ 0. 0.6618 0.40768 -0.12637 0.00053 -0.13544]\n", " [ 0. -0. -0. -0.00218 -0.5647 0.09525]\n", " [ 0. -0. 0. 0.44059 0.15126 0.3887 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.08966 0.52104 0.1861 -0.03921 1.15184]\n", " [ 0. 0.23824 -0.70926 -0.09843 0.03916 -0.01984]\n", " [ 0. 0.27736 0.29999 0.01325 -0.11658 0.2908 ]\n", " [ 0. 0. 0. 0.00179 -0.43599 0.3258 ]\n", " [ 0. 0. -0. 0.5693 0.1473 0.2324 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.38462 -0.36275 -0.09587 0.16425 1.15184]\n", " [ 0. 0.48008 -0.4378 0.0441 0.12826 0.25329]\n", " [ 0. 0.54882 0.05815 -0.07373 0.03401 -0.14422]\n", " [ 0. 0. -0. 0.14805 -0.43682 -0.39097]\n", " [ 0. 0. -0. 0.56847 0.00104 0.08545]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.32045 -0.42052 0.03428 0.18707 1.15184]\n", " [ 0. 0.07436 -0.59158 -0.02132 0.08061 -0.11688]\n", " [ 0. 0.39504 0.46387 -0.11992 -0.06046 -0.26701]\n", " [ 0. -0. -0. 0.15072 -0.56536 -0.24093]\n", " [ 0. -0. 0. 0.43993 -0.00163 0.31955]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.10382 0.51841 0.13184 0.13707 1.15184]\n", " [ 0. 0.39122 -0.67408 -0.11775 -0.04036 -0.12314]\n", " [ 0. 0.31254 0.14701 0.06809 -0.06971 0.26418]\n", " [ 0. 0. 0. 0.04657 -0.59727 -0.02451]\n", " [ 0. 0. -0. 0.40802 0.10252 0.39945]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.52613 0.05211 -0.18726 -0.03321 1.15184]\n", " [ 0. 0.18492 -0.29207 -0.02569 0.09958 0.27505]\n", " [ 0. 0.69455 0.35331 -0.11698 0.02697 0.09645]\n", " [ 0. 0. 0. -0.0241 -0.50509 -0.21529]\n", " [ 0. 0. -0. 0.50021 0.17319 -0.33736]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.1208 -0.51471 -0.15474 0.11056 1.15184]\n", " [ 0. 0.21256 -0.704 -0.0764 0.06849 0.00234]\n", " [ 0. 0.28262 0.32567 -0.03009 -0.11643 -0.29147]\n", " [ 0. -0. -0. 0.07418 -0.40397 -0.39167]\n", " [ 0. -0. 0. 0.60132 0.07491 -0.0822 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.3414 0.4037 0.02915 -0.18794 1.15184]\n", " [ 0. 0.48715 -0.48634 0.08109 0.10918 -0.23547]\n", " [ 0. 0.50028 0.05108 -0.06571 0.04664 0.17179]\n", " [ 0. -0. 0. 0.1732 -0.50448 0.33261]\n", " [ 0. -0. 0. 0.50081 -0.02411 -0.22255]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35642 0.3905 0.08715 0.16904 1.15184]\n", " [ 0. 0.06008 -0.55569 0.00871 -0.08097 0.14006]\n", " [ 0. 0.43093 0.47815 0.13206 0.0303 0.25562]\n", " [ 0. -0. -0. 0.10299 -0.59713 -0.1377 ]\n", " [ 0. -0. 0. 0.40816 0.0461 0.37576]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.06964 -0.52409 0.16596 0.09289 1.15184]\n", " [ 0. 0.36655 -0.68849 0.12118 0.01009 0.10557]\n", " [ 0. 0.29813 0.17168 -0.05297 0.086 -0.27168]\n", " [ 0. 0. 0. -0.00129 -0.56577 0.09251]\n", " [ 0. 0. -0. 0.43952 0.15038 0.38936]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.52797 0.02778 0.18645 -0.03751 1.15184]\n", " [ 0. 0.24872 -0.27612 -0.0026 0.11115 -0.28645]\n", " [ 0. 0.7105 0.28951 -0.09978 0.05169 -0.05389]\n", " [ 0. -0. -0. 0.00058 -0.43733 0.32367]\n", " [ 0. -0. 0. 0.56796 0.1485 0.23536]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.15225 0.5063 -0.09737 0.16337 1.15184]\n", " [ 0. 0.1871 -0.69545 0.04699 -0.08739 0.01561]\n", " [ 0. 0.29117 0.35113 0.07153 0.10014 0.29106]\n", " [ 0. -0. -0. 0.14683 -0.43549 -0.39173]\n", " [ 0. -0. 0. 0.5698 0.00225 0.08189]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.29824 -0.43655 -0.03296 -0.1873 1.15184]\n", " [ 0. 0.48399 -0.53093 -0.10652 -0.08352 0.21663]\n", " [ 0. 0.4557 0.05424 0.0584 -0.05707 -0.19501]\n", " [ 0. -0. 0. 0.1516 -0.56428 0.24317]\n", " [ 0. -0. 0. 0.44101 -0.00251 -0.31785]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.39255 -0.35416 -0.13094 -0.13793 1.15184]\n", " [ 0. 0.05198 -0.51424 -0.00112 -0.08055 -0.16415]\n", " [ 0. 0.47238 0.48625 0.13601 -0.00004 -0.24086]\n", " [ 0. 0. 0. 0.04781 -0.59763 0.02712]\n", " [ 0. 0. -0. 0.40767 0.10128 -0.39928]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.03658 0.52743 0.18699 0.03471 1.15184]\n", " [ 0. 0.34131 -0.69917 -0.11636 0.02309 -0.0883 ]\n", " [ 0. 0.28746 0.19692 0.02993 -0.1001 0.27778]\n", " [ 0. 0. 0. -0.02405 -0.50666 0.21258]\n", " [ 0. 0. -0. 0.49863 0.17313 0.33907]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.51761 -0.10773 0.1558 -0.10907 1.15184]\n", " [ 0. 0.31493 -0.28003 -0.03091 -0.11496 0.29131]\n", " [ 0. 0.70659 0.2233 0.0763 -0.07068 0.00971]\n", " [ 0. -0. -0. 0.07228 -0.404 0.39086]\n", " [ 0. -0. 0. 0.60129 0.07681 0.08597]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.18423 -0.49557 -0.03066 0.1877 1.15184]\n", " [ 0. 0.16204 -0.68337 -0.01822 0.09407 -0.03414]\n", " [ 0. 0.30325 0.37618 -0.10232 -0.07307 -0.28947]\n", " [ 0. -0. -0. 0.17321 -0.5029 -0.33439]\n", " [ 0. -0. 0. 0.50239 -0.02413 0.21987]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25613 0.46251 -0.08604 -0.16961 1.15184]\n", " [ 0. 0.47324 -0.57026 0.12199 0.05538 -0.19746]\n", " [ 0. 0.41636 0.06499 -0.05089 0.06671 0.2144 ]\n", " [ 0. -0. 0. 0.10422 -0.59675 0.14015]\n", " [ 0. -0. 0. 0.40854 0.04486 -0.37485]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.42794 0.31047 -0.1653 -0.09405 1.15184]\n", " [ 0. 0.05245 -0.4679 0.01046 0.08053 0.1888 ]\n", " [ 0. 0.51872 0.48578 -0.13202 0.03109 0.22206]\n", " [ 0. 0. 0. -0.0004 -0.56683 -0.08977]\n", " [ 0. 0. -0. 0.43846 0.14949 -0.39 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.00439 -0.52868 -0.18678 0.03582 1.15184]\n", " [ 0. 0.31575 -0.70641 -0.10028 0.05745 0.07122]\n", " [ 0. 0.28021 0.22248 -0.0025 -0.10782 -0.28264]\n", " [ 0. -0. -0. -0.00059 -0.43868 -0.32152]\n", " [ 0. -0. 0. 0.56661 0.14968 -0.23829]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.49576 0.18371 0.09886 -0.16247 1.15184]\n", " [ 0. 0.37579 -0.30303 0.06747 0.10604 -0.2895 ]\n", " [ 0. 0.68359 0.16244 -0.05212 0.08047 0.03384]\n", " [ 0. -0. -0. 0.1456 -0.43418 0.39246]\n", " [ 0. -0. 0. 0.57111 0.00349 -0.07831]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.2169 0.48216 0.03163 0.18753 1.15184]\n", " [ 0. 0.13768 -0.66742 -0.00508 -0.09229 0.05338]\n", " [ 0. 0.31921 0.40055 0.12105 0.04234 0.28654]\n", " [ 0. -0. -0. 0.15246 -0.56319 -0.24541]\n", " [ 0. -0. 0. 0.4421 -0.00337 0.31612]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21558 -0.48275 -0.13004 -0.13878 1.15184]\n", " [ 0. 0.45711 -0.60397 -0.12954 -0.02569 0.17837]\n", " [ 0. 0.38266 0.08112 0.04145 -0.07636 -0.23053]\n", " [ 0. -0. -0. 0.04905 -0.59797 0.02973]\n", " [ 0. -0. 0. 0.40733 0.10004 -0.39909]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.46119 -0.2585 0.18671 0.0362 1.15184]\n", " [ 0. 0.06421 -0.41846 0.02203 0.0808 -0.21339]\n", " [ 0. 0.56816 0.47402 -0.11849 0.06272 -0.19856]\n", " [ 0. -0. -0. -0.02397 -0.50823 0.20987]\n", " [ 0. -0. 0. 0.49706 0.17306 0.34075]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.02717 0.528 0.15684 -0.10756 1.15184]\n", " [ 0. 0.29002 -0.71045 -0.07151 0.08677 -0.05422]\n", " [ 0. 0.27617 0.24821 -0.04124 -0.10318 0.28639]\n", " [ 0. 0. 0. 0.07038 -0.40406 0.39001]\n", " [ 0. 0. -0. 0.60123 0.0787 0.08972]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.4645 -0.25251 0.03217 -0.18744 1.15184]\n", " [ 0. 0.42516 -0.34087 -0.09802 -0.08644 0.28172]\n", " [ 0. 0.64575 0.11307 0.03318 -0.08252 -0.07476]\n", " [ 0. -0. 0. 0.17321 -0.50131 0.33615]\n", " [ 0. -0. 0. 0.50398 -0.02412 -0.21717]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25041 -0.46564 0.08493 0.17017 1.15184]\n", " [ 0. 0.11446 -0.64716 0.02264 0.08622 -0.07349]\n", " [ 0. 0.33947 0.42377 -0.13006 -0.01134 -0.28206]\n", " [ 0. -0. -0. 0.10545 -0.59635 -0.1426 ]\n", " [ 0. -0. 0. 0.40894 0.04363 0.37393]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.17676 0.49828 -0.16464 -0.09521 1.15184]\n", " [ 0. 0.43733 -0.6322 0.12963 -0.00613 -0.1596 ]\n", " [ 0. 0.35442 0.1009 -0.02791 0.08584 0.2439 ]\n", " [ 0. -0. -0. 0.00051 -0.56788 -0.08704]\n", " [ 0. -0. 0. 0.43742 0.14858 -0.39062]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "[[ 2.78023 0.49031 0.1978 0.1871 -0.03412 1.15184]\n", " [ 0. 0.0897 -0.36922 -0.03835 -0.07962 0.23689]\n", " [ 0. 0.6174 0.44853 0.09323 -0.09212 0.16983]\n", " [ 0. -0. -0. -0.00174 -0.44006 0.31935]\n", " [ 0. -0. 0. 0.56524 0.15082 0.24119]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.05836 -0.52547 -0.10034 0.16156 1.15184]\n", " [ 0. 0.26423 -0.7114 -0.0352 0.10341 0.03719]\n", " [ 0. 0.27522 0.274 -0.07731 -0.08414 -0.28909]\n", " [ 0. -0. -0. 0.14433 -0.43289 -0.39316]\n", " [ 0. -0. 0. 0.5724 0.00476 0.07471]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.42665 0.31224 -0.0303 -0.18775 1.15184]\n", " [ 0. 0.45992 -0.38757 0.11903 0.06142 -0.26923]\n", " [ 0. 0.59905 0.07831 -0.02073 0.08135 0.11169]\n", " [ 0. -0. 0. 0.15331 -0.56208 0.24765]\n", " [ 0. -0. 0. 0.44321 -0.00422 -0.31437]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.28484 0.44541 -0.12913 -0.13962 1.15184]\n", " [ 0. 0.09306 -0.62213 0.03605 0.07815 0.09457]\n", " [ 0. 0.3645 0.44517 -0.13113 0.01965 0.27571]\n", " [ 0. 0. 0. 0.05029 -0.59829 0.03233]\n", " [ 0. 0. -0. 0.407 0.0988 -0.39889]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.13965 -0.50992 0.18641 0.03768 1.15184]\n", " [ 0. 0.41514 -0.65537 0.12063 -0.04042 0.14123]\n", " [ 0. 0.33125 0.12308 -0.00794 0.09348 -0.25497]\n", " [ 0. 0. 0. -0.02387 -0.5098 0.20716]\n", " [ 0. 0. -0. 0.49549 0.17296 0.34241]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.5128 -0.1287 0.15787 -0.10605 1.15184]\n", " [ 0. 0.13016 -0.32515 0.05967 0.07381 -0.25794]\n", " [ 0. 0.66147 0.40807 -0.05737 0.11265 -0.13574]\n", " [ 0. -0. -0. 0.06849 -0.40416 0.38913]\n", " [ 0. -0. 0. 0.60113 0.0806 0.09347]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.08941 0.52109 0.03368 -0.18718 1.15184]\n", " [ 0. 0.23845 -0.70929 -0.00069 0.10596 -0.01998]\n", " [ 0. 0.27733 0.29978 -0.10303 -0.05608 0.29079]\n", " [ 0. 0. 0. 0.17317 -0.49971 0.33789]\n", " [ 0. 0. -0. 0.50558 -0.02408 -0.21445]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.38497 -0.36238 -0.08381 -0.17072 1.15184]\n", " [ 0. 0.47997 -0.43739 -0.13126 -0.03412 0.25343]\n", " [ 0. 0.54923 0.05826 0.01232 -0.08027 -0.14398]\n", " [ 0. -0. 0. 0.10668 -0.59594 0.14505]\n", " [ 0. -0. 0. 0.40935 0.04241 -0.37299]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.32015 -0.42075 0.16397 0.09636 1.15184]\n", " [ 0. 0.0745 -0.59185 0.04715 0.0688 -0.1167 ]\n", " [ 0. 0.39477 0.46373 -0.12411 0.05127 -0.2671 ]\n", " [ 0. -0. -0. 0.00143 -0.56891 0.0843 ]\n", " [ 0. -0. 0. 0.43639 0.14766 0.39122]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.1041 0.51835 -0.1874 0.03243 1.15184]\n", " [ 0. 0.39142 -0.67394 0.09938 -0.07498 -0.12329]\n", " [ 0. 0.31268 0.14681 0.01966 0.09541 0.26412]\n", " [ 0. -0. -0. -0.00285 -0.44144 -0.31716]\n", " [ 0. -0. 0. 0.56385 0.15194 -0.24407]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.52606 0.05276 0.10182 -0.16063 1.15184]\n", " [ 0. 0.18442 -0.29228 -0.0824 -0.06143 0.27494]\n", " [ 0. 0.69434 0.35381 0.01936 -0.11854 0.09679]\n", " [ 0. -0. -0. 0.14304 -0.43162 0.39383]\n", " [ 0. -0. 0. 0.57367 0.00605 -0.0711 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.12054 -0.51478 0.02897 0.18796 1.15184]\n", " [ 0. 0.21277 -0.70406 0.02677 0.09908 0.00248]\n", " [ 0. 0.28257 0.32546 -0.11748 -0.02556 -0.29146]\n", " [ 0. -0. -0. 0.15415 -0.56095 -0.24988]\n", " [ 0. -0. 0. 0.44434 -0.00506 0.31261]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.34176 0.4034 0.12822 0.14046 1.15184]\n", " [ 0. 0.48714 -0.48595 -0.1359 -0.00512 -0.23562]\n", " [ 0. 0.50067 0.05109 0.00469 -0.08044 0.17158]\n", " [ 0. 0. 0. 0.05154 -0.5986 -0.03492]\n", " [ 0. 0. -0. 0.40669 0.09755 0.39867]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35612 0.39077 0.18611 0.03916 1.15184]\n", " [ 0. 0.06017 -0.55601 -0.05737 -0.05781 0.13987]\n", " [ 0. 0.43061 0.47805 0.10683 -0.08332 0.25572]\n", " [ 0. -0. -0. -0.02374 -0.51136 0.20444]\n", " [ 0. -0. 0. 0.49393 0.17283 0.34404]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.06991 -0.52406 0.15888 -0.10452 1.15184]\n", " [ 0. 0.36675 -0.68839 0.06474 -0.10296 0.10572]\n", " [ 0. 0.29824 0.17148 0.05197 0.08657 -0.27163]\n", " [ 0. 0. 0. 0.06659 -0.40429 0.38821]\n", " [ 0. 0. -0. 0.601 0.08249 0.09721]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.528 0.02712 0.0352 -0.1869 1.15184]\n", " [ 0. 0.24817 -0.27617 0.10203 0.04398 -0.28638]\n", " [ 0. 0.71045 0.29006 0.0106 0.11194 -0.05425]\n", " [ 0. -0. -0. 0.17311 -0.49812 0.33962]\n", " [ 0. -0. 0. 0.50718 -0.02402 -0.2117 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.15199 0.50638 -0.08269 -0.17127 1.15184]\n", " [ 0. 0.18731 -0.69554 0.04711 0.08736 0.01546]\n", " [ 0. 0.29109 0.35092 -0.12295 0.00456 0.29106]\n", " [ 0. 0. 0. 0.1079 -0.59551 0.14749]\n", " [ 0. 0. -0. 0.40978 0.04119 -0.37203]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.29859 -0.43631 -0.16329 -0.0975 1.15184]\n", " [ 0. 0.48405 -0.53058 -0.13283 0.02608 0.21679]\n", " [ 0. 0.45604 0.05418 -0.00512 -0.08148 -0.19483]\n", " [ 0. -0. -0. 0.00236 -0.56992 -0.08157]\n", " [ 0. -0. 0. 0.43537 0.14673 -0.3918 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.39225 -0.35449 -0.18768 0.03074 1.15184]\n", " [ 0. 0.05201 -0.5146 -0.06731 -0.04427 -0.16395]\n", " [ 0. 0.47202 0.48622 0.07638 -0.11254 -0.24099]\n", " [ 0. 0. 0. -0.00395 -0.44285 -0.31495]\n", " [ 0. 0. -0. 0.56244 0.15303 -0.24692]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.03685 0.52741 -0.10329 0.15969 1.15184]\n", " [ 0. 0.34152 -0.69909 0.02291 -0.11642 -0.08844]\n", " [ 0. 0.28753 0.19671 0.08117 0.06573 0.27773]\n", " [ 0. -0. -0. 0.14172 -0.43037 -0.39447]\n", " [ 0. -0. 0. 0.57492 0.00736 0.06748]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.51774 -0.10708 -0.02763 -0.18816 1.15184]\n", " [ 0. 0.3144 -0.27992 -0.11658 -0.02379 0.2913 ]\n", " [ 0. 0.70671 0.22383 -0.02911 -0.09992 0.01008]\n", " [ 0. -0. -0. 0.15497 -0.55981 0.2521 ]\n", " [ 0. -0. 0. 0.44548 -0.00588 -0.31082]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.18396 -0.49566 -0.1273 -0.14129 1.15184]\n", " [ 0. 0.16225 -0.68349 -0.06208 -0.07302 -0.03398]\n", " [ 0. 0.30313 0.37598 0.12097 -0.0342 -0.28949]\n", " [ 0. 0. 0. 0.05279 -0.59889 0.03752]\n", " [ 0. 0. -0. 0.4064 0.0963 -0.39844]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25648 0.46232 -0.18579 -0.04062 1.15184]\n", " [ 0. 0.47335 -0.56996 0.12004 -0.05953 -0.19762]\n", " [ 0. 0.41666 0.06488 0.01958 0.08156 0.21426]\n", " [ 0. -0. -0. -0.02359 -0.51291 -0.20172]\n", " [ 0. -0. 0. 0.49238 0.17268 -0.34564]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.42766 0.31086 -0.15988 0.10299 1.15184]\n", " [ 0. 0.05241 -0.4683 0.07625 0.02788 0.1886 ]\n", " [ 0. 0.51832 0.48582 -0.03348 0.13144 0.22223]\n", " [ 0. 0. 0. 0.0647 -0.40447 -0.38726]\n", " [ 0. 0. -0. 0.60083 0.08439 -0.10094]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.00466 -0.52868 0.03671 -0.1866 1.15184]\n", " [ 0. 0.31596 -0.70637 -0.01578 -0.11452 0.07136]\n", " [ 0. 0.28025 0.22227 0.10091 0.03799 -0.2826 ]\n", " [ 0. 0. 0. 0.17302 -0.49651 0.34133]\n", " [ 0. 0. -0. 0.50878 -0.02394 -0.20893]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.49598 0.18311 0.08156 0.1718 1.15184]\n", " [ 0. 0.37533 -0.30277 -0.12563 -0.00169 -0.28955]\n", " [ 0. 0.68385 0.1629 -0.03881 -0.08773 0.03348]\n", " [ 0. 0. 0. 0.10911 -0.59506 -0.14993]\n", " [ 0. 0. -0. 0.41023 0.03997 0.37105]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21663 0.48228 -0.16261 -0.09863 1.15184]\n", " [ 0. 0.13788 -0.66756 0.07323 0.05644 0.05322]\n", " [ 0. 0.31906 0.40035 -0.11112 0.06397 0.28657]\n", " [ 0. 0. 0. 0.0033 -0.57092 -0.07884]\n", " [ 0. 0. -0. 0.43437 0.14578 -0.39236]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21591 -0.48261 -0.18795 0.02905 1.15184]\n", " [ 0. 0.45726 -0.60371 -0.09428 0.0925 0.17853]\n", " [ 0. 0.38291 0.08097 -0.03972 -0.07724 -0.2304 ]\n", " [ 0. -0. -0. -0.00501 -0.44427 -0.31271]\n", " [ 0. -0. 0. 0.56102 0.1541 -0.24974]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.46093 -0.25897 -0.10476 0.15873 1.15184]\n", " [ 0. 0.06406 -0.41887 -0.08308 -0.01036 -0.21319]\n", " [ 0. 0.56775 0.47417 -0.0128 -0.13348 -0.19877]\n", " [ 0. 0. 0. 0.14038 -0.42915 -0.39507]\n", " [ 0. 0. -0. 0.57614 0.00871 0.06384]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.02691 0.52802 -0.02629 -0.18836 1.15184]\n", " [ 0. 0.29023 -0.71043 0.04581 0.10271 -0.05436]\n", " [ 0. 0.27619 0.248 -0.11072 -0.00908 0.28636]\n", " [ 0. 0. 0. 0.15578 -0.55866 0.25431]\n", " [ 0. 0. -0. 0.44663 -0.00669 -0.30901]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.46479 -0.25198 -0.12638 -0.14212 1.15184]\n", " [ 0. 0.42481 -0.34051 -0.12866 0.02273 0.28181]\n", " [ 0. 0.64611 0.11342 -0.04391 -0.0774 -0.07444]\n", " [ 0. -0. -0. 0.05404 -0.59916 0.04011]\n", " [ 0. -0. 0. 0.40613 0.09504 -0.39818]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25013 -0.46579 0.18547 0.04209 1.15184]\n", " [ 0. 0.11464 -0.64734 0.0811 0.03704 -0.07332]\n", " [ 0. 0.33928 0.42359 -0.09111 0.09347 -0.2821 ]\n", " [ 0. -0. -0. -0.02342 -0.51445 0.19899]\n", " [ 0. -0. 0. 0.49084 0.17251 0.34722]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.17707 0.49817 -0.16086 0.10145 1.15184]\n", " [ 0. 0.43751 -0.63199 0.05483 -0.11765 -0.15975]\n", " [ 0. 0.35463 0.10072 0.06304 0.06456 0.2438 ]\n", " [ 0. -0. -0. 0.06281 -0.40467 -0.38627]\n", " [ 0. -0. 0. 0.60062 0.08627 -0.10466]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.49009 0.19833 0.03824 -0.1863 1.15184]\n", " [ 0. 0.08943 -0.36962 -0.08813 0.00596 0.2367 ]\n", " [ 0. 0.61701 0.4488 -0.05072 -0.12089 0.17009]\n", " [ 0. -0. -0. 0.17291 -0.49491 0.34302]\n", " [ 0. -0. 0. 0.51038 -0.02382 -0.20614]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.0581 -0.5255 0.08043 0.17234 1.15184]\n", " [ 0. 0.26444 -0.71141 0.0674 0.086 0.03733]\n", " [ 0. 0.27522 0.27379 -0.11269 0.01878 -0.28908]\n", " [ 0. -0. -0. 0.11033 -0.5946 -0.15237]\n", " [ 0. -0. 0. 0.41069 0.03876 0.37006]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.42698 0.31179 -0.16192 -0.09976 1.15184]\n", " [ 0. 0.4597 -0.38717 0.12423 -0.05003 -0.26935]\n", " [ 0. 0.59945 0.07853 0.04816 0.0688 0.1114 ]\n", " [ 0. -0. -0. 0.00426 -0.5719 -0.07611]\n", " [ 0. -0. 0. 0.43339 0.14483 -0.39289]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.28455 0.44559 0.1882 -0.02736 1.15184]\n", " [ 0. 0.09323 -0.62235 -0.08486 -0.01446 0.09439]\n", " [ 0. 0.36427 0.445 0.05801 -0.11922 0.27577]\n", " [ 0. -0. -0. -0.00604 -0.44571 0.31046]\n", " [ 0. -0. 0. 0.55958 0.15513 0.25253]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.78023 0.13995 -0.50984 -0.10622 0.15776 1.15184]\n", " [ 0. 0.41534 -0.6552 -0.00882 0.12694 0.14138]\n", " [ 0. 0.33143 0.12289 -0.08331 -0.04307 -0.25489]\n", " [ 0. -0. -0. 0.13901 -0.42795 -0.39565]\n", " [ 0. -0. 0. 0.57735 0.01008 0.06019]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.51265 -0.1293 0.02494 0.18854 1.15184]\n", " [ 0. 0.12976 -0.32548 -0.09254 0.02082 -0.25778]\n", " [ 0. 0.66115 0.40847 -0.07557 -0.1014 -0.13604]\n", " [ 0. 0. 0. 0.15657 -0.55749 -0.25651]\n", " [ 0. 0. -0. 0.4478 -0.00748 0.30718]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.08915 0.52113 0.12546 0.14293 1.15184]\n", " [ 0. 0.23866 -0.70932 -0.08252 -0.06652 -0.02013]\n", " [ 0. 0.2773 0.29957 0.10801 -0.04571 0.29078]\n", " [ 0. -0. 0. 0.0553 -0.59942 -0.0427 ]\n", " [ 0. 0. 0. 0.40587 0.09379 0.39792]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.38533 -0.362 -0.18513 -0.04354 1.15184]\n", " [ 0. 0.47986 -0.43698 -0.10961 0.07987 0.25357]\n", " [ 0. 0.54965 0.05837 -0.05433 -0.06037 -0.14373]\n", " [ 0. 0. 0. -0.02322 -0.51599 -0.19626]\n", " [ 0. 0. 0. 0.48931 0.17231 -0.34877]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.31986 -0.42097 0.16183 -0.0999 1.15184]\n", " [ 0. 0.07463 -0.59213 0.08287 -0.00961 -0.11651]\n", " [ 0. 0.3945 0.4636 -0.01264 0.13368 -0.26718]\n", " [ 0. 0. 0. 0.06093 -0.40492 0.38525]\n", " [ 0. 0. 0. 0.60037 0.08815 0.10837]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.10439 0.51829 -0.03976 0.18598 1.15184]\n", " [ 0. 0.39162 -0.67381 -0.03259 -0.12018 -0.12344]\n", " [ 0. 0.31282 0.14661 0.09585 0.01726 0.26405]\n", " [ 0. 0. 0. 0.17277 -0.4933 -0.3447 ]\n", " [ 0. 0. 0. 0.51199 -0.02368 0.20333]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.526 0.05341 0.0793 0.17286 1.15184]\n", " [ 0. 0.18393 -0.29249 0.09628 -0.03577 0.27482]\n", " [ 0. 0.69414 0.3543 0.08901 0.08073 0.09713]\n", " [ 0. 0. -0. 0.11153 -0.59412 -0.1548 ]\n", " [ 0. 0. -0. 0.41117 0.03755 0.36905]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.12029 -0.51484 0.16122 0.10088 1.15184]\n", " [ 0. 0.21298 -0.70411 0.09255 0.04444 0.00263]\n", " [ 0. 0.28251 0.32525 -0.09606 0.07226 -0.29146]\n", " [ 0. 0. 0. 0.00523 -0.57287 0.07339]\n", " [ 0. 0. 0. 0.43242 0.14386 0.39341]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.34211 0.40309 0.18844 -0.02568 1.15184]\n", " [ 0. 0.48712 -0.48557 -0.08139 0.10896 -0.23578]\n", " [ 0. 0.50106 0.05111 -0.06359 -0.04948 0.17137]\n", " [ 0. 0. -0. -0.00705 -0.44716 0.30819]\n", " [ 0. 0. -0. 0.55813 0.15614 0.2553 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35582 0.39105 -0.10767 0.15677 1.15184]\n", " [ 0. 0.06027 -0.55633 0.07539 -0.03085 0.13967]\n", " [ 0. 0.43029 0.47796 0.03592 0.13063 0.25583]\n", " [ 0. 0. -0. 0.13762 -0.42677 -0.39619]\n", " [ 0. 0. -0. 0.57853 0.01147 0.05653]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.07019 -0.52402 0.02358 0.18871 1.15184]\n", " [ 0. 0.36696 -0.68828 0.06382 0.10357 0.10586]\n", " [ 0. 0.29834 0.17127 -0.10059 0.00844 -0.27157]\n", " [ 0. 0. 0. 0.15735 -0.55631 -0.25871]\n", " [ 0. 0. 0. 0.44899 -0.00826 0.30533]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.52804 0.02645 0.12452 0.14375 1.15184]\n", " [ 0. 0.24762 -0.27623 -0.09775 0.05267 -0.28631]\n", " [ 0. 0.7104 0.29061 -0.0944 -0.06122 -0.05461]\n", " [ 0. 0. -0. 0.05656 -0.59966 -0.04528]\n", " [ 0. 0. -0. 0.40563 0.09253 0.39763]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.15173 0.50646 0.18479 0.04499 1.15184]\n", " [ 0. 0.18752 -0.69562 -0.09743 -0.01909 0.01531]\n", " [ 0. 0.291 0.35071 0.07456 -0.09784 0.29107]\n", " [ 0. 0. 0. -0.023 -0.51751 0.19353]\n", " [ 0. 0. 0. 0.48778 0.17209 0.35029]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.29895 -0.43607 -0.16278 0.09834 1.15184]\n", " [ 0. 0.48411 -0.53023 -0.03932 0.12954 0.21695]\n", " [ 0. 0.45639 0.05412 -0.07436 -0.03366 -0.19466]\n", " [ 0. 0. 0. 0.05906 -0.4052 -0.38419]\n", " [ 0. 0. 0. 0.60009 0.09003 -0.11207]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.39195 -0.35482 0.04128 -0.18565 1.15184]\n", " [ 0. 0.05205 -0.51497 0.06607 -0.04611 -0.16375]\n", " [ 0. 0.47166 0.48618 0.07611 0.11272 -0.24113]\n", " [ 0. 0. 0. 0.1726 -0.49169 0.34636]\n", " [ 0. 0. 0. 0.5136 -0.02352 -0.20049]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.03712 0.5274 -0.07816 -0.17338 1.15184]\n", " [ 0. 0.34173 -0.69902 0.08545 0.08236 -0.08858]\n", " [ 0. 0.28761 0.1965 -0.0992 0.0326 0.27769]\n", " [ 0. 0. -0. 0.11273 -0.59363 0.15722]\n", " [ 0. 0. -0. 0.41166 0.03635 -0.36802]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.51788 -0.10643 -0.16052 -0.10199 1.15184]\n", " [ 0. 0.31386 -0.2798 -0.09405 0.07278 0.29129]\n", " [ 0. 0.70682 0.22437 -0.09479 -0.04314 0.01044]\n", " [ 0. 0. 0. 0.0062 -0.57382 -0.07067]\n", " [ 0. 0. 0. 0.43147 0.14288 -0.39391]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.18369 -0.49576 -0.18866 0.024 1.15184]\n", " [ 0. 0.16245 -0.6836 -0.09541 0.00942 -0.03382]\n", " [ 0. 0.30302 0.37578 0.04084 -0.11886 -0.28951]\n", " [ 0. 0. -0. -0.00803 -0.44862 -0.3059 ]\n", " [ 0. 0. -0. 0.55667 0.15711 -0.25804]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25682 0.46214 -0.10912 0.15576 1.15184]\n", " [ 0. 0.47346 -0.56966 -0.0087 -0.13372 -0.19777]\n", " [ 0. 0.41697 0.06476 0.0828 0.01329 0.21411]\n", " [ 0. 0. 0. 0.1362 -0.42561 -0.39669]\n", " [ 0. 0. 0. 0.57968 0.01289 0.05285]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.42737 0.31125 -0.02222 -0.18888 1.15184]\n", " [ 0. 0.05236 -0.4687 -0.05847 0.05632 0.1884 ]\n", " [ 0. 0.51792 0.48587 -0.10339 -0.0878 0.22241]\n", " [ 0. 0. 0. 0.15811 -0.55511 0.2609 ]\n", " [ 0. 0. 0. 0.45018 -0.00903 -0.30346]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.00492 -0.52868 0.12359 0.14455 1.15184]\n", " [ 0. 0.31617 -0.70632 0.09965 0.05863 0.0715 ]\n", " [ 0. 0.2803 0.22206 -0.09235 0.05561 -0.28257]\n", " [ 0. 0. 0. 0.05782 -0.59989 -0.04786]\n", " [ 0. 0. 0. 0.4054 0.09127 0.39733]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.4962 0.18251 0.18443 0.04642 1.15184]\n", " [ 0. 0.37487 -0.30251 -0.08114 0.09586 -0.28959]\n", " [ 0. 0.68411 0.16336 -0.09247 -0.02578 0.03313]\n", " [ 0. 0. -0. -0.02276 -0.51903 0.19079]\n", " [ 0. 0. -0. 0.48626 0.17184 0.35179]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21635 0.48241 0.16372 -0.09677 1.15184]\n", " [ 0. 0.13807 -0.66771 -0.08433 0.03798 0.05306]\n", " [ 0. 0.31891 0.40016 -0.00397 -0.12814 0.28661]\n", " [ 0. 0. 0. 0.05719 -0.40551 0.38309]\n", " [ 0. 0. 0. 0.59978 0.0919 0.11575]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21624 -0.48246 -0.04281 0.1853 1.15184]\n", " [ 0. 0.45741 -0.60346 0.05095 0.12188 0.17868]\n", " [ 0. 0.38317 0.08082 -0.08643 0.00828 -0.23028]\n", " [ 0. 0. 0. 0.17241 -0.49007 -0.348 ]\n", " [ 0. 0. 0. 0.51522 -0.02332 0.19763]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.46067 -0.25943 0.07701 0.17389 1.15184]\n", " [ 0. 0.06391 -0.41929 -0.05347 0.06438 -0.21299]\n", " [ 0. 0.56734 0.47432 -0.1193 -0.06125 -0.19898]\n", " [ 0. 0. -0. 0.11393 -0.59312 -0.15965]\n", " [ 0. 0. -0. 0.41218 0.03516 0.36698]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.02665 0.52803 -0.15981 -0.1031 1.15184]\n", " [ 0. 0.29044 -0.71041 0.10774 0.03235 -0.0545 ]\n", " [ 0. 0.27621 0.24779 -0.07912 0.07794 0.28633]\n", " [ 0. 0. -0. 0.00719 -0.57476 -0.06795]\n", " [ 0. 0. -0. 0.43054 0.14189 -0.39439]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.46508 -0.25145 0.18887 -0.02232 1.15184]\n", " [ 0. 0.42445 -0.34016 0.05489 -0.11853 0.28189]\n", " [ 0. 0.64647 0.11377 0.08867 0.00814 -0.07412]\n", " [ 0. 0. -0. -0.00897 -0.4501 0.30359]\n", " [ 0. 0. -0. 0.55519 0.15806 0.26075]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.24985 -0.46594 -0.11056 0.15474 1.15184]\n", " [ 0. 0.11483 -0.64753 -0.06551 0.06053 -0.07315]\n", " [ 0. 0.33909 0.4234 -0.05098 -0.12014 -0.28215]\n", " [ 0. 0. -0. 0.13476 -0.42448 -0.39717]\n", " [ 0. 0. -0. 0.58081 0.01433 0.04916]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.17739 0.49805 -0.02086 -0.18903 1.15184]\n", " [ 0. 0.43768 -0.63178 0.08186 0.10075 -0.1599 ]\n", " [ 0. 0.35484 0.10055 -0.08558 0.02851 0.2437 ]\n", " [ 0. 0. -0. 0.15886 -0.5539 0.26309]\n", " [ 0. 0. -0. 0.45139 -0.00977 -0.30157]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.48987 0.19887 0.12265 0.14535 1.15184]\n", " [ 0. 0.08916 -0.37001 0.04973 -0.07295 0.23652]\n", " [ 0. 0.61661 0.44907 0.12639 0.03491 0.17035]\n", " [ 0. 0. -0. 0.05908 -0.6001 -0.05044]\n", " [ 0. 0. -0. 0.40519 0.09 0.39701]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.05785 -0.52553 0.18406 0.04786 1.15184]\n", " [ 0. 0.26465 -0.71141 0.10925 0.00282 0.03747]\n", " [ 0. 0.27521 0.27358 -0.0573 0.0988 -0.28906]\n", " [ 0. 0. 0. -0.02249 -0.52054 0.18805]\n", " [ 0. 0. 0. 0.48475 0.17158 0.35327]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.42731 0.31134 -0.16464 0.09519 1.15184]\n", " [ 0. 0.45947 -0.38676 0.01482 -0.13308 -0.26946]\n", " [ 0. 0.59986 0.07876 0.08343 -0.00989 0.11112]\n", " [ 0. 0. 0. 0.05533 -0.40586 -0.38197]\n", " [ 0. 0. 0. 0.59943 0.09376 -0.11942]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.28427 0.44578 0.04434 -0.18494 1.15184]\n", " [ 0. 0.0934 -0.62258 -0.04483 0.07352 0.09421]\n", " [ 0. 0.36404 0.44483 -0.08925 -0.09802 0.27583]\n", " [ 0. 0. 0. 0.17219 -0.48846 0.34962]\n", " [ 0. 0. 0. 0.51683 -0.0231 -0.19475]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.14025 -0.50976 -0.07586 -0.1744 1.15184]\n", " [ 0. 0.41553 -0.65503 -0.10232 -0.07569 0.14153]\n", " [ 0. 0.3316 0.1227 0.08106 -0.04711 -0.25481]\n", " [ 0. 0. -0. 0.11512 -0.59259 0.16207]\n", " [ 0. 0. -0. 0.4127 0.03396 -0.36591]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.51249 -0.1299 0.1591 0.1042 1.15184]\n", " [ 0. 0.12937 -0.3258 -0.04449 0.0837 -0.25762]\n", " [ 0. 0.66082 0.40886 -0.1262 -0.00885 -0.13635]\n", " [ 0. 0. -0. 0.00819 -0.57568 0.06523]\n", " [ 0. 0. -0. 0.42961 0.1409 0.39485]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.08889 0.52117 -0.18906 0.02064 1.15184]\n", " [ 0. 0.23887 -0.70935 0.10186 -0.02942 -0.02027]\n", " [ 0. 0.27727 0.29935 -0.02455 0.11466 0.29077]\n", " [ 0. 0. -0. -0.00989 -0.45159 -0.30126]\n", " [ 0. 0. -0. 0.5537 0.15898 -0.26344]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.38568 -0.36163 0.112 -0.15371 1.15184]\n", " [ 0. 0.47975 -0.43657 -0.03113 -0.13199 0.25371]\n", " [ 0. 0.55006 0.05848 0.0767 -0.02676 -0.14348]\n", " [ 0. 0. -0. 0.13329 -0.42337 0.39761]\n", " [ 0. 0. -0. 0.58192 0.01579 -0.04547]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.78023 -0.31956 -0.42119 0.01949 0.18918 1.15184]\n", " [ 0. 0.07477 -0.5924 -0.02734 0.07884 -0.11632]\n", " [ 0. 0.39422 0.46346 -0.11486 -0.06952 -0.26726]\n", " [ 0. 0. -0. 0.15959 -0.55267 -0.26526]\n", " [ 0. 0. -0. 0.45262 -0.01051 0.29966]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.10468 0.51823 -0.1217 -0.14614 1.15184]\n", " [ 0. 0.39182 -0.67367 0.11468 0.04857 -0.12358]\n", " [ 0. 0.31295 0.14641 -0.07271 0.06474 0.26398]\n", " [ 0. 0. -0. 0.06035 -0.60029 0.05301]\n", " [ 0. 0. -0. 0.405 0.08874 -0.39667]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.52593 0.05406 -0.18369 -0.04928 1.15184]\n", " [ 0. 0.18343 -0.2927 -0.03377 0.09692 0.2747 ]\n", " [ 0. 0.69393 0.3548 -0.119 0.01711 0.09747]\n", " [ 0. 0. 0. -0.0222 -0.52205 -0.18531]\n", " [ 0. 0. 0. 0.48325 0.17129 -0.35471]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.12003 -0.5149 0.16555 -0.09361 1.15184]\n", " [ 0. 0.21319 -0.70417 0.08318 -0.06022 0.00277]\n", " [ 0. 0.28246 0.32504 0.01776 0.11886 -0.29146]\n", " [ 0. 0. 0. 0.05347 -0.40625 0.3808 ]\n", " [ 0. 0. 0. 0.59904 0.09561 0.12308]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.34247 0.40279 0.04587 -0.18457 1.15184]\n", " [ 0. 0.48711 -0.48518 0.07117 0.1159 -0.23593]\n", " [ 0. 0.50144 0.05112 -0.06944 0.04087 0.17116]\n", " [ 0. 0. -0. 0.17194 -0.48684 0.35122]\n", " [ 0. 0. -0. 0.51845 -0.02285 -0.19184]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35552 0.39132 -0.07471 -0.17489 1.15184]\n", " [ 0. 0.06037 -0.55665 -0.01424 0.08022 0.13948]\n", " [ 0. 0.42997 0.47786 -0.12956 -0.03957 0.25594]\n", " [ 0. 0. 0. 0.11631 -0.59204 0.16448]\n", " [ 0. 0. 0. 0.41325 0.03278 -0.36484]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.07047 -0.52398 0.15838 0.10529 1.15184]\n", " [ 0. 0.36717 -0.68818 0.12015 0.01918 0.10601]\n", " [ 0. 0.29844 0.17106 -0.05919 0.08173 -0.27152]\n", " [ 0. 0. 0. 0.0092 -0.57658 0.06252]\n", " [ 0. 0. 0. 0.42871 0.13989 0.39529]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.52807 0.02579 0.18923 -0.01897 1.15184]\n", " [ 0. 0.24707 -0.27628 -0.01314 0.11019 -0.28624]\n", " [ 0. 0.71034 0.29116 -0.10444 0.04203 -0.05497]\n", " [ 0. 0. -0. -0.01078 -0.45309 0.29892]\n", " [ 0. 0. -0. 0.5522 0.15987 0.26609]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.15147 0.50654 -0.11343 0.15266 1.15184]\n", " [ 0. 0.18773 -0.69571 0.05551 -0.08235 0.01516]\n", " [ 0. 0.29092 0.3505 0.06109 0.10674 0.29108]\n", " [ 0. 0. -0. 0.1318 -0.42229 -0.39801]\n", " [ 0. 0. -0. 0.583 0.01728 0.04176]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.2993 -0.43583 0.01812 0.18932 1.15184]\n", " [ 0. 0.48417 -0.52988 0.09977 0.09151 0.21711]\n", " [ 0. 0.45674 0.05406 -0.06247 0.05252 -0.19448]\n", " [ 0. 0. 0. 0.16031 -0.55143 -0.26743]\n", " [ 0. 0. 0. 0.45386 -0.01122 0.29773]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.39166 -0.35515 0.12075 0.14693 1.15184]\n", " [ 0. 0.05208 -0.51533 -0.0043 0.08045 -0.16355]\n", " [ 0. 0.47129 0.48615 -0.13568 -0.00947 -0.24127]\n", " [ 0. 0. -0. 0.06162 -0.60047 -0.05558]\n", " [ 0. 0. -0. 0.40482 0.08747 0.39632]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.03739 0.52738 0.1833 0.0507 1.15184]\n", " [ 0. 0.34194 -0.69894 -0.11798 0.01313 -0.08873]\n", " [ 0. 0.28768 0.19629 0.03827 -0.09713 0.27764]\n", " [ 0. 0. 0. -0.02189 -0.52354 0.18256]\n", " [ 0. 0. 0. 0.48175 0.17098 0.35613]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.51801 -0.10578 -0.16644 0.09202 1.15184]\n", " [ 0. 0.31332 -0.27969 0.01892 0.11734 0.29127]\n", " [ 0. 0.70693 0.2249 -0.08326 0.06268 0.01081]\n", " [ 0. 0. 0. 0.05163 -0.40667 -0.3796 ]\n", " [ 0. 0. 0. 0.59862 0.09746 -0.12673]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.18343 -0.49586 0.0474 -0.18418 1.15184]\n", " [ 0. 0.16266 -0.68372 0.02645 -0.09218 -0.03367]\n", " [ 0. 0.30291 0.37557 0.09538 0.08182 -0.28952]\n", " [ 0. 0. 0. 0.17167 -0.48523 0.3528 ]\n", " [ 0. 0. 0. 0.52007 -0.02258 -0.18892]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25716 0.46194 -0.07355 -0.17539 1.15184]\n", " [ 0. 0.47358 -0.56935 0.11779 0.06392 -0.19793]\n", " [ 0. 0.41727 0.06465 -0.05532 0.063 0.21396]\n", " [ 0. 0. -0. 0.11749 -0.59148 0.16689]\n", " [ 0. 0. -0. 0.41381 0.0316 -0.36374]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.42709 0.31164 0.15765 0.10637 1.15184]\n", " [ 0. 0.05232 -0.4691 -0.00466 -0.08103 0.18819]\n", " [ 0. 0.51752 0.48591 0.13399 -0.02116 0.22258]\n", " [ 0. 0. -0. 0.01022 -0.57747 0.05981]\n", " [ 0. 0. -0. 0.42782 0.13887 0.39571]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.00518 -0.52868 0.18939 -0.01729 1.15184]\n", " [ 0. 0.31638 -0.70627 0.10545 -0.04748 0.07164]\n", " [ 0. 0.28035 0.22185 -0.00795 0.10748 -0.28253]\n", " [ 0. 0. 0. -0.01165 -0.45461 0.29656]\n", " [ 0. 0. 0. 0.55068 0.16073 0.26872]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.49642 0.18191 0.11485 -0.15159 1.15184]\n", " [ 0. 0.3744 -0.30226 0.05657 0.11207 -0.28963]\n", " [ 0. 0.68437 0.16383 -0.05982 0.07517 0.03278]\n", " [ 0. 0. -0. 0.13029 -0.42123 0.39839]\n", " [ 0. 0. -0. 0.58406 0.01879 -0.03804]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21608 0.48253 -0.01674 -0.18944 1.15184]\n", " [ 0. 0.13827 -0.66786 -0.00201 0.09249 0.0529 ]\n", " [ 0. 0.31876 0.39996 -0.11733 -0.0516 0.28663]\n", " [ 0. 0. 0. 0.16101 -0.55018 0.26959]\n", " [ 0. 0. 0. 0.45511 -0.01192 -0.29577]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21656 -0.48231 -0.1198 -0.14771 1.15184]\n", " [ 0. 0.45756 -0.6032 -0.12747 -0.03472 0.17884]\n", " [ 0. 0.38342 0.08067 0.04653 -0.07328 -0.23016]\n", " [ 0. 0. -0. 0.06288 -0.60063 0.05815]\n", " [ 0. 0. -0. 0.40467 0.0862 -0.39595]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.46041 -0.2599 -0.1829 -0.05211 1.15184]\n", " [ 0. 0.06376 -0.4197 -0.01538 -0.08224 -0.21279]\n", " [ 0. 0.56692 0.47447 0.1234 -0.05255 -0.1992 ]\n", " [ 0. 0. 0. -0.02156 -0.52502 -0.17982]\n", " [ 0. 0. 0. 0.48027 0.17065 -0.35753]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.0264 0.52804 0.16731 -0.09042 1.15184]\n", " [ 0. 0.29066 -0.71039 -0.08021 0.07891 -0.05464]\n", " [ 0. 0.27623 0.24757 -0.03025 -0.10684 0.28631]\n", " [ 0. 0. 0. 0.0498 -0.40713 0.37837]\n", " [ 0. 0. 0. 0.59816 0.09929 0.13036]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.46537 -0.25091 -0.04894 0.18378 1.15184]\n", " [ 0. 0.4241 -0.3398 0.08996 0.09465 0.28198]\n", " [ 0. 0.64682 0.11413 -0.04018 0.07952 -0.07379]\n", " [ 0. 0. 0. 0.17136 -0.48361 -0.35437]\n", " [ 0. 0. 0. 0.52168 -0.02227 0.18597]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.24957 -0.46609 -0.07238 -0.17587 1.15184]\n", " [ 0. 0.11501 -0.64771 -0.01657 -0.08766 -0.07298]\n", " [ 0. 0.33891 0.42322 0.12887 0.02057 -0.28219]\n", " [ 0. 0. 0. 0.11866 -0.59091 0.1693 ]\n", " [ 0. 0. 0. 0.41439 0.03042 -0.36262]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.1777 0.49794 0.15692 0.10745 1.15184]\n", " [ 0. 0.43785 -0.63157 -0.12979 -0.00358 -0.16006]\n", " [ 0. 0.35506 0.10038 0.03411 -0.08348 0.2436 ]\n", " [ 0. 0. 0. 0.01125 -0.57834 0.0571 ]\n", " [ 0. 0. 0. 0.42695 0.13784 0.39611]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.48965 0.19941 0.18954 -0.01563 1.15184]\n", " [ 0. 0.08889 -0.3704 -0.0307 -0.08273 0.23633]\n", " [ 0. 0.61622 0.44934 0.10171 -0.08281 0.1706 ]\n", " [ 0. 0. -0. -0.01248 -0.45613 0.29418]\n", " [ 0. 0. -0. 0.54916 0.16156 0.27132]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.05759 -0.52555 0.11626 -0.15051 1.15184]\n", " [ 0. 0.26487 -0.71142 0.04544 -0.09942 0.03761]\n", " [ 0. 0.27521 0.27336 0.06841 0.09143 -0.28904]\n", " [ 0. 0. 0. 0.12876 -0.4202 0.39873]\n", " [ 0. 0. 0. 0.58509 0.02033 -0.03431]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.42764 0.31088 0.01536 0.18956 1.15184]\n", " [ 0. 0.45924 -0.38636 -0.11389 -0.07039 -0.26958]\n", " [ 0. 0.60026 0.07899 0.02673 -0.07968 0.11083]\n", " [ 0. 0. 0. 0.1617 -0.54891 -0.27174]\n", " [ 0. 0. 0. 0.45638 -0.01261 0.2938 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.28398 0.44596 -0.11884 -0.14848 1.15184]\n", " [ 0. 0.09356 -0.62281 0.03064 0.0805 0.09403]\n", " [ 0. 0.36382 0.44467 -0.13214 0.0104 0.27589]\n", " [ 0. 0. 0. 0.06415 -0.60077 0.06071]\n", " [ 0. 0. 0. 0.40452 0.08493 -0.39557]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.14055 -0.50968 0.1825 0.05351 1.15184]\n", " [ 0. 0.41572 -0.65485 0.12368 -0.0301 0.14168]\n", " [ 0. 0.33177 0.12251 -0.0157 0.09241 -0.25472]\n", " [ 0. 0. 0. -0.0212 -0.52649 0.17707]\n", " [ 0. 0. 0. 0.4788 0.17029 0.3589 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.51234 -0.1305 -0.16817 0.08882 1.15184]\n", " [ 0. 0.12898 -0.32613 -0.0518 -0.07931 -0.25746]\n", " [ 0. 0.66049 0.40925 0.06875 -0.10625 -0.13665]\n", " [ 0. 0. 0. 0.04797 -0.40762 -0.37711]\n", " [ 0. 0. 0. 0.59767 0.10111 -0.13397]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.08864 0.52122 0.05047 -0.18336 1.15184]\n", " [ 0. 0.23909 -0.70938 -0.01013 0.10556 -0.02041]\n", " [ 0. 0.27724 0.29914 -0.09755 -0.06501 0.29076]\n", " [ 0. 0. 0. 0.17103 -0.48199 0.35591]\n", " [ 0. 0. 0. 0.5233 -0.02194 -0.183 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.38603 -0.36125 0.07122 0.17635 1.15184]\n", " [ 0. 0.47964 -0.43616 0.1285 0.04332 0.25385]\n", " [ 0. 0.55047 0.05859 -0.01773 0.07929 -0.14324]\n", " [ 0. 0. 0. 0.11983 -0.59031 -0.17171]\n", " [ 0. 0. 0. 0.41498 0.02926 0.36149]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.31927 -0.42142 -0.15619 -0.10851 1.15184]\n", " [ 0. 0.07491 -0.59267 -0.04206 -0.07209 -0.11613]\n", " [ 0. 0.39395 0.46332 0.12755 -0.04186 -0.26734]\n", " [ 0. 0. 0. 0.01229 -0.5792 -0.05439]\n", " [ 0. 0. 0. 0.42609 0.1368 -0.39649]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.10497 0.51818 0.18967 -0.01396 1.15184]\n", " [ 0. 0.39202 -0.67354 -0.10622 0.06507 -0.12373]\n", " [ 0. 0.31309 0.14621 -0.01042 -0.09677 0.26391]\n", " [ 0. 0. 0. -0.01328 -0.45767 0.29179]\n", " [ 0. 0. 0. 0.54762 0.16237 0.2739 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.52586 0.0547 -0.11767 0.14941 1.15184]\n", " [ 0. 0.18294 -0.29291 0.07582 0.06908 0.27458]\n", " [ 0. 0.69371 0.35529 -0.03106 0.1162 0.0978 ]\n", " [ 0. 0. 0. 0.1272 -0.4192 -0.39903]\n", " [ 0. 0. 0. 0.58609 0.02188 0.03057]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.11977 -0.51496 0.01397 0.18967 1.15184]\n", " [ 0. 0.21341 -0.70422 0.019 0.10095 0.00292]\n", " [ 0. 0.2824 0.32482 -0.11506 -0.03464 -0.29146]\n", " [ 0. 0. -0. 0.16236 -0.54763 -0.27388]\n", " [ 0. 0. -0. 0.45766 -0.01328 0.2918 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.34283 0.40248 -0.11788 -0.14925 1.15184]\n", " [ 0. 0.48709 -0.48479 0.13522 0.01459 -0.23608]\n", " [ 0. 0.50183 0.05114 -0.01006 0.07994 0.17095]\n", " [ 0. 0. -0. 0.06543 -0.6009 0.06327]\n", " [ 0. 0. -0. 0.4044 0.08366 -0.39517]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35522 0.39159 0.18208 0.05491 1.15184]\n", " [ 0. 0.06046 -0.55697 -0.05248 -0.06233 0.13928]\n", " [ 0. 0.42965 0.47777 0.11344 -0.07403 0.25604]\n", " [ 0. 0. -0. -0.02083 -0.52796 0.17431]\n", " [ 0. 0. -0. 0.47734 0.16991 0.36024]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.07075 -0.52395 -0.16901 0.0872 1.15184]\n", " [ 0. 0.36737 -0.68808 -0.07516 0.09571 0.10615]\n", " [ 0. 0.29855 0.17086 -0.04268 -0.09141 -0.27146]\n", " [ 0. 0. -0. 0.04616 -0.40814 -0.37581]\n", " [ 0. 0. -0. 0.59715 0.10293 -0.13757]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.5281 0.02512 0.05201 -0.18293 1.15184]\n", " [ 0. 0.24653 -0.27634 0.09762 0.05263 -0.28617]\n", " [ 0. 0.71028 0.2917 0.00076 0.11264 -0.05533]\n", " [ 0. 0. -0. 0.17067 -0.48037 0.35743]\n", " [ 0. 0. -0. 0.52492 -0.02158 -0.18001]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.15121 0.50662 -0.07004 -0.17682 1.15184]\n", " [ 0. 0.18794 -0.69579 0.04083 0.09056 0.01501]\n", " [ 0. 0.29083 0.35029 -0.12289 -0.00423 0.29109]\n", " [ 0. 0. 0. 0.12099 -0.5897 0.17411]\n", " [ 0. 0. 0. 0.41559 0.0281 -0.36034]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.29965 -0.43558 -0.15544 -0.10958 1.15184]\n", " [ 0. 0.48423 -0.52953 -0.13442 0.01615 0.21726]\n", " [ 0. 0.45709 0.054 0.00073 -0.08159 -0.19431]\n", " [ 0. 0. -0. 0.01334 -0.58004 -0.05169]\n", " [ 0. 0. -0. 0.42525 0.13575 -0.39685]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.39136 -0.35547 0.18978 -0.0123 1.15184]\n", " [ 0. 0.05212 -0.51569 0.06289 0.05036 -0.16334]\n", " [ 0. 0.47093 0.48611 -0.08682 0.10469 -0.24141]\n", " [ 0. 0. -0. -0.01406 -0.45921 0.28938]\n", " [ 0. 0. -0. 0.54608 0.16314 0.27644]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.03766 0.52736 -0.11906 0.1483 1.15184]\n", " [ 0. 0.34215 -0.69887 0.03457 -0.11359 -0.08887]\n", " [ 0. 0.28775 0.19608 0.07409 0.07351 0.2776 ]\n", " [ 0. 0. -0. 0.12563 -0.41823 -0.3993 ]\n", " [ 0. 0. -0. 0.58706 0.02346 0.02682]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.78023 0.51814 -0.10513 0.01258 0.18977 1.15184]\n", " [ 0. 0.31279 -0.27958 0.11424 0.03261 0.29126]\n", " [ 0. 0.70704 0.22544 0.0215 0.10205 0.01117]\n", " [ 0. 0. 0. 0.16301 -0.54634 -0.27601]\n", " [ 0. 0. 0. 0.45895 -0.01393 0.28979]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.18316 -0.49596 0.11691 0.15001 1.15184]\n", " [ 0. 0.16286 -0.68383 0.05692 0.07722 -0.03351]\n", " [ 0. 0.30279 0.37537 -0.123 0.02561 -0.28954]\n", " [ 0. 0. -0. 0.0667 -0.60101 -0.06583]\n", " [ 0. 0. -0. 0.40429 0.08239 0.39475]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.2575 0.46175 0.18166 0.05629 1.15184]\n", " [ 0. 0.47369 -0.56905 -0.12464 0.04928 -0.19809]\n", " [ 0. 0.41757 0.06454 -0.01284 -0.08283 0.21382]\n", " [ 0. 0. 0. -0.02043 -0.52941 0.17156]\n", " [ 0. 0. 0. 0.47588 0.16952 0.36156]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.4268 0.31204 0.16984 -0.08558 1.15184]\n", " [ 0. 0.05227 -0.4695 -0.07302 -0.03541 0.18799]\n", " [ 0. 0.51713 0.48596 0.04693 -0.12728 0.22275]\n", " [ 0. 0. -0. 0.04436 -0.4087 0.37448]\n", " [ 0. 0. -0. 0.59659 0.10473 0.14116]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.00544 -0.52867 -0.05355 0.18249 1.15184]\n", " [ 0. 0.31659 -0.70623 0.00543 0.11555 0.07178]\n", " [ 0. 0.2804 0.22164 -0.09702 -0.04685 -0.2825 ]\n", " [ 0. 0. -0. 0.17028 -0.47876 -0.35893]\n", " [ 0. 0. -0. 0.52653 -0.02119 0.17699]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.49664 0.18131 0.06886 0.17728 1.15184]\n", " [ 0. 0.37394 -0.302 -0.12505 -0.01049 -0.28967]\n", " [ 0. 0.68462 0.16429 -0.03279 -0.09036 0.03243]\n", " [ 0. 0. 0. 0.12215 -0.58908 -0.1765 ]\n", " [ 0. 0. 0. 0.41622 0.02694 0.35918]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21581 0.48265 0.15469 0.11063 1.15184]\n", " [ 0. 0.13847 -0.66801 -0.06896 -0.06171 0.05274]\n", " [ 0. 0.31861 0.39976 0.11552 -0.0555 0.28666]\n", " [ 0. 0. -0. 0.0144 -0.58087 0.04899]\n", " [ 0. 0. -0. 0.42442 0.13469 0.39719]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21689 -0.48216 -0.18988 0.01064 1.15184]\n", " [ 0. 0.45771 -0.60294 -0.10276 0.08307 0.179 ]\n", " [ 0. 0.38368 0.08052 -0.03223 -0.08057 -0.23004]\n", " [ 0. 0. -0. -0.0148 -0.46077 -0.28696]\n", " [ 0. 0. -0. 0.54453 0.16389 -0.27896]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.46015 -0.26036 -0.12045 0.14717 1.15184]\n", " [ 0. 0.06362 -0.42011 -0.08158 -0.01841 -0.21258]\n", " [ 0. 0.56651 0.47461 0.00069 -0.13414 -0.19941]\n", " [ 0. 0. 0. 0.12403 -0.41728 -0.39953]\n", " [ 0. 0. 0. 0.58801 0.02506 0.02306]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.02614 0.52805 -0.01118 -0.18985 1.15184]\n", " [ 0. 0.29087 -0.71037 0.03763 0.10607 -0.05478]\n", " [ 0. 0.27625 0.24736 -0.10958 -0.01772 0.28628]\n", " [ 0. 0. 0. 0.16365 -0.54503 0.27814]\n", " [ 0. 0. 0. 0.46026 -0.01456 -0.28775]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.46565 -0.25038 0.11593 0.15076 1.15184]\n", " [ 0. 0.42375 -0.33944 0.12982 -0.01378 0.28206]\n", " [ 0. 0.64718 0.11448 0.03873 0.08029 -0.07347]\n", " [ 0. 0. 0. 0.06797 -0.6011 -0.06838]\n", " [ 0. 0. 0. 0.40419 0.08111 0.39431]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.24929 -0.46624 0.18123 0.05767 1.15184]\n", " [ 0. 0.1152 -0.6479 0.07785 0.04364 -0.07281]\n", " [ 0. 0.33872 0.42303 -0.09858 0.08548 -0.28223]\n", " [ 0. 0. -0. -0.02001 -0.53085 0.1688 ]\n", " [ 0. 0. -0. 0.47444 0.1691 0.36286]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.17801 0.49783 0.17065 -0.08396 1.15184]\n", " [ 0. 0.43803 -0.63135 -0.0668 0.11136 -0.16021]\n", " [ 0. 0.35527 0.1002 -0.05602 -0.07063 0.2435 ]\n", " [ 0. 0. 0. 0.04257 -0.4093 0.37311]\n", " [ 0. 0. 0. 0.59599 0.10652 0.14473]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.48944 0.19994 -0.05509 0.18203 1.15184]\n", " [ 0. 0.08862 -0.3708 0.08818 0.0017 0.23614]\n", " [ 0. 0.61583 0.44961 0.03976 0.12502 0.17086]\n", " [ 0. 0. 0. 0.16986 -0.47715 -0.36041]\n", " [ 0. 0. 0. 0.52814 -0.02078 0.17396]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.05733 -0.52558 -0.06768 -0.17773 1.15184]\n", " [ 0. 0.26508 -0.71142 -0.06113 -0.09066 0.03775]\n", " [ 0. 0.2752 0.27315 0.11366 -0.01066 -0.28902]\n", " [ 0. 0. 0. 0.12329 -0.58843 0.17889]\n", " [ 0. 0. 0. 0.41686 0.02579 -0.35799]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.42797 0.31043 -0.15394 -0.11168 1.15184]\n", " [ 0. 0.45901 -0.38595 0.12751 -0.04076 -0.2697 ]\n", " [ 0. 0.60067 0.07922 0.04325 0.0721 0.11054]\n", " [ 0. 0. -0. 0.01547 -0.58168 -0.04629]\n", " [ 0. 0. -0. 0.42361 0.13362 -0.39751]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.28369 0.44614 0.18997 -0.00899 1.15184]\n", " [ 0. 0.09373 -0.62303 -0.0832 -0.0224 0.09386]\n", " [ 0. 0.36359 0.4445 0.06913 -0.11307 0.27595]\n", " [ 0. 0. -0. -0.01552 -0.46233 0.28452]\n", " [ 0. 0. -0. 0.54296 0.1646 0.28144]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.14085 -0.50959 0.12183 -0.14603 1.15184]\n", " [ 0. 0.41591 -0.65468 0.02166 -0.12546 0.14183]\n", " [ 0. 0.33194 0.12232 0.0785 0.05117 -0.25464]\n", " [ 0. 0. 0. 0.12241 -0.41636 0.39973]\n", " [ 0. 0. 0. 0.58893 0.02667 -0.0193 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.51219 -0.1311 0.00978 0.18993 1.15184]\n", " [ 0. 0.12859 -0.32646 -0.09367 0.01373 -0.2573 ]\n", " [ 0. 0.66016 0.40964 -0.06755 -0.10707 -0.13695]\n", " [ 0. 0. 0. 0.16426 -0.54371 -0.28025]\n", " [ 0. 0. 0. 0.46158 -0.01518 0.28569]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.08838 0.52126 -0.11496 -0.15151 1.15184]\n", " [ 0. 0.2393 -0.70941 0.07774 0.07217 -0.02056]\n", " [ 0. 0.27721 0.29893 -0.11087 0.038 0.29075]\n", " [ 0. 0. 0. 0.06925 -0.60118 0.07093]\n", " [ 0. 0. 0. 0.40412 0.07984 -0.39386]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.38638 -0.36088 0.18078 0.05905 1.15184]\n", " [ 0. 0.47953 -0.43575 0.11583 -0.0705 0.25399]\n", " [ 0. 0.55088 0.0587 0.04937 0.06454 -0.14299]\n", " [ 0. 0. 0. -0.01957 -0.53228 0.16605]\n", " [ 0. 0. 0. 0.47301 0.16866 0.36413]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.31897 -0.42164 -0.17144 0.08233 1.15184]\n", " [ 0. 0.07505 -0.59294 -0.08348 0.00112 -0.11595]\n", " [ 0. 0.39368 0.46318 0.02645 -0.1316 -0.26742]\n", " [ 0. 0. 0. 0.0408 -0.40992 -0.37172]\n", " [ 0. 0. 0. 0.59537 0.10829 -0.14828]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.10525 0.51812 -0.05663 0.18156 1.15184]\n", " [ 0. 0.39222 -0.6734 -0.0216 -0.1227 -0.12387]\n", " [ 0. 0.31322 0.14601 0.09383 0.02576 0.26384]\n", " [ 0. 0. -0. 0.16942 -0.47554 -0.36187]\n", " [ 0. 0. -0. 0.52976 -0.02033 0.1709 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.5258 0.05535 -0.06649 -0.17818 1.15184]\n", " [ 0. 0.18245 -0.29312 -0.09832 0.02898 0.27446]\n", " [ 0. 0.6935 0.35578 -0.08325 -0.0869 0.09814]\n", " [ 0. 0. -0. 0.12444 -0.58777 0.18128]\n", " [ 0. 0. -0. 0.41752 0.02465 -0.35679]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.11951 -0.51502 0.15318 0.11272 1.15184]\n", " [ 0. 0.21362 -0.70428 0.0891 0.05117 0.00307]\n", " [ 0. 0.28234 0.32461 -0.10109 0.06491 -0.29146]\n", " [ 0. 0. -0. 0.01654 -0.58247 0.0436 ]\n", " [ 0. 0. -0. 0.42282 0.13254 0.39782]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.34319 0.40218 -0.19004 0.00734 1.15184]\n", " [ 0. 0.48708 -0.4844 0.09139 -0.10072 -0.23623]\n", " [ 0. 0.50222 0.05115 0.05876 0.05513 0.17074]\n", " [ 0. 0. -0. -0.0162 -0.4639 -0.28206]\n", " [ 0. 0. -0. 0.54139 0.16529 -0.2839 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35492 0.39186 -0.12321 0.14488 1.15184]\n", " [ 0. 0.06056 -0.55729 0.07811 -0.02324 0.13909]\n", " [ 0. 0.42934 0.47767 0.02249 0.13357 0.25615]\n", " [ 0. 0. 0. 0.12078 -0.41548 -0.3999 ]\n", " [ 0. 0. 0. 0.58982 0.02831 0.01552]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.07102 -0.52391 0.00838 0.19 1.15184]\n", " [ 0. 0.36758 -0.68797 0.05547 0.10835 0.10629]\n", " [ 0. 0.29865 0.17065 -0.10086 0.00052 -0.2714 ]\n", " [ 0. 0. -0. 0.16486 -0.54238 -0.28236]\n", " [ 0. 0. -0. 0.46291 -0.01577 0.28361]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.52813 0.02446 0.11397 0.15225 1.15184]\n", " [ 0. 0.24598 -0.2764 -0.10092 0.04583 -0.2861 ]\n", " [ 0. 0.71023 0.29225 -0.09018 -0.06761 -0.05569]\n", " [ 0. 0. 0. 0.07052 -0.60124 -0.07348]\n", " [ 0. 0. 0. 0.40406 0.07856 0.3934 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.15095 0.50669 0.18033 0.06041 1.15184]\n", " [ 0. 0.18815 -0.69587 -0.0956 -0.0271 0.01486]\n", " [ 0. 0.29075 0.35008 0.0824 -0.09125 0.2911 ]\n", " [ 0. 0. -0. -0.01911 -0.5337 0.16329]\n", " [ 0. 0. -0. 0.47159 0.1682 0.36537]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.30001 -0.43534 -0.17222 0.08069 1.15184]\n", " [ 0. 0.48429 -0.52919 -0.05254 0.12479 0.21742]\n", " [ 0. 0.45744 0.05394 -0.07054 -0.04098 -0.19413]\n", " [ 0. 0. -0. 0.03904 -0.41058 -0.37029]\n", " [ 0. 0. -0. 0.59471 0.11005 -0.15181]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.39106 -0.3558 -0.05817 0.18107 1.15184]\n", " [ 0. 0.05216 -0.51606 -0.06986 0.04014 -0.16314]\n", " [ 0. 0.47057 0.48607 -0.0656 -0.11914 -0.24154]\n", " [ 0. 0. 0. 0.16894 -0.47393 -0.36331]\n", " [ 0. 0. 0. 0.53136 -0.01986 0.16782]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.03792 0.52734 -0.0653 -0.17862 1.15184]\n", " [ 0. 0.34236 -0.69879 0.07936 0.08834 -0.08901]\n", " [ 0. 0.28783 0.19587 -0.1012 0.02541 0.27755]\n", " [ 0. 0. 0. 0.12557 -0.5871 0.18366]\n", " [ 0. 0. 0. 0.41819 0.02352 -0.35557]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.51827 -0.10448 -0.15241 -0.11375 1.15184]\n", " [ 0. 0.31225 -0.27947 -0.0989 0.0657 0.29125]\n", " [ 0. 0.70715 0.22598 -0.09166 -0.04988 0.01154]\n", " [ 0. 0. -0. 0.01763 -0.58325 -0.04091]\n", " [ 0. 0. -0. 0.42204 0.13146 -0.3981 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.18289 -0.49606 0.1901 -0.0057 1.15184]\n", " [ 0. 0.16307 -0.68395 0.09596 -0.00036 -0.03336]\n", " [ 0. 0.30268 0.37516 -0.05196 0.11437 -0.28956]\n", " [ 0. 0. -0. -0.01686 -0.46547 0.2796 ]\n", " [ 0. 0. -0. 0.53982 0.16595 0.28633]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25784 0.46156 0.12457 -0.14371 1.15184]\n", " [ 0. 0.4738 -0.56875 -0.00492 0.13395 -0.19825]\n", " [ 0. 0.41787 0.06443 -0.081 -0.02144 0.21367]\n", " [ 0. 0. 0. 0.11912 -0.41462 0.40003]\n", " [ 0. 0. 0. 0.59067 0.02996 -0.01175]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.42651 0.31243 -0.00697 -0.19005 1.15184]\n", " [ 0. 0.05223 -0.46989 -0.06254 0.0517 0.18778]\n", " [ 0. 0.51673 0.486 -0.09617 -0.09569 0.22292]\n", " [ 0. 0. -0. 0.16544 -0.54104 0.28446]\n", " [ 0. 0. -0. 0.46426 -0.01635 -0.2815 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.00571 -0.52867 -0.11299 -0.15298 1.15184]\n", " [ 0. 0.3168 -0.70618 -0.09537 -0.06551 0.07192]\n", " [ 0. 0.28044 0.22143 0.09593 -0.04899 -0.28246]\n", " [ 0. 0. 0. 0.0718 -0.60128 0.07602]\n", " [ 0. 0. 0. 0.40401 0.07729 -0.39291]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.49686 0.1807 -0.17987 -0.06177 1.15184]\n", " [ 0. 0.37348 -0.30175 0.08859 -0.08882 -0.2897 ]\n", " [ 0. 0.68487 0.16475 0.0903 0.03314 0.03208]\n", " [ 0. 0. -0. -0.01864 -0.53511 -0.16053]\n", " [ 0. 0. -0. 0.47018 0.16772 -0.36659]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21553 0.48277 0.17298 -0.07905 1.15184]\n", " [ 0. 0.13867 -0.66816 -0.08786 0.02914 0.05257]\n", " [ 0. 0.31847 0.39956 0.00936 -0.1278 0.28669]\n", " [ 0. 0. -0. 0.03729 -0.41128 0.36883]\n", " [ 0. 0. -0. 0.59402 0.1118 0.15533]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21722 -0.48202 0.05971 -0.18057 1.15184]\n", " [ 0. 0.45786 -0.60269 -0.03967 -0.12605 0.17915]\n", " [ 0. 0.38394 0.08037 0.08675 -0.00054 -0.22992]\n", " [ 0. 0. 0. 0.16844 -0.47232 0.36473]\n", " [ 0. 0. 0. 0.53297 -0.01935 -0.16472]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.45989 -0.26082 0.0641 0.17906 1.15184]\n", " [ 0. 0.06347 -0.42053 -0.05769 0.06051 -0.21238]\n", " [ 0. 0.5661 0.47476 -0.11468 -0.06963 -0.19963]\n", " [ 0. 0. 0. 0.1267 -0.58641 -0.18604]\n", " [ 0. 0. 0. 0.41888 0.02239 0.35433]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.02588 0.52807 0.15164 0.11478 1.15184]\n", " [ 0. 0.29108 -0.71035 -0.10514 -0.04022 -0.05492]\n", " [ 0. 0.27628 0.24715 0.08458 -0.07185 0.28625]\n", " [ 0. 0. -0. 0.01872 -0.58401 0.03822]\n", " [ 0. 0. -0. 0.42128 0.13037 0.39837]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.78023 0.46594 -0.24985 0.19014 -0.00406 1.15184]\n", " [ 0. 0.4234 -0.33909 0.06573 -0.11276 0.28215]\n", " [ 0. 0.64753 0.11483 0.0877 0.01624 -0.07315]\n", " [ 0. 0. 0. -0.01749 -0.46706 0.27711]\n", " [ 0. 0. 0. 0.53823 0.16657 0.28873]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.24901 -0.46639 0.12592 -0.14252 1.15184]\n", " [ 0. 0.11539 -0.64808 0.07133 -0.05368 -0.07264]\n", " [ 0. 0.33854 0.42284 0.03846 0.12466 -0.28228]\n", " [ 0. 0. -0. 0.11745 -0.41379 0.40012]\n", " [ 0. 0. -0. 0.5915 0.03164 -0.00796]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.17833 0.49772 -0.00555 -0.1901 1.15184]\n", " [ 0. 0.4382 -0.63114 0.07364 0.10698 -0.16036]\n", " [ 0. 0.35548 0.10003 -0.08746 0.02172 0.2434 ]\n", " [ 0. 0. 0. 0.166 -0.53968 0.28655]\n", " [ 0. 0. 0. 0.46561 -0.01692 -0.27938]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.48922 0.20047 0.11199 0.15371 1.15184]\n", " [ 0. 0.08836 -0.37119 0.05439 -0.06936 0.23596]\n", " [ 0. 0.61543 0.44987 0.12377 0.04359 0.17112]\n", " [ 0. 0. 0. 0.07307 -0.60131 -0.07856]\n", " [ 0. 0. 0. 0.40398 0.07601 0.39241]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.05708 -0.52561 -0.1794 -0.06312 1.15184]\n", " [ 0. 0.26529 -0.71142 -0.10873 -0.01184 0.03789]\n", " [ 0. 0.2752 0.27294 0.06522 -0.09367 -0.289 ]\n", " [ 0. 0. 0. -0.01814 -0.53651 -0.15777]\n", " [ 0. 0. 0. 0.46879 0.16722 -0.36779]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.4283 0.30997 -0.17372 0.0774 1.15184]\n", " [ 0. 0.45879 -0.38555 0.02842 -0.13079 -0.26982]\n", " [ 0. 0.60107 0.07944 0.0841 -0.00151 0.11026]\n", " [ 0. 0. -0. 0.03556 -0.412 -0.36733]\n", " [ 0. 0. -0. 0.59329 0.11353 -0.15883]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.2834 0.44633 0.06125 -0.18005 1.15184]\n", " [ 0. 0.0939 -0.62326 -0.05128 0.06927 0.09368]\n", " [ 0. 0.36336 0.44433 -0.07991 -0.10571 0.27601]\n", " [ 0. 0. -0. 0.16791 -0.47072 0.36612]\n", " [ 0. 0. -0. 0.53457 -0.01882 -0.16159]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.14115 -0.50951 0.0629 0.17948 1.15184]\n", " [ 0. 0.4161 -0.65451 0.09665 0.0829 0.14198]\n", " [ 0. 0.33212 0.12213 -0.08412 0.0412 -0.25456]\n", " [ 0. 0. -0. 0.12782 -0.5857 -0.18841]\n", " [ 0. 0. -0. 0.41959 0.02127 0.35307]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.51203 -0.1317 0.15087 0.1158 1.15184]\n", " [ 0. 0.1282 -0.32679 -0.05019 0.0802 -0.25714]\n", " [ 0. 0.65983 0.41003 -0.12536 -0.01798 -0.13725]\n", " [ 0. 0. 0. 0.01982 -0.58475 0.03553]\n", " [ 0. 0. 0. 0.42054 0.12927 0.39862]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.08812 0.5213 -0.19017 0.00242 1.15184]\n", " [ 0. 0.23951 -0.70944 0.10426 -0.01969 -0.0207 ]\n", " [ 0. 0.27718 0.29872 -0.03527 0.11175 0.29074]\n", " [ 0. 0. 0. -0.01809 -0.46865 -0.27462]\n", " [ 0. 0. 0. 0.53665 0.16717 -0.29111]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.38674 -0.3605 -0.12727 0.14132 1.15184]\n", " [ 0. 0.47941 -0.43533 0.01756 0.13444 0.25413]\n", " [ 0. 0.55129 0.05882 -0.079 0.01909 -0.14274]\n", " [ 0. 0. -0. 0.11576 -0.41299 -0.40018]\n", " [ 0. 0. -0. 0.5923 0.03333 0.00417]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.31868 -0.42186 0.00413 0.19014 1.15184]\n", " [ 0. 0.07519 -0.59321 -0.0334 0.07653 -0.11576]\n", " [ 0. 0.39341 0.46304 -0.10894 -0.07841 -0.2675 ]\n", " [ 0. 0. 0. 0.16655 -0.53831 -0.28862]\n", " [ 0. 0. 0. 0.46698 -0.01746 0.27723]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.10554 0.51806 -0.111 -0.15443 1.15184]\n", " [ 0. 0.39242 -0.67326 0.11106 0.0565 -0.12402]\n", " [ 0. 0.31336 0.14581 -0.07694 0.0595 0.26377]\n", " [ 0. 0. 0. 0.07435 -0.60132 0.08109]\n", " [ 0. 0. 0. 0.40397 0.07474 -0.3919 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.52573 0.056 0.17892 0.06446 1.15184]\n", " [ 0. 0.18195 -0.29334 0.04131 -0.09374 0.27433]\n", " [ 0. 0.69329 0.35628 0.12017 -0.00745 0.09848]\n", " [ 0. 0. 0. -0.01762 -0.53789 0.15501]\n", " [ 0. 0. 0. 0.4674 0.16671 0.36896]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.11925 -0.51508 0.17445 -0.07575 1.15184]\n", " [ 0. 0.21383 -0.70433 0.08902 -0.05135 0.00321]\n", " [ 0. 0.28229 0.3244 0.00534 0.11999 -0.29146]\n", " [ 0. 0. -0. 0.03385 -0.41276 0.36581]\n", " [ 0. 0. -0. 0.59253 0.11524 0.16231]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.34355 0.40187 -0.06279 0.17952 1.15184]\n", " [ 0. 0.48706 -0.48401 -0.06031 -0.12191 -0.23638]\n", " [ 0. 0.50261 0.05117 0.07277 -0.03459 0.17053]\n", " [ 0. 0. -0. 0.16735 -0.46913 -0.3675 ]\n", " [ 0. 0. -0. 0.53616 -0.01826 0.15845]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35463 0.39213 -0.06169 -0.1799 1.15184]\n", " [ 0. 0.06066 -0.5576 -0.01979 0.07907 0.13889]\n", " [ 0. 0.42902 0.47757 -0.12635 -0.04878 0.25626]\n", " [ 0. 0. -0. 0.12893 -0.58498 0.19078]\n", " [ 0. 0. -0. 0.42032 0.02016 -0.3518 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.0713 -0.52387 -0.15008 -0.11681 1.15184]\n", " [ 0. 0.36778 -0.68787 -0.11849 -0.02797 0.10644]\n", " [ 0. 0.29876 0.17045 0.06493 -0.07714 -0.27135]\n", " [ 0. 0. 0. 0.02093 -0.58548 -0.03285]\n", " [ 0. 0. 0. 0.41981 0.12816 -0.39885]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.52816 0.02379 0.19018 -0.00079 1.15184]\n", " [ 0. 0.24544 -0.27646 -0.0232 0.10831 -0.28603]\n", " [ 0. 0.71017 0.29279 -0.10807 0.03226 -0.05605]\n", " [ 0. 0. 0. -0.01866 -0.47024 0.27211]\n", " [ 0. 0. 0. 0.53505 0.16774 0.29345]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.15069 0.50677 -0.1286 0.14011 1.15184]\n", " [ 0. 0.18835 -0.69596 0.06365 -0.07634 0.01471]\n", " [ 0. 0.29067 0.34987 0.04982 0.11237 0.2911 ]\n", " [ 0. 0. 0. 0.11405 -0.41223 -0.4002 ]\n", " [ 0. 0. 0. 0.59306 0.03504 0.00037]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.30036 -0.4351 0.00271 0.19016 1.15184]\n", " [ 0. 0.48435 -0.52884 0.09218 0.09918 0.21758]\n", " [ 0. 0.45779 0.05388 -0.06629 0.04752 -0.19395]\n", " [ 0. 0. -0. 0.16707 -0.53693 -0.29069]\n", " [ 0. 0. -0. 0.46836 -0.01798 0.27506]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.39077 -0.35613 -0.11 -0.15514 1.15184]\n", " [ 0. 0.0522 -0.51642 0.00967 -0.07999 -0.16294]\n", " [ 0. 0.47021 0.48603 0.13468 0.0189 -0.24168]\n", " [ 0. 0. -0. 0.07563 -0.60131 0.08363]\n", " [ 0. 0. -0. 0.40398 0.07346 -0.39136]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.03819 0.52732 0.17844 0.0658 1.15184]\n", " [ 0. 0.34256 -0.69872 -0.11873 0.00339 -0.08915]\n", " [ 0. 0.2879 0.19566 0.04605 -0.09359 0.27751]\n", " [ 0. 0. -0. -0.01708 -0.53926 0.15225]\n", " [ 0. 0. -0. 0.46603 0.16617 0.37011]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.5184 -0.10383 -0.17516 0.07409 1.15184]\n", " [ 0. 0.31172 -0.27937 0.00687 0.11848 0.29123]\n", " [ 0. 0.70726 0.22651 -0.08934 0.05406 0.01191]\n", " [ 0. 0. -0. 0.03215 -0.41354 -0.36425]\n", " [ 0. 0. -0. 0.59175 0.11694 -0.16577]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.18263 -0.49616 -0.06433 0.17897 1.15184]\n", " [ 0. 0.16327 -0.68406 -0.03477 0.08947 -0.0332 ]\n", " [ 0. 0.30256 0.37496 -0.08741 -0.09019 -0.28958]\n", " [ 0. 0. 0. 0.16676 -0.46754 -0.36884]\n", " [ 0. 0. 0. 0.53775 -0.01767 0.15529]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25819 0.46137 0.06047 0.18031 1.15184]\n", " [ 0. 0.47391 -0.56844 -0.11291 -0.07226 -0.19841]\n", " [ 0. 0.41818 0.06432 0.05954 -0.05893 0.21352]\n", " [ 0. 0. -0. 0.13003 -0.58424 -0.19315]\n", " [ 0. 0. -0. 0.42106 0.01905 0.3505 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.42623 0.31282 0.1493 0.11781 1.15184]\n", " [ 0. 0.05219 -0.47029 0.00101 -0.08113 0.18758]\n", " [ 0. 0.51633 0.48604 0.1352 -0.01135 0.2231 ]\n", " [ 0. 0. 0. 0.02205 -0.58619 0.03017]\n", " [ 0. 0. 0. 0.4191 0.12704 0.39906]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.00597 -0.52867 -0.19018 -0.00084 1.15184]\n", " [ 0. 0.31702 -0.70613 -0.10953 0.03737 0.07206]\n", " [ 0. 0.28049 0.22121 0.01799 -0.10617 -0.28243]\n", " [ 0. 0. 0. -0.0192 -0.47184 -0.26959]\n", " [ 0. 0. 0. 0.53345 0.16828 -0.29577]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.49708 0.1801 -0.12993 0.13888 1.15184]\n", " [ 0. 0.37301 -0.3015 -0.0449 -0.11708 -0.28974]\n", " [ 0. 0.68513 0.16522 0.06712 -0.06899 0.03173]\n", " [ 0. 0. -0. 0.11232 -0.41149 -0.40018]\n", " [ 0. 0. -0. 0.5938 0.03676 -0.00343]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21526 0.48289 0.00128 0.19018 1.15184]\n", " [ 0. 0.13886 -0.6683 0.00934 -0.09213 0.05241]\n", " [ 0. 0.31832 0.39937 0.11276 0.06082 0.28672]\n", " [ 0. 0. 0. 0.16757 -0.53553 -0.29275]\n", " [ 0. 0. 0. 0.46976 -0.01849 0.27287]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21755 -0.48187 0.10899 0.15585 1.15184]\n", " [ 0. 0.45801 -0.60243 0.12478 0.04356 0.17931]\n", " [ 0. 0.38419 0.08022 -0.05137 0.06987 -0.2298 ]\n", " [ 0. 0. -0. 0.0769 -0.60129 -0.08616]\n", " [ 0. 0. -0. 0.404 0.07218 0.39082]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.45963 -0.26128 0.17794 0.06713 1.15184]\n", " [ 0. 0.06332 -0.42094 0.00888 0.0831 -0.21218]\n", " [ 0. 0.56568 0.4749 -0.12731 0.04237 -0.19984]\n", " [ 0. 0. 0. -0.01653 -0.54062 0.14949]\n", " [ 0. 0. 0. 0.46467 0.16561 0.37123]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.02562 0.52808 0.17585 -0.07243 1.15184]\n", " [ 0. 0.29129 -0.71033 -0.088 0.07025 -0.05506]\n", " [ 0. 0.2763 0.24694 -0.01904 -0.10931 0.28623]\n", " [ 0. 0. -0. 0.03047 -0.41436 0.36267]\n", " [ 0. 0. -0. 0.59093 0.11862 0.16921]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.46623 -0.24931 0.06587 -0.17841 1.15184]\n", " [ 0. 0.42304 -0.33874 -0.0809 -0.10237 0.28223]\n", " [ 0. 0.64789 0.11519 0.04714 -0.07577 -0.07282]\n", " [ 0. 0. 0. 0.16614 -0.46595 0.37017]\n", " [ 0. 0. 0. 0.53934 -0.01705 -0.1521 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.24873 -0.46654 -0.05926 -0.18072 1.15184]\n", " [ 0. 0.11557 -0.64827 -0.01031 -0.0887 -0.07247]\n", " [ 0. 0.33835 0.42266 0.12699 0.02983 -0.28232]\n", " [ 0. 0. -0. 0.13113 -0.58348 0.19551]\n", " [ 0. 0. -0. 0.42181 0.01796 -0.34919]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.17864 0.49761 -0.1485 -0.11881 1.15184]\n", " [ 0. 0.43838 -0.63093 0.12924 0.01306 -0.16052]\n", " [ 0. 0.35569 0.09985 -0.03997 0.08074 0.24329]\n", " [ 0. 0. 0. 0.02317 -0.58689 -0.0275 ]\n", " [ 0. 0. 0. 0.4184 0.12591 -0.39925]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.489 0.20101 0.19017 0.00246 1.15184]\n", " [ 0. 0.08809 -0.37159 -0.02305 -0.08503 0.23577]\n", " [ 0. 0.61504 0.45014 0.10905 -0.07305 0.17138]\n", " [ 0. 0. 0. -0.01971 -0.47344 0.26706]\n", " [ 0. 0. 0. 0.53185 0.16879 0.29806]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.05682 -0.52564 0.13124 -0.13764 1.15184]\n", " [ 0. 0.2655 -0.71143 0.05543 -0.09432 0.03803]\n", " [ 0. 0.2752 0.27273 0.05864 0.09789 -0.28898]\n", " [ 0. 0. -0. 0.11058 -0.41079 0.40013]\n", " [ 0. 0. -0. 0.5945 0.0385 0.00724]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.42863 0.30951 -0.00015 0.19018 1.15184]\n", " [ 0. 0.45856 -0.38515 -0.10787 -0.0792 -0.26993]\n", " [ 0. 0.60148 0.07967 0.0328 -0.07749 0.10997]\n", " [ 0. 0. -0. 0.16806 -0.53413 -0.29479]\n", " [ 0. 0. -0. 0.47116 -0.01897 0.27066]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.78023 0.28312 0.44651 0.10798 0.15655 1.15184]\n", " [ 0. 0.09406 -0.62348 -0.0251 -0.08247 0.0935 ]\n", " [ 0. 0.36314 0.44416 0.1325 -0.00113 0.27607]\n", " [ 0. 0. 0. 0.07818 -0.60125 -0.08868]\n", " [ 0. 0. 0. 0.40404 0.07091 0.39025]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.14145 -0.50943 0.17744 0.06844 1.15184]\n", " [ 0. 0.41629 -0.65433 0.12579 -0.01992 0.14213]\n", " [ 0. 0.33229 0.12194 -0.02308 0.09075 -0.25447]\n", " [ 0. 0. -0. -0.01595 -0.54197 0.14673]\n", " [ 0. 0. -0. 0.46332 0.16504 0.37233]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.51188 -0.1323 0.17653 -0.07077 1.15184]\n", " [ 0. 0.12781 -0.32712 0.04351 0.08394 -0.25698]\n", " [ 0. 0.6595 0.41042 -0.07932 0.09878 -0.13755]\n", " [ 0. 0. 0. 0.02881 -0.41521 0.36105]\n", " [ 0. 0. 0. 0.59008 0.12028 0.17263]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.08787 0.52135 -0.06741 0.17783 1.15184]\n", " [ 0. 0.23972 -0.70947 0.01983 -0.10426 -0.02084]\n", " [ 0. 0.27716 0.2985 0.09107 0.0737 0.29073]\n", " [ 0. 0. 0. 0.16549 -0.46438 -0.37147]\n", " [ 0. 0. 0. 0.54092 -0.0164 0.14889]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.38709 -0.36012 -0.05803 -0.18111 1.15184]\n", " [ 0. 0.4793 -0.43492 -0.12503 -0.05243 0.25427]\n", " [ 0. 0.5517 0.05893 0.02315 -0.07792 -0.14249]\n", " [ 0. 0. 0. 0.13222 -0.58271 0.19786]\n", " [ 0. 0. 0. 0.42258 0.01687 -0.34786]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.31838 -0.42208 0.1477 0.1198 1.15184]\n", " [ 0. 0.07533 -0.59348 0.03687 0.07494 -0.11558]\n", " [ 0. 0.39314 0.4629 -0.13023 0.03244 -0.26758]\n", " [ 0. 0. 0. 0.02431 -0.58757 0.02482]\n", " [ 0. 0. 0. 0.41772 0.12478 0.39943]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.10583 0.518 -0.19014 -0.00408 1.15184]\n", " [ 0. 0.39262 -0.67312 0.1119 -0.05487 -0.12417]\n", " [ 0. 0.3135 0.14561 0.00139 0.09723 0.2637 ]\n", " [ 0. 0. 0. -0.02019 -0.47505 -0.26452]\n", " [ 0. 0. 0. 0.53024 0.16928 -0.30032]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.52566 0.05664 -0.13255 0.13638 1.15184]\n", " [ 0. 0.18146 -0.29355 0.06839 0.07617 0.27421]\n", " [ 0. 0.69307 0.35677 -0.04271 0.11263 0.09882]\n", " [ 0. 0. -0. 0.10883 -0.41012 -0.40005]\n", " [ 0. 0. -0. 0.59517 0.04026 -0.01105]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.119 -0.51514 0.00159 -0.19018 1.15184]\n", " [ 0. 0.21404 -0.70439 -0.01085 -0.10223 0.00336]\n", " [ 0. 0.28223 0.32419 0.11182 0.04378 -0.29146]\n", " [ 0. 0. -0. 0.16852 -0.53271 0.29683]\n", " [ 0. 0. -0. 0.47258 -0.01944 -0.26842]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.3439 0.40156 -0.10697 -0.15725 1.15184]\n", " [ 0. 0.48705 -0.48363 0.13388 0.02396 -0.23654]\n", " [ 0. 0.503 0.05118 -0.01536 0.07909 0.17032]\n", " [ 0. 0. 0. 0.07945 -0.6012 0.0912 ]\n", " [ 0. 0. 0. 0.4041 0.06963 -0.38967]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35433 0.3924 0.17693 0.06976 1.15184]\n", " [ 0. 0.06076 -0.55792 -0.04743 -0.06631 0.1387 ]\n", " [ 0. 0.4287 0.47747 0.11906 -0.06456 0.25636]\n", " [ 0. 0. 0. -0.01536 -0.54331 0.14397]\n", " [ 0. 0. 0. 0.46198 0.16445 0.37341]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.07158 -0.52383 -0.17719 0.0691 1.15184]\n", " [ 0. 0.36799 -0.68776 -0.08469 0.0875 0.10658]\n", " [ 0. 0.29886 0.17024 -0.03305 -0.09523 -0.27129]\n", " [ 0. 0. 0. 0.02717 -0.41609 -0.35941]\n", " [ 0. 0. 0. 0.5892 0.12192 -0.17603]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.52819 0.02313 -0.06895 0.17724 1.15184]\n", " [ 0. 0.24489 -0.27652 -0.09229 -0.06113 -0.28596]\n", " [ 0. 0.71011 0.29334 0.00946 -0.11245 -0.05641]\n", " [ 0. 0. -0. 0.16481 -0.4628 -0.37275]\n", " [ 0. 0. -0. 0.54249 -0.01573 0.14567]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.15043 0.50685 -0.05681 -0.1815 1.15184]\n", " [ 0. 0.18856 -0.69604 0.03423 0.09334 0.01456]\n", " [ 0. 0.29058 0.34967 -0.12219 -0.01314 0.29111]\n", " [ 0. 0. -0. 0.1333 -0.58192 0.20021]\n", " [ 0. 0. -0. 0.42337 0.01579 -0.34652]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.30071 -0.43485 0.1469 0.12079 1.15184]\n", " [ 0. 0.48441 -0.52849 0.13527 -0.00635 0.21774]\n", " [ 0. 0.45814 0.05382 -0.00645 0.0813 -0.19378]\n", " [ 0. 0. -0. 0.02544 -0.58823 0.02215]\n", " [ 0. 0. -0. 0.41706 0.12364 0.39959]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.39047 -0.35645 -0.1901 -0.00569 1.15184]\n", " [ 0. 0.05224 -0.51678 -0.05809 -0.05583 -0.16274]\n", " [ 0. 0.46984 0.48599 0.09618 -0.09615 -0.24181]\n", " [ 0. 0. -0. -0.02064 -0.47666 -0.26196]\n", " [ 0. 0. -0. 0.52863 0.16973 -0.30255]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.03846 0.5273 0.13384 -0.13511 1.15184]\n", " [ 0. 0.34277 -0.69864 -0.04609 0.1095 -0.08929]\n", " [ 0. 0.28798 0.19546 -0.06611 -0.08065 0.27746]\n", " [ 0. 0. -0. 0.10706 -0.40948 0.39992]\n", " [ 0. 0. -0. 0.59581 0.04203 0.01486]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.51853 -0.10318 0.00303 -0.19016 1.15184]\n", " [ 0. 0.31118 -0.27926 -0.11113 -0.04148 0.29122]\n", " [ 0. 0.70736 0.22705 -0.01348 -0.10362 0.01227]\n", " [ 0. 0. 0. 0.16897 -0.53128 0.29886]\n", " [ 0. 0. 0. 0.47401 -0.01988 -0.26617]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.18236 -0.49625 -0.10595 -0.15794 1.15184]\n", " [ 0. 0.16348 -0.68417 -0.05149 -0.08105 -0.03305]\n", " [ 0. 0.30245 0.37475 0.12443 -0.01693 -0.2896 ]\n", " [ 0. 0. -0. 0.08073 -0.60112 0.09372]\n", " [ 0. 0. -0. 0.40417 0.06836 -0.38907]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25853 0.46118 0.17641 0.07106 1.15184]\n", " [ 0. 0.47402 -0.56814 -0.12826 0.03903 -0.19857]\n", " [ 0. 0.41848 0.06421 -0.00626 -0.08351 0.21338]\n", " [ 0. 0. -0. -0.01475 -0.54463 0.1412 ]\n", " [ 0. 0. -0. 0.46066 0.16384 0.37446]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.42594 0.31321 -0.17783 0.06742 1.15184]\n", " [ 0. 0.05215 -0.47069 0.0691 0.04249 0.18737]\n", " [ 0. 0.51594 0.48608 -0.05975 0.12181 0.22327]\n", " [ 0. 0. -0. 0.02554 -0.417 -0.35773]\n", " [ 0. 0. -0. 0.58829 0.12354 -0.17941]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.00623 -0.52866 -0.07049 0.17664 1.15184]\n", " [ 0. 0.31723 -0.70609 -0.00533 0.11563 0.0722 ]\n", " [ 0. 0.28054 0.221 -0.09219 -0.0556 -0.28239]\n", " [ 0. 0. 0. 0.16411 -0.46124 -0.374 ]\n", " [ 0. 0. 0. 0.54405 -0.01502 0.14242]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.4973 0.1795 0.05557 0.18188 1.15184]\n", " [ 0. 0.37254 -0.30124 -0.12384 -0.01936 -0.28978]\n", " [ 0. 0.68538 0.16569 -0.02648 -0.09261 0.03138]\n", " [ 0. 0. -0. 0.13437 -0.58112 -0.20256]\n", " [ 0. 0. -0. 0.42418 0.01472 0.34515]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21499 0.48302 0.14609 0.12177 1.15184]\n", " [ 0. 0.13906 -0.66845 -0.06441 -0.06656 0.05225]\n", " [ 0. 0.31817 0.39917 0.1192 -0.04692 0.28675]\n", " [ 0. 0. 0. 0.02659 -0.58888 0.01949]\n", " [ 0. 0. 0. 0.41641 0.1225 0.39972]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21788 -0.48172 0.19004 0.00729 1.15184]\n", " [ 0. 0.45816 -0.60217 0.11007 -0.07319 0.17947]\n", " [ 0. 0.38445 0.08007 0.02472 0.0831 -0.22967]\n", " [ 0. 0. -0. -0.02107 -0.47827 0.2594 ]\n", " [ 0. 0. -0. 0.52702 0.17016 0.30475]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.45936 -0.26174 -0.13513 0.13383 1.15184]\n", " [ 0. 0.06318 -0.42135 -0.07927 -0.0264 -0.21198]\n", " [ 0. 0.56527 0.47505 0.01441 -0.13342 -0.20005]\n", " [ 0. 0. -0. 0.10527 -0.40888 -0.39976]\n", " [ 0. 0. -0. 0.59641 0.04381 -0.01868]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.02536 0.52809 -0.00448 0.19013 1.15184]\n", " [ 0. 0.29151 -0.7103 -0.02894 -0.10884 -0.0552 ]\n", " [ 0. 0.27632 0.24672 0.10771 0.02652 0.2862 ]\n", " [ 0. 0. 0. 0.16939 -0.52985 -0.30087]\n", " [ 0. 0. 0. 0.47545 -0.02031 0.26389]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.46651 -0.24877 0.10492 0.15862 1.15184]\n", " [ 0. 0.42269 -0.33838 0.13036 -0.0048 0.28232]\n", " [ 0. 0.64824 0.11554 0.03338 0.08282 -0.0725 ]\n", " [ 0. 0. -0. 0.082 -0.60104 -0.09624]\n", " [ 0. 0. -0. 0.40426 0.06709 0.38846]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.24845 -0.46669 -0.17588 -0.07236 1.15184]\n", " [ 0. 0.11576 -0.64845 -0.07419 -0.04974 -0.0723 ]\n", " [ 0. 0.33817 0.42247 0.10513 -0.07719 -0.28237]\n", " [ 0. 0. -0. -0.01412 -0.54594 -0.13844]\n", " [ 0. 0. -0. 0.45935 0.16321 -0.37549]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.17896 0.49749 -0.17846 0.06575 1.15184]\n", " [ 0. 0.43855 -0.63071 0.07793 -0.10394 -0.16067]\n", " [ 0. 0.35591 0.09968 0.04852 0.07588 0.24319]\n", " [ 0. 0. 0. 0.02394 -0.41794 -0.35603]\n", " [ 0. 0. 0. 0.58735 0.12515 -0.18277]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.48878 0.20154 0.07203 -0.17602 1.15184]\n", " [ 0. 0.08782 -0.37198 -0.08753 -0.0096 0.23558]\n", " [ 0. 0.61464 0.4504 -0.02807 -0.12825 0.17163]\n", " [ 0. 0. 0. 0.16337 -0.45968 0.37523]\n", " [ 0. 0. 0. 0.54561 -0.01428 -0.13915]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.05656 -0.52567 0.05434 0.18226 1.15184]\n", " [ 0. 0.26572 -0.71143 0.05442 0.09493 0.03817]\n", " [ 0. 0.27519 0.27251 -0.11406 0.00236 -0.28896]\n", " [ 0. 0. 0. 0.13543 -0.58029 -0.2049 ]\n", " [ 0. 0. 0. 0.425 0.01366 0.34377]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.42896 0.30905 0.14528 0.12274 1.15184]\n", " [ 0. 0.45832 -0.38474 -0.13005 0.03148 -0.27005]\n", " [ 0. 0.60188 0.07991 -0.03822 -0.075 0.10968]\n", " [ 0. 0. -0. 0.02774 -0.58951 0.01682]\n", " [ 0. 0. -0. 0.41578 0.12134 0.39985]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.28283 0.44669 0.18997 0.00889 1.15184]\n", " [ 0. 0.09423 -0.62371 -0.08088 -0.02991 0.09332]\n", " [ 0. 0.36291 0.444 0.07929 -0.10614 0.27613]\n", " [ 0. 0. 0. -0.02147 -0.47988 0.25682]\n", " [ 0. 0. 0. 0.52541 0.17055 0.30692]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.14175 -0.50934 -0.1364 0.13253 1.15184]\n", " [ 0. 0.41647 -0.65416 -0.03449 0.12262 0.14228]\n", " [ 0. 0.33246 0.12175 -0.07279 -0.05886 -0.25439]\n", " [ 0. 0. 0. 0.10348 -0.40831 -0.39957]\n", " [ 0. 0. 0. 0.59698 0.04561 -0.02249]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.51173 -0.1329 0.00592 -0.19009 1.15184]\n", " [ 0. 0.12742 -0.32745 0.09428 -0.00635 -0.25682]\n", " [ 0. 0.65917 0.41081 0.05882 0.11225 -0.13785]\n", " [ 0. 0. 0. 0.1698 -0.5284 0.30287]\n", " [ 0. 0. 0. 0.47689 -0.02071 -0.26159]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.08761 0.52139 -0.10389 -0.1593 1.15184]\n", " [ 0. 0.23994 -0.7095 0.07258 0.07747 -0.02098]\n", " [ 0. 0.27713 0.29829 -0.11319 0.03014 0.29072]\n", " [ 0. 0. -0. 0.08327 -0.60093 0.09875]\n", " [ 0. 0. -0. 0.40436 0.06581 -0.38782]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.38744 -0.35974 0.17534 0.07365 1.15184]\n", " [ 0. 0.47919 -0.43451 0.12108 -0.06098 0.25441]\n", " [ 0. 0.55211 0.05904 0.04428 0.06819 -0.14224]\n", " [ 0. 0. -0. -0.01348 -0.54724 0.13568]\n", " [ 0. 0. -0. 0.45805 0.16256 0.3765 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.31809 -0.42231 0.17907 -0.06407 1.15184]\n", " [ 0. 0.07547 -0.59375 0.08322 0.00729 -0.11539]\n", " [ 0. 0.39287 0.46276 -0.03981 0.12816 -0.26766]\n", " [ 0. 0. 0. 0.02236 -0.4189 0.3543 ]\n", " [ 0. 0. 0. 0.58639 0.12673 0.1861 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.78023 -0.10612 0.51794 -0.07356 0.17538 1.15184]\n", " [ 0. 0.39282 -0.67299 -0.01003 -0.12425 -0.12431]\n", " [ 0. 0.31364 0.14541 0.09095 0.03432 0.26364]\n", " [ 0. 0. 0. 0.16261 -0.45814 -0.37643]\n", " [ 0. 0. 0. 0.54716 -0.01352 0.13587]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.52559 0.05729 -0.05309 -0.18262 1.15184]\n", " [ 0. 0.18097 -0.29377 -0.09992 0.02195 0.27409]\n", " [ 0. 0.69286 0.35726 -0.07695 -0.09275 0.09915]\n", " [ 0. 0. 0. 0.13648 -0.57946 0.20724]\n", " [ 0. 0. 0. 0.42583 0.01261 -0.34236]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.11874 -0.51519 0.14446 0.1237 1.15184]\n", " [ 0. 0.21425 -0.70445 0.08524 0.05751 0.0035 ]\n", " [ 0. 0.28218 0.32398 -0.10547 0.05737 -0.29145]\n", " [ 0. 0. 0. 0.0289 -0.59013 0.01416]\n", " [ 0. 0. 0. 0.41516 0.12018 0.39995]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.34426 0.40126 0.18989 0.01049 1.15184]\n", " [ 0. 0.48703 -0.48324 -0.10028 0.09188 -0.23669]\n", " [ 0. 0.50339 0.0512 -0.0536 -0.06014 0.17011]\n", " [ 0. 0. -0. -0.02184 -0.4815 0.25423]\n", " [ 0. 0. -0. 0.52379 0.17092 0.30907]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35403 0.39267 -0.13766 0.13122 1.15184]\n", " [ 0. 0.06086 -0.55824 0.08009 -0.01527 0.1385 ]\n", " [ 0. 0.42839 0.47737 0.00861 0.13516 0.25647]\n", " [ 0. 0. -0. 0.10167 -0.40777 -0.39933]\n", " [ 0. 0. -0. 0.59752 0.04742 -0.02631]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.07186 -0.52379 0.00738 -0.19004 1.15184]\n", " [ 0. 0.3682 -0.68766 -0.04648 -0.11258 0.10672]\n", " [ 0. 0.29897 0.17003 0.10048 0.00765 -0.27123]\n", " [ 0. 0. -0. 0.17018 -0.52694 0.30486]\n", " [ 0. 0. -0. 0.47835 -0.02109 -0.25926]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.52822 0.02246 0.10286 0.15997 1.15184]\n", " [ 0. 0.24434 -0.27658 -0.1036 0.03882 -0.28589]\n", " [ 0. 0.71005 0.29389 -0.08554 -0.07371 -0.05677]\n", " [ 0. 0. -0. 0.08455 -0.60081 -0.10126]\n", " [ 0. 0. -0. 0.40448 0.06454 0.38718]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.15016 0.50693 -0.1748 -0.07493 1.15184]\n", " [ 0. 0.18877 -0.69612 0.09321 0.03468 0.01441]\n", " [ 0. 0.2905 0.34946 -0.08943 0.08427 0.29112]\n", " [ 0. 0. -0. -0.01281 -0.54852 -0.13292]\n", " [ 0. 0. -0. 0.45677 0.1619 -0.37748]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.30107 -0.43461 -0.17966 0.06238 1.15184]\n", " [ 0. 0.48446 -0.52814 -0.06505 0.11878 0.21789]\n", " [ 0. 0.45849 0.05377 -0.06607 -0.04779 -0.1936 ]\n", " [ 0. 0. 0. 0.0208 -0.4199 -0.35253]\n", " [ 0. 0. 0. 0.5854 0.12829 -0.18942]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.39017 -0.35678 -0.0751 0.17473 1.15184]\n", " [ 0. 0.05227 -0.51714 -0.07322 0.03364 -0.16254]\n", " [ 0. 0.46948 0.48595 -0.05418 -0.12474 -0.24195]\n", " [ 0. 0. -0. 0.16181 -0.4566 -0.37761]\n", " [ 0. 0. -0. 0.54869 -0.01273 0.13256]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.03873 0.52728 0.05185 0.18298 1.15184]\n", " [ 0. 0.34298 -0.69857 -0.07274 -0.09397 -0.08943]\n", " [ 0. 0.28805 0.19525 0.10269 -0.01796 0.27742]\n", " [ 0. 0. 0. 0.13752 -0.57861 -0.20957]\n", " [ 0. 0. 0. 0.42669 0.01157 0.34094]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.51866 -0.10253 -0.14363 -0.12466 1.15184]\n", " [ 0. 0.31064 -0.27916 -0.10314 0.05846 0.2912 ]\n", " [ 0. 0.70747 0.22759 -0.08813 -0.05627 0.01264]\n", " [ 0. 0. 0. 0.03007 -0.59073 -0.01151]\n", " [ 0. 0. 0. 0.41457 0.11902 -0.40003]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.1821 -0.49635 0.1898 0.01208 1.15184]\n", " [ 0. 0.16368 -0.68429 0.09567 0.00843 -0.03289]\n", " [ 0. 0.30234 0.37455 -0.06226 0.10903 -0.28961]\n", " [ 0. 0. 0. -0.02218 -0.48312 0.25164]\n", " [ 0. 0. 0. 0.52217 0.17126 0.31119]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25887 0.46099 -0.13891 0.1299 1.15184]\n", " [ 0. 0.47414 -0.56784 0.01872 -0.13277 -0.19872]\n", " [ 0. 0.41879 0.06409 0.07836 0.02949 0.21323]\n", " [ 0. 0. 0. 0.09985 -0.40727 -0.39906]\n", " [ 0. 0. 0. 0.59802 0.04924 -0.03013]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.42565 0.3136 0.00883 -0.18998 1.15184]\n", " [ 0. 0.0521 -0.47108 -0.06638 0.04661 0.18717]\n", " [ 0. 0.51554 0.48612 -0.08808 -0.10321 0.22344]\n", " [ 0. 0. 0. 0.17054 -0.52547 0.30684]\n", " [ 0. 0. 0. 0.47982 -0.02145 -0.25692]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.0065 -0.52866 -0.10182 -0.16063 1.15184]\n", " [ 0. 0.31744 -0.70604 -0.09062 -0.07206 0.07234]\n", " [ 0. 0.28059 0.22079 0.09903 -0.04216 -0.28235]\n", " [ 0. 0. -0. 0.08582 -0.60067 0.10377]\n", " [ 0. 0. -0. 0.40462 0.06327 -0.38651]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.49752 0.17889 0.17425 0.0762 1.15184]\n", " [ 0. 0.37208 -0.30099 -0.0952 0.08146 -0.28982]\n", " [ 0. 0.68563 0.16615 -0.08765 -0.04008 0.03102]\n", " [ 0. 0. -0. -0.01213 -0.5498 0.13016]\n", " [ 0. 0. -0. 0.4555 0.16122 0.37844]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21472 0.48314 0.18024 -0.0607 1.15184]\n", " [ 0. 0.13926 -0.6686 -0.09045 0.02009 0.05209]\n", " [ 0. 0.31803 0.39897 0.0224 -0.12611 0.28678]\n", " [ 0. 0. 0. 0.01926 -0.42092 0.35075]\n", " [ 0. 0. 0. 0.58437 0.12983 0.19271]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21821 -0.48157 0.07663 -0.17406 1.15184]\n", " [ 0. 0.4583 -0.60191 -0.02766 -0.12927 0.17962]\n", " [ 0. 0.38471 0.07993 0.08635 0.00746 -0.22955]\n", " [ 0. 0. -0. 0.16099 -0.45507 0.37876]\n", " [ 0. 0. -0. 0.55022 -0.0119 -0.12923]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.4591 -0.2622 -0.05059 -0.18333 1.15184]\n", " [ 0. 0.06304 -0.42176 0.0617 -0.05629 -0.21178]\n", " [ 0. 0.56486 0.47519 0.10937 0.0778 -0.20026]\n", " [ 0. 0. 0. 0.13855 -0.57774 0.2119 ]\n", " [ 0. 0. 0. 0.42755 0.01053 -0.3395 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.0251 0.5281 0.1428 0.12561 1.15184]\n", " [ 0. 0.29172 -0.71028 -0.10203 -0.04774 -0.05534]\n", " [ 0. 0.27634 0.24651 0.08948 -0.06551 0.28617]\n", " [ 0. 0. 0. 0.03124 -0.59131 0.00885]\n", " [ 0. 0. 0. 0.41398 0.11784 0.4001 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.4668 -0.24824 -0.18969 -0.01366 1.15184]\n", " [ 0. 0.42233 -0.33803 -0.07564 0.10623 0.2824 ]\n", " [ 0. 0.64859 0.1159 -0.08607 -0.02397 -0.07217]\n", " [ 0. 0. 0. -0.02249 -0.48473 -0.24903]\n", " [ 0. 0. 0. 0.52056 0.17158 -0.31328]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.24817 -0.46683 0.14015 -0.12856 1.15184]\n", " [ 0. 0.11594 -0.64864 0.07651 -0.04615 -0.07213]\n", " [ 0. 0.33799 0.42229 0.02534 0.12792 -0.28241]\n", " [ 0. 0. 0. 0.09801 -0.40681 0.39876]\n", " [ 0. 0. 0. 0.59849 0.05107 0.03395]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.17927 0.49738 -0.0103 0.1899 1.15184]\n", " [ 0. 0.43872 -0.6305 -0.06464 -0.11271 -0.16082]\n", " [ 0. 0.35612 0.09951 0.08884 -0.01458 0.24309]\n", " [ 0. 0. 0. 0.17088 -0.52399 -0.30881]\n", " [ 0. 0. 0. 0.4813 -0.02179 0.25455]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.48856 0.20207 0.10078 0.16129 1.15184]\n", " [ 0. 0.08756 -0.37238 0.05879 -0.06549 0.2354 ]\n", " [ 0. 0.61425 0.45067 0.12055 0.05207 0.17189]\n", " [ 0. 0. -0. 0.08709 -0.60052 -0.10627]\n", " [ 0. 0. -0. 0.40477 0.062 0.38583]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.05631 -0.52569 0.17369 0.07747 1.15184]\n", " [ 0. 0.26593 -0.71143 0.10751 0.02049 0.03831]\n", " [ 0. 0.27519 0.2723 -0.07245 0.0881 -0.28895]\n", " [ 0. 0. 0. -0.01144 -0.55105 0.1274 ]\n", " [ 0. 0. 0. 0.45424 0.16053 0.37938]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.42929 0.3086 0.1808 -0.05901 1.15184]\n", " [ 0. 0.45809 -0.38434 -0.04153 0.12717 -0.27017]\n", " [ 0. 0.60228 0.08014 -0.08393 -0.00679 0.10939]\n", " [ 0. 0. -0. 0.01774 -0.42196 0.34893]\n", " [ 0. 0. -0. 0.58333 0.13135 0.19598]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.28254 0.44687 0.07817 -0.17338 1.15184]\n", " [ 0. 0.0944 -0.62393 -0.05753 0.06427 0.09315]\n", " [ 0. 0.36269 0.44383 -0.06956 -0.11274 0.27619]\n", " [ 0. 0. 0. 0.16014 -0.45355 0.37988]\n", " [ 0. 0. 0. 0.55174 -0.01105 -0.12589]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.14205 -0.50926 -0.04934 -0.18367 1.15184]\n", " [ 0. 0.41666 -0.65399 -0.09036 -0.08982 0.14243]\n", " [ 0. 0.33264 0.12157 0.0868 -0.03497 -0.2543 ]\n", " [ 0. 0. -0. 0.13958 -0.57685 0.21422]\n", " [ 0. 0. -0. 0.42844 0.00951 -0.33804]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.51157 -0.13349 -0.14197 -0.12655 1.15184]\n", " [ 0. 0.12703 -0.32778 0.0555 -0.0764 -0.25666]\n", " [ 0. 0.65884 0.4112 0.1239 0.02685 -0.13815]\n", " [ 0. 0. 0. 0.03242 -0.59187 -0.0062 ]\n", " [ 0. 0. 0. 0.41342 0.11667 -0.40015]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.08736 0.52143 -0.18957 -0.01524 1.15184]\n", " [ 0. 0.24015 -0.70953 0.1057 -0.01008 -0.02113]\n", " [ 0. 0.2771 0.29808 -0.04534 0.10798 0.29071]\n", " [ 0. 0. -0. -0.02277 -0.48635 -0.24642]\n", " [ 0. 0. -0. 0.51894 0.17186 -0.31534]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.38779 -0.35936 -0.14137 0.12721 1.15184]\n", " [ 0. 0.47907 -0.4341 0.00362 0.13551 0.25455]\n", " [ 0. 0.55252 0.05916 -0.08055 0.01111 -0.14199]\n", " [ 0. 0. 0. 0.09617 -0.40637 -0.39841]\n", " [ 0. 0. 0. 0.59892 0.05291 -0.03777]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.3178 -0.42253 0.01176 -0.18982 1.15184]\n", " [ 0. 0.07561 -0.59402 0.03946 -0.07366 -0.1152 ]\n", " [ 0. 0.3926 0.46262 0.10209 0.08708 -0.26774]\n", " [ 0. 0. 0. 0.1712 -0.5225 0.31077]\n", " [ 0. 0. 0. 0.48279 -0.02211 -0.25216]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.1064 0.51788 -0.09973 -0.16193 1.15184]\n", " [ 0. 0.39302 -0.67285 0.1069 0.06417 -0.12446]\n", " [ 0. 0.31377 0.14521 -0.0808 0.05399 0.26357]\n", " [ 0. 0. -0. 0.08835 -0.60035 0.10877]\n", " [ 0. 0. -0. 0.40495 0.06073 -0.38514]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.52552 0.05793 0.17312 0.07873 1.15184]\n", " [ 0. 0.18048 -0.29398 0.04832 -0.09009 0.27397]\n", " [ 0. 0.69264 0.35775 0.12056 0.00196 0.09949]\n", " [ 0. 0. -0. -0.01073 -0.5523 0.12464]\n", " [ 0. 0. -0. 0.453 0.15981 0.38029]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.11848 -0.51525 0.18134 -0.05732 1.15184]\n", " [ 0. 0.21446 -0.7045 0.09386 -0.04206 0.00365]\n", " [ 0. 0.28212 0.32377 -0.00695 0.11984 -0.29145]\n", " [ 0. 0. 0. 0.01624 -0.42304 0.34709]\n", " [ 0. 0. 0. 0.58225 0.13284 0.19923]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.34462 0.40095 -0.0797 0.17268 1.15184]\n", " [ 0. 0.48701 -0.48285 -0.04856 -0.12705 -0.23684]\n", " [ 0. 0.50378 0.05122 0.07561 -0.0278 0.1699 ]\n", " [ 0. 0. 0. 0.15925 -0.45205 -0.38098]\n", " [ 0. 0. 0. 0.55324 -0.01017 0.12252]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35373 0.39294 -0.04807 -0.18401 1.15184]\n", " [ 0. 0.06095 -0.55855 -0.02536 0.0775 0.13831]\n", " [ 0. 0.42807 0.47728 -0.12241 -0.05791 0.25657]\n", " [ 0. 0. 0. 0.14059 -0.57595 0.21653]\n", " [ 0. 0. 0. 0.42934 0.0085 -0.33656]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.07213 -0.52376 0.14113 0.12748 1.15184]\n", " [ 0. 0.3684 -0.68755 0.11624 0.03646 0.10687]\n", " [ 0. 0.29907 0.16983 -0.07022 0.07223 -0.27118]\n", " [ 0. 0. 0. 0.0336 -0.59242 0.00356]\n", " [ 0. 0. 0. 0.41287 0.11548 0.40018]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.52825 0.0218 0.18944 0.01681 1.15184]\n", " [ 0. 0.2438 -0.27664 -0.03271 0.10561 -0.28582]\n", " [ 0. 0.70998 0.29443 -0.11071 0.02252 -0.05713]\n", " [ 0. 0. -0. -0.02303 -0.48797 0.24379]\n", " [ 0. 0. -0. 0.51732 0.17212 0.31737]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.1499 0.507 0.14259 -0.12585 1.15184]\n", " [ 0. 0.18898 -0.69621 -0.07125 0.06942 0.01426]\n", " [ 0. 0.29042 0.34925 -0.03788 -0.11687 0.29113]\n", " [ 0. 0. 0. 0.09432 -0.40598 0.39803]\n", " [ 0. 0. 0. 0.59931 0.05476 0.04159]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.30142 -0.43436 -0.01323 0.18972 1.15184]\n", " [ 0. 0.48452 -0.52779 0.08372 0.10646 0.21805]\n", " [ 0. 0.45884 0.05371 -0.06984 0.04206 -0.19342]\n", " [ 0. 0. 0. 0.17149 -0.521 -0.31271]\n", " [ 0. 0. 0. 0.48429 -0.02241 0.24975]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.38987 -0.3571 0.09868 0.16258 1.15184]\n", " [ 0. 0.05231 -0.5175 -0.01501 0.07917 -0.16234]\n", " [ 0. 0.46912 0.48591 -0.13304 -0.02823 -0.24208]\n", " [ 0. 0. -0. 0.08962 -0.60016 -0.11126]\n", " [ 0. 0. -0. 0.40513 0.05947 0.38442]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.039 0.52726 -0.17255 -0.07998 1.15184]\n", " [ 0. 0.34319 -0.69849 0.1187 0.00606 -0.08958]\n", " [ 0. 0.28813 0.19504 -0.05327 0.08958 0.27737]\n", " [ 0. 0. -0. -0.01 -0.55353 -0.12189]\n", " [ 0. 0. -0. 0.45177 0.15909 -0.38119]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.51879 -0.10188 0.18186 -0.05563 1.15184]\n", " [ 0. 0.31011 -0.27905 0.00503 -0.11839 0.29118]\n", " [ 0. 0.70757 0.22812 0.09446 -0.04501 0.013 ]\n", " [ 0. 0. -0. 0.01477 -0.42414 0.34521]\n", " [ 0. 0. -0. 0.58115 0.13432 0.20245]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.18183 -0.49645 -0.08122 0.17197 1.15184]\n", " [ 0. 0.16389 -0.6844 -0.04307 0.08588 -0.03274]\n", " [ 0. 0.30222 0.37434 -0.07841 -0.09803 -0.28963]\n", " [ 0. 0. -0. 0.15834 -0.45055 -0.38205]\n", " [ 0. 0. -0. 0.55474 -0.00926 0.11914]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25921 0.4608 -0.04681 -0.18433 1.15184]\n", " [ 0. 0.47425 -0.56753 0.10733 0.08039 -0.19888]\n", " [ 0. 0.41909 0.06398 -0.06355 0.05448 0.21308]\n", " [ 0. 0. -0. 0.14159 -0.57504 0.21884]\n", " [ 0. 0. -0. 0.43025 0.00749 -0.33506]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.42537 0.31399 0.14028 0.12841 1.15184]\n", " [ 0. 0.05206 -0.47148 0.00657 -0.08083 0.18697]\n", " [ 0. 0.51514 0.48617 0.13568 -0.00166 0.22361]\n", " [ 0. 0. -0. 0.03479 -0.59296 0.00091]\n", " [ 0. 0. -0. 0.41233 0.11429 0.4002 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.00676 -0.52866 -0.18929 -0.01838 1.15184]\n", " [ 0. 0.31765 -0.70599 -0.11255 0.02726 0.07248]\n", " [ 0. 0.28063 0.22058 0.02754 -0.10402 -0.28232]\n", " [ 0. 0. -0. -0.02326 -0.48958 -0.24116]\n", " [ 0. 0. -0. 0.51571 0.17235 -0.31938]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.49773 0.17829 0.14379 -0.12448 1.15184]\n", " [ 0. 0.37161 -0.30074 0.03264 0.12092 -0.28986]\n", " [ 0. 0.68588 0.16662 -0.07387 0.06201 0.03067]\n", " [ 0. 0. -0. 0.09246 -0.40561 0.39761]\n", " [ 0. 0. -0. 0.59968 0.05662 0.04541]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21444 0.48326 0.0147 -0.18961 1.15184]\n", " [ 0. 0.13946 -0.66874 -0.01686 0.09113 0.05193]\n", " [ 0. 0.31788 0.39877 -0.10728 -0.06992 0.28681]\n", " [ 0. 0. 0. 0.17177 -0.51949 0.31464]\n", " [ 0. 0. 0. 0.4858 -0.02268 -0.24731]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21853 -0.48142 -0.09762 -0.16321 1.15184]\n", " [ 0. 0.45845 -0.60166 -0.12148 -0.05219 0.17978]\n", " [ 0. 0.38497 0.07978 0.05597 -0.06614 -0.22943]\n", " [ 0. 0. -0. 0.09088 -0.59996 0.11375]\n", " [ 0. 0. -0. 0.40534 0.0582 -0.38369]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.45884 -0.26266 0.17196 0.08123 1.15184]\n", " [ 0. 0.06289 -0.42218 0.00255 0.08345 -0.21158]\n", " [ 0. 0.56445 0.47534 -0.1303 0.03224 -0.20048]\n", " [ 0. 0. -0. -0.00925 -0.55474 0.11913]\n", " [ 0. 0. -0. 0.45055 0.15834 0.38206]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.02484 0.52812 -0.18237 0.05394 1.15184]\n", " [ 0. 0.29193 -0.71026 0.09475 -0.06097 -0.05549]\n", " [ 0. 0.27636 0.2463 0.00782 0.1106 0.28615]\n", " [ 0. 0. -0. 0.01332 -0.42526 -0.34332]\n", " [ 0. 0. -0. 0.58003 0.13576 -0.20565]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.46709 -0.2477 -0.08275 0.17124 1.15184]\n", " [ 0. 0.42197 -0.33768 0.07085 0.10944 0.28248]\n", " [ 0. 0.64895 0.11626 -0.05398 0.07126 -0.07185]\n", " [ 0. 0. 0. 0.1574 -0.44907 -0.3831 ]\n", " [ 0. 0. 0. 0.55622 -0.00832 0.11574]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.24789 -0.46698 0.04554 0.18465 1.15184]\n", " [ 0. 0.11613 -0.64882 0.00385 0.08929 -0.07196]\n", " [ 0. 0.3378 0.4221 -0.12438 -0.03911 -0.28245]\n", " [ 0. 0. -0. 0.14258 -0.57411 -0.22115]\n", " [ 0. 0. -0. 0.43119 0.0065 0.33355]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.17958 0.49727 0.13943 0.12934 1.15184]\n", " [ 0. 0.4389 -0.63029 -0.12802 -0.02232 -0.16098]\n", " [ 0. 0.35634 0.09933 0.04552 -0.07764 0.24299]\n", " [ 0. 0. 0. 0.03599 -0.59347 -0.00173]\n", " [ 0. 0. 0. 0.41182 0.1131 0.4002 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.48834 0.20261 0.18913 0.01994 1.15184]\n", " [ 0. 0.0873 -0.37277 -0.01551 -0.08659 0.23521]\n", " [ 0. 0.61385 0.45093 0.11525 -0.063 0.17215]\n", " [ 0. 0. -0. -0.02346 -0.4912 0.23852]\n", " [ 0. 0. -0. 0.51409 0.17255 0.32135]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.05605 -0.52572 -0.14498 0.12309 1.15184]\n", " [ 0. 0.26614 -0.71144 -0.06496 0.08812 0.03846]\n", " [ 0. 0.27519 0.27209 -0.04812 -0.10338 -0.28893]\n", " [ 0. 0. -0. 0.0906 -0.40529 -0.39716]\n", " [ 0. 0. -0. 0.6 0.05849 -0.04923]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.42962 0.30814 -0.01618 0.18949 1.15184]\n", " [ 0. 0.45786 -0.38393 -0.10094 -0.08777 -0.27029]\n", " [ 0. 0.60269 0.08037 0.03889 -0.07473 0.1091 ]\n", " [ 0. 0. 0. 0.17202 -0.51798 -0.31655]\n", " [ 0. 0. 0. 0.48732 -0.02293 0.24485]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.28225 0.44705 0.09656 0.16385 1.15184]\n", " [ 0. 0.09457 -0.62416 -0.01942 -0.08407 0.09297]\n", " [ 0. 0.36246 0.44366 0.13221 0.00814 0.27625]\n", " [ 0. 0. -0. 0.09215 -0.59974 -0.11624]\n", " [ 0. 0. -0. 0.40556 0.05694 0.38295]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.14235 -0.50918 0.17137 0.08246 1.15184]\n", " [ 0. 0.41685 -0.65381 0.12704 -0.00991 0.14258]\n", " [ 0. 0.33281 0.12138 -0.03006 0.08859 -0.25422]\n", " [ 0. 0. 0. -0.0085 -0.55594 0.11638]\n", " [ 0. 0. 0. 0.44935 0.15758 0.3829 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.51141 -0.13409 0.18287 -0.05225 1.15184]\n", " [ 0. 0.12665 -0.32811 0.03496 0.08766 -0.25649]\n", " [ 0. 0.65851 0.41158 -0.08893 0.09041 -0.13845]\n", " [ 0. 0. -0. 0.0119 -0.42641 0.3414 ]\n", " [ 0. 0. -0. 0.57888 0.13719 0.20883]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.0871 0.52148 -0.08427 0.17049 1.15184]\n", " [ 0. 0.24036 -0.70955 0.02969 -0.10198 -0.02127]\n", " [ 0. 0.27707 0.29787 0.08357 0.08201 0.2907 ]\n", " [ 0. 0. -0. 0.15643 -0.4476 -0.38412]\n", " [ 0. 0. -0. 0.55769 -0.00735 0.11232]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.38815 -0.35898 0.04426 0.18496 1.15184]\n", " [ 0. 0.47895 -0.43369 0.12082 0.06146 0.25469]\n", " [ 0. 0.55293 0.05928 -0.02859 0.07614 -0.14174]\n", " [ 0. 0. 0. 0.14357 -0.57316 -0.22345]\n", " [ 0. 0. 0. 0.43213 0.00552 0.33201]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.3175 -0.42275 0.13858 0.13025 1.15184]\n", " [ 0. 0.07575 -0.59429 0.03159 0.07739 -0.11502]\n", " [ 0. 0.39233 0.46248 -0.13218 0.02302 -0.26782]\n", " [ 0. 0. -0. 0.03719 -0.59397 -0.00436]\n", " [ 0. 0. -0. 0.41132 0.1119 0.40018]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.10669 0.51782 0.18896 0.02149 1.15184]\n", " [ 0. 0.39322 -0.67271 -0.11648 0.04455 -0.12461]\n", " [ 0. 0.31391 0.14501 0.00734 -0.09687 0.2635 ]\n", " [ 0. 0. 0. -0.02364 -0.49281 0.23587]\n", " [ 0. 0. 0. 0.51248 0.17272 0.3233 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.52545 0.05858 0.14615 -0.12169 1.15184]\n", " [ 0. 0.17999 -0.2942 -0.0602 -0.08254 0.27385]\n", " [ 0. 0.69242 0.35824 0.0541 -0.10782 0.09983]\n", " [ 0. 0. -0. 0.08872 -0.405 0.39667]\n", " [ 0. 0. -0. 0.60029 0.06036 0.05304]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.11822 -0.51531 -0.01766 0.18936 1.15184]\n", " [ 0. 0.21467 -0.70455 0.00233 0.10286 0.00379]\n", " [ 0. 0.28207 0.32356 -0.10772 -0.05292 -0.29145]\n", " [ 0. 0. -0. 0.17224 -0.51645 -0.31846]\n", " [ 0. 0. -0. 0.48884 -0.02316 0.24237]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.34498 0.40064 -0.0955 -0.16447 1.15184]\n", " [ 0. 0.48699 -0.48246 0.13189 0.03322 -0.23699]\n", " [ 0. 0.50416 0.05124 -0.0206 0.07788 0.16968]\n", " [ 0. 0. -0. 0.0934 -0.5995 0.11872]\n", " [ 0. 0. -0. 0.40579 0.05568 -0.38218]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35343 0.3932 -0.17078 -0.08369 1.15184]\n", " [ 0. 0.06105 -0.55887 0.04225 0.06976 0.13811]\n", " [ 0. 0.42775 0.47718 -0.12375 0.05499 0.25668]\n", " [ 0. 0. 0. -0.00772 -0.55713 -0.11362]\n", " [ 0. 0. 0. 0.44816 0.15681 -0.38373]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.07241 -0.52372 -0.18334 0.05055 1.15184]\n", " [ 0. 0.36861 -0.68745 -0.09318 0.07851 0.10701]\n", " [ 0. 0.29918 0.16962 -0.02325 -0.09799 -0.27112]\n", " [ 0. 0. -0. 0.0105 -0.42758 -0.33945]\n", " [ 0. 0. -0. 0.57771 0.13859 -0.21198]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.52828 0.02113 0.08579 -0.16973 1.15184]\n", " [ 0. 0.24325 -0.2767 0.08601 0.06937 -0.28575]\n", " [ 0. 0.70992 0.29498 -0.01999 0.11127 -0.05749]\n", " [ 0. 0. -0. 0.15544 -0.44615 0.3851 ]\n", " [ 0. 0. -0. 0.55915 -0.00635 -0.10888]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.14964 0.50708 -0.04298 -0.18526 1.15184]\n", " [ 0. 0.18919 -0.69629 0.02729 0.09569 0.01411]\n", " [ 0. 0.29033 0.34904 -0.12082 -0.02216 0.29113]\n", " [ 0. 0. 0. 0.14454 -0.5722 0.22574]\n", " [ 0. 0. 0. 0.4331 0.00455 -0.33045]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.30177 -0.43412 0.13772 0.13116 1.15184]\n", " [ 0. 0.48457 -0.52744 0.1354 0.00332 0.21821]\n", " [ 0. 0.45919 0.05366 -0.01202 0.08062 -0.19324]\n", " [ 0. 0. 0. 0.03839 -0.59446 -0.007 ]\n", " [ 0. 0. 0. 0.41083 0.11069 0.40014]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.38958 -0.35743 -0.18878 -0.02304 1.15184]\n", " [ 0. 0.05236 -0.51786 -0.05301 -0.06069 -0.16214]\n", " [ 0. 0.46876 0.48587 0.10444 -0.08711 -0.24222]\n", " [ 0. 0. 0. -0.02378 -0.49442 -0.23321]\n", " [ 0. 0. 0. 0.51087 0.17287 -0.32522]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.03927 0.52724 0.14732 -0.12028 1.15184]\n", " [ 0. 0.3434 -0.69842 -0.05727 0.10417 -0.08972]\n", " [ 0. 0.28821 0.19483 -0.05735 -0.08699 0.27732]\n", " [ 0. 0. 0. 0.08684 -0.40474 0.39614]\n", " [ 0. 0. 0. 0.60055 0.06224 0.05685]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.78023 0.51892 -0.10123 -0.01914 0.18922 1.15184]\n", " [ 0. 0.30957 -0.27895 0.10719 0.05036 0.29117]\n", " [ 0. 0.70767 0.22866 0.00505 0.10458 0.01337]\n", " [ 0. 0. 0. 0.17245 -0.51492 -0.32035]\n", " [ 0. 0. 0. 0.49037 -0.02336 0.23987]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.18156 -0.49655 -0.09442 -0.16509 1.15184]\n", " [ 0. 0.16409 -0.68451 -0.04578 -0.08449 -0.03258]\n", " [ 0. 0.30211 0.37414 0.12525 -0.00816 -0.28965]\n", " [ 0. 0. 0. 0.09466 -0.59924 0.12121]\n", " [ 0. 0. 0. 0.40605 0.05442 -0.3814 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.25955 0.4606 -0.17017 -0.08491 1.15184]\n", " [ 0. 0.47436 -0.56723 0.13097 -0.02886 -0.19904]\n", " [ 0. 0.4194 0.06387 -0.00013 0.08368 0.21293]\n", " [ 0. 0. -0. -0.00693 -0.5583 -0.11087]\n", " [ 0. 0. -0. 0.44699 0.15602 -0.38454]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.42508 0.31437 0.1838 -0.04885 1.15184]\n", " [ 0. 0.05202 -0.47188 -0.06458 -0.04903 0.18676]\n", " [ 0. 0.51475 0.4862 0.07173 -0.11519 0.22378]\n", " [ 0. 0. -0. 0.00912 -0.42878 0.33748]\n", " [ 0. 0. -0. 0.57651 0.13997 0.2151 ]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.00702 -0.52865 -0.08731 0.16896 1.15184]\n", " [ 0. 0.31786 -0.70594 -0.01641 0.11466 0.07263]\n", " [ 0. 0.28068 0.22037 -0.08638 -0.06412 -0.28228]\n", " [ 0. 0. -0. 0.15441 -0.44471 -0.38606]\n", " [ 0. 0. -0. 0.56059 -0.00533 0.10542]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.49795 0.17768 0.04169 0.18556 1.15184]\n", " [ 0. 0.37114 -0.30049 -0.12196 -0.02831 -0.28989]\n", " [ 0. 0.68613 0.16709 -0.01986 -0.09445 0.03032]\n", " [ 0. 0. 0. 0.14549 -0.57122 -0.22803]\n", " [ 0. 0. 0. 0.43407 0.00359 0.32888]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21417 0.48338 -0.13685 -0.13206 1.15184]\n", " [ 0. 0.13965 -0.66889 0.05961 0.07101 0.05176]\n", " [ 0. 0.31773 0.39858 -0.12219 0.03825 0.28684]\n", " [ 0. 0. 0. 0.0396 -0.59492 0.00963]\n", " [ 0. 0. 0. 0.41037 0.10948 -0.40008]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.21886 -0.48127 0.18859 0.02458 1.15184]\n", " [ 0. 0.4586 -0.6014 0.11625 -0.06303 0.17994]\n", " [ 0. 0.38523 0.07963 0.01729 0.08488 -0.22931]\n", " [ 0. 0. 0. -0.02391 -0.49603 0.23055]\n", " [ 0. 0. 0. 0.50927 0.17299 0.32712]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.45858 -0.26312 -0.14846 0.11886 1.15184]\n", " [ 0. 0.06275 -0.42259 -0.07613 -0.03421 -0.21138]\n", " [ 0. 0.56403 0.47548 0.02815 -0.13126 -0.20069]\n", " [ 0. 0. 0. 0.08496 -0.40453 -0.39558]\n", " [ 0. 0. 0. 0.60077 0.06413 -0.06066]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.02458 0.52813 -0.02063 0.18906 1.15184]\n", " [ 0. 0.29215 -0.71024 -0.01973 -0.11096 -0.05563]\n", " [ 0. 0.27639 0.24608 0.10504 0.03542 0.28612]\n", " [ 0. 0. -0. 0.17263 -0.51338 -0.32222]\n", " [ 0. 0. -0. 0.49191 -0.02354 0.23734]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.46737 -0.24716 -0.09335 -0.1657 1.15184]\n", " [ 0. 0.42161 -0.33733 -0.13027 -0.00421 0.28256]\n", " [ 0. 0.6493 0.11662 -0.02784 -0.085 -0.07152]\n", " [ 0. 0. -0. 0.09592 -0.59898 0.12368]\n", " [ 0. 0. -0. 0.40632 0.05317 -0.38061]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.24761 -0.46713 -0.16956 -0.08613 1.15184]\n", " [ 0. 0.11632 -0.649 -0.07019 -0.05537 -0.0718 ]\n", " [ 0. 0.33762 0.42191 0.11081 -0.06868 -0.28249]\n", " [ 0. 0. 0. -0.00613 -0.55946 -0.10812]\n", " [ 0. 0. 0. 0.44583 0.15521 -0.38532]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.1799 0.49715 0.18424 -0.04716 1.15184]\n", " [ 0. 0.43907 -0.63007 -0.08807 0.09558 -0.16113]\n", " [ 0. 0.35655 0.09916 -0.04067 -0.08026 0.24289]\n", " [ 0. 0. 0. 0.00777 -0.43 0.33548]\n", " [ 0. 0. 0. 0.57529 0.14132 0.21821]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.48812 0.20314 0.08883 -0.16816 1.15184]\n", " [ 0. 0.08704 -0.37317 -0.08613 -0.01765 0.23502]\n", " [ 0. 0.61346 0.45119 -0.01572 -0.13043 0.1724 ]\n", " [ 0. 0. -0. 0.15336 -0.44328 0.387 ]\n", " [ 0. 0. -0. 0.56201 -0.00427 -0.10195]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.05579 -0.52575 -0.0404 -0.18584 1.15184]\n", " [ 0. 0.26636 -0.71144 -0.04725 -0.09878 0.0386 ]\n", " [ 0. 0.27518 0.27187 0.11384 0.00613 -0.28891]\n", " [ 0. 0. 0. 0.14644 -0.57022 0.23031]\n", " [ 0. 0. 0. 0.43507 0.00265 -0.32729]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.42995 0.30768 0.13598 0.13296 1.15184]\n", " [ 0. 0.45762 -0.38353 -0.13189 0.0222 -0.2704 ]\n", " [ 0. 0.60309 0.08061 -0.0331 -0.0775 0.10882]\n", " [ 0. 0. 0. 0.04082 -0.59538 -0.01225]\n", " [ 0. 0. 0. 0.40992 0.10827 0.40001]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.28197 0.44723 0.18838 0.02611 1.15184]\n", " [ 0. 0.09474 -0.62438 -0.078 -0.03695 0.09279]\n", " [ 0. 0.36224 0.44349 0.08846 -0.09857 0.27631]\n", " [ 0. 0. -0. -0.024 -0.49763 0.22788]\n", " [ 0. 0. -0. 0.50766 0.17309 0.32898]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.14265 -0.50909 0.1496 -0.11743 1.15184]\n", " [ 0. 0.41704 -0.65364 0.0471 -0.11842 0.14273]\n", " [ 0. 0.33298 0.12119 0.06627 0.06599 -0.25414]\n", " [ 0. 0. 0. 0.08307 -0.40434 0.39497]\n", " [ 0. 0. 0. 0.60095 0.06602 0.06446]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.51126 -0.13469 0.02212 -0.18889 1.15184]\n", " [ 0. 0.12626 -0.32845 0.0943 0.00131 -0.25633]\n", " [ 0. 0.65818 0.41197 0.04936 0.11687 -0.13875]\n", " [ 0. 0. -0. 0.17279 -0.51183 0.32409]\n", " [ 0. 0. -0. 0.49346 -0.0237 -0.23479]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.08684 0.52152 -0.09227 -0.1663 1.15184]\n", " [ 0. 0.24057 -0.70958 0.06704 0.08242 -0.02141]\n", " [ 0. 0.27704 0.29766 -0.11495 0.02211 0.29069]\n", " [ 0. 0. 0. 0.09717 -0.59869 0.12616]\n", " [ 0. 0. 0. 0.4066 0.05192 -0.37979]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.3885 -0.3586 -0.16894 -0.08733 1.15184]\n", " [ 0. 0.47884 -0.43328 -0.12542 0.05138 0.25483]\n", " [ 0. 0.55335 0.05939 -0.03909 -0.07134 -0.14149]\n", " [ 0. 0. -0. -0.00531 -0.56061 -0.10537]\n", " [ 0. 0. -0. 0.44468 0.1544 -0.38608]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.31721 -0.42297 0.18467 -0.04546 1.15184]\n", " [ 0. 0.07589 -0.59456 0.08216 0.01549 -0.11483]\n", " [ 0. 0.39206 0.46234 -0.05251 0.12346 -0.2679 ]\n", " [ 0. 0. -0. 0.00644 -0.43124 0.33346]\n", " [ 0. 0. -0. 0.57405 0.14264 0.22128]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.10698 0.51776 -0.09034 0.16736 1.15184]\n", " [ 0. 0.39342 -0.67257 0.002 -0.12471 -0.12475]\n", " [ 0. 0.31405 0.14481 0.08717 0.04283 0.26343]\n", " [ 0. 0. -0. 0.15228 -0.44187 -0.3879 ]\n", " [ 0. 0. -0. 0.56342 -0.00319 0.09846]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.52537 0.05922 0.0391 0.18612 1.15184]\n", " [ 0. 0.1795 -0.29442 0.10104 -0.01467 0.27372]\n", " [ 0. 0.6922 0.35873 0.07007 0.09826 0.10016]\n", " [ 0. 0. 0. 0.14738 -0.56921 -0.23259]\n", " [ 0. 0. 0. 0.43608 0.00171 0.32567]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.11797 -0.51537 -0.13511 -0.13385 1.15184]\n", " [ 0. 0.21488 -0.70461 -0.08101 -0.06347 0.00394]\n", " [ 0. 0.28201 0.32335 0.10923 -0.04967 -0.29145]\n", " [ 0. 0. 0. 0.04204 -0.59581 0.01488]\n", " [ 0. 0. 0. 0.40948 0.10705 -0.39992]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 -0.34534 0.40033 -0.18816 -0.02764 1.15184]\n", " [ 0. 0.48697 -0.48207 0.10806 -0.0826 -0.23714]\n", " [ 0. 0.50455 0.05126 0.04823 0.06453 0.16947]\n", " [ 0. 0. -0. -0.02407 -0.49923 -0.2252 ]\n", " [ 0. 0. -0. 0.50606 0.17316 -0.33082]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n", "[[ 2.78023 0.35313 0.39347 -0.15072 0.11598 1.15184]\n", " [ 0. 0.06115 -0.55918 0.08127 -0.00705 0.13792]\n", " [ 0. 0.42744 0.47708 -0.0055 0.13529 0.25678]\n", " [ 0. 0. 0. 0.08118 -0.4042 -0.39434]\n", " [ 0. 0. 0. 0.60109 0.06791 -0.06826]\n", " [ 0. 0. 0. 0. 0. -0.11832]]\n", "\n", "\n" ] } ], "source": [ "Ak, Q = pure_qr(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's compare to the eigenvalues:" ] }, { "cell_type": "code", "execution_count": 469, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 2.78023+0.j , -0.11832+0.j , 0.26911+0.44246j,\n", " 0.26911-0.44246j, 0.07454+0.49287j, 0.07454-0.49287j])" ] }, "execution_count": 469, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.eigvals(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check that Q is orthogonal:" ] }, { "cell_type": "code", "execution_count": 476, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(True, True)" ] }, "execution_count": 476, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(np.eye(n), Q @ Q.T), np.allclose(np.eye(n), Q.T @ Q)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is really really slow." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Practical QR (QR with shifts)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Idea**: Instead of factoring $A_k$ as $Q_k R_k$, \n", "\n", "1. Get the QR factorization $$A_k - s_k I = Q_k R_k$$\n", "2. Set $$A_{k+1} = R_k Q_k + s_k I$$\n", "\n", "Choose $s_k$ to approximate an eigenvalue of $A$. We'll use $s_k = A_k(m,m)$. \n", "\n", "The idea of adding shifts to speed up convergence shows up in many algorithms in numerical linear algebra (including the power method, inverse iteration, and Rayleigh quotient iteration). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Homework: Add shifts to the QR algorithm" ] }, { "cell_type": "code", "execution_count": 460, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#Exercise: Add shifts to the QR algorithm\n", "#Exercise: def practical_qr(A, iters=10):\n", "#Exercise: return Ak, Q\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Practical QR" ] }, { "cell_type": "code", "execution_count": 204, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 5.16264 2.53603 0.31923 0.35315 0.97569 0.43615]\n", "[ 7.99381 0.05922 0.34478 0.29482 0.79026 0.29999]\n", "[ 8.00491 0.04358 0.89735 0.26386 0.26182 0.31135]\n", "[ 8.00493 0.13648 0.91881 0.14839 0.24313 0.33115]\n", "[ 8.00493 0.43377 0.62809 0.13429 0.24592 0.33589]\n", "[ 8.00493 0.81058 0.25128 0.13297 0.24722 0.3359 ]\n", "[ 8.00493 0.98945 0.07221 0.13292 0.24747 0.3359 ]\n", "[ 8.00493 1.0366 0.02497 0.13296 0.24751 0.3359 ]\n", "[ 8.00493 1.04688 0.01465 0.13299 0.24752 0.3359 ]\n", "[ 8.00493 1.04902 0.0125 0.13301 0.24753 0.3359 ]\n" ] } ], "source": [ "Ak, Q = practical_qr(A, 10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check that Q is orthogonal:" ] }, { "cell_type": "code", "execution_count": 201, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(True, True)" ] }, "execution_count": 201, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(np.eye(n), Q @ Q.T), np.allclose(np.eye(n), Q.T @ Q)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's compare to the eigenvalues:" ] }, { "cell_type": "code", "execution_count": 196, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 2.68500+0.j , 0.19274+0.41647j, 0.19274-0.41647j,\n", " -0.35988+0.43753j, -0.35988-0.43753j, -0.18346+0.j ])" ] }, "execution_count": 196, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.eigvals(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Problem**: This is better than the unshifted version (which wasn't even guaranteed to converge), but is still really slow! In fact, it is $\\mathcal{O}(n^4)$, which is awful." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the case of symmetric matrices, it's $\\mathcal{O}(n^3)$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, if you start with a **Hessenberg matrix** (zeros below the first subdiagonal), it's faster: $\\mathcal{O}(n^3)$, and $\\mathcal{O}(n^2)$ if symmetric." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "## A Two-Phase Approach" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "In practice, a two phase approach is used to find eigenvalues:\n", "\n", "1. Reduce the matrix to *Hessenberg* form (zeros below the first subdiagonal)\n", "2. Iterative process that causes Hessenberg to converge to a *triangular* matrix. The eigenvalues of a triangular matrix are the values on the diagonal, so we are finished!\n", "\n", "\"2\n", "(source: Trefethen, Lecture 25)\n", "\n", "In the case of a Hermitian matrix, this approach is even faster, since the intermediate step is also Hermitian (and a Hermitian Hessenberg is *tridiagonal*).\n", "\n", "\"2\n", "(source: Trefethen, Lecture 25)\n", "\n", "Phase 1 reaches an exact solution in a finite number of steps, whereas Phase 2 theoretically never reaches the exact solution.\n", "\n", "We've already done step 2: the QR algorithm. Remember that it would be possible to just use the QR algorithm, but ridiculously slow." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "## Arnoldi Iteration" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "We can use the Arnoldi iteration for phase 1 (and the QR algorithm for phase 2)." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Initializations" ] }, { "cell_type": "code", "execution_count": 459, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "import numpy as np\n", "n = 5\n", "A0 = np.random.rand(n,n) #.astype(np.float64)\n", "A = A0 @ A0.T\n", "\n", "np.set_printoptions(precision=5, suppress=True)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "### Linear Algebra Review: Projections" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "When vector $\\mathbf{b}$ is projected onto a line $\\mathbf{a}$, its projection $\\mathbf{p}$ is the part of $\\mathbf{b}$ along that line $\\mathbf{a}$.\n", "\n", "Let's look at interactive graphic (3.4) for [section 3.2.2: Projections](http://immersivemath.com/ila/ch03_dotproduct/ch03.html) of the [Immersive Linear Algebra online book](http://immersivemath.com/ila/index.html).\n", "\n", "\"projection\"\n", "(source: [Immersive Math](http://immersivemath.com/ila/ch03_dotproduct/ch03.html))\n", "\n", "And here is what it looks like to project a vector onto a plane:\n", "\n", "\"projection\"\n", "(source: [The Linear Algebra View of Least-Squares Regression](https://medium.com/@andrew.chamberlain/the-linear-algebra-view-of-least-squares-regression-f67044b7f39b))\n", "\n", "When vector $\\mathbf{b}$ is projected onto a line $\\mathbf{a}$, its projection $\\mathbf{p}$ is the part of $\\mathbf{b}$ along that line $\\mathbf{a}$. So $\\mathbf{p}$ is some multiple of $\\mathbf{a}$. Let $\\mathbf{p} = \\hat{x}\\mathbf{a}$ where $\\hat{x}$ is a scalar." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Orthogonality" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**The key to projection is orthogonality:** The line *from* $\\mathbf{b}$ to $\\mathbf{p}$ (which can be written $\\mathbf{b} - \\hat{x}\\mathbf{a}$) is perpendicular to $\\mathbf{a}$.\n", "\n", "This means that $$ \\mathbf{a} \\cdot (\\mathbf{b} - \\hat{x}\\mathbf{a}) = 0 $$\n", "\n", "and so $$\\hat{x} = \\frac{\\mathbf{a} \\cdot \\mathbf{b}}{\\mathbf{a} \\cdot \\mathbf{a}} $$" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "### The Algorithm" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Motivation**:\n", "\n", "We want orthonormal columns in $Q$ and a Hessenberg $H$ such that $A Q = Q H$.\n", "\n", "Thinking about it iteratively, $$ A Q_n = Q_{n+1} H_n $$ where $Q_{n+1}$ is $n\\times n+1$ and $H_n$ is $n+1 \\times n$. This creates a solvable recurrence relation.\n", "\n", "\"arnoldi\"\n", "(source: Trefethen, Lecture 33)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**Pseudo-code for Arnoldi Algorithm**\n", "\n", " Start with an arbitrary vector (normalized to have norm 1) for first col of Q\n", " for n=1,2,3...\n", " v = A @ nth col of Q\n", " for j=1,...n\n", " project v onto q_j, and subtract the projection off of v\n", " want to capture part of v that isn't already spanned by prev columns of Q\n", " store coefficients in H\n", " normalize v, and then make it the (n+1)th column of Q" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Notice that we are multiplying A by the previous vector in Q and removing the components that are not orthogonal to the existing columns of Q.\n", "\n", "**Question:** Repeated multiplications of A? Does this remind you of anything?" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### Answer:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "#Exercise Answer\n", "The *Power Method* involved iterative multiplications by A as well! " ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "### About how the Arnoldi Iteration works" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "- With the Arnoldi Iteration, we are finding an orthonormal basis for the *Krylov subspace*. \n", "The Krylov matrix $$ K = \\left[b \\; Ab \\; A^2b \\; \\dots \\; A^{n-1}b \\right]$$\n", "has a QR factorization\n", "$$K = QR$$\n", "and that is the same $Q$ that is being found in the Arnoldi Iteration. Note that the Arnoldi Iteration does not explicity calculate $K$ or $R$.\n", "\n", "- Intuition: K contains good information about the largest eigenvalues of A, and the QR factorization reveals this information by peeling off one approximate eigenvector at a time.\n" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The Arnoldi Iteration is two things:\n", "1. the basis of many of the iterative algorithms of numerical linear algebra\n", "2. a technique for finding eigenvalues of nonhermitian matrices\n", "(Trefethen, page 257)\n", "\n", "**How Arnoldi Locates Eigenvalues**\n", "\n", "1. Carry out Arnoldi iteration\n", "2. Periodically calculate the eigenvalues (called *Arnoldi estimates* or *Ritz values*) of the Hessenberg H, using the QR algorithm\n", "3. Check at whether these values are converging. If they are, they're probably eigenvalues of A." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "### Implementation" ] }, { "cell_type": "code", "execution_count": 246, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "# Decompose square matrix A @ Q ~= Q @ H\n", "def arnoldi(A):\n", " m, n = A.shape\n", " assert(n <= m)\n", " \n", " # Hessenberg matrix\n", " H = np.zeros([n+1,n]) #, dtype=np.float64)\n", " # Orthonormal columns\n", " Q = np.zeros([m,n+1]) #, dtype=np.float64)\n", " # 1st col of Q is a random column with unit norm\n", " b = np.random.rand(m)\n", " Q[:,0] = b / np.linalg.norm(b)\n", " for j in range(n):\n", " v = A @ Q[:,j]\n", " for i in range(j+1):\n", " #This comes from the formula for projection of v onto q.\n", " #Since columns q are orthonormal, q dot q = 1\n", " H[i,j] = np.dot(Q[:,i], v)\n", " v = v - (H[i,j] * Q[:,i])\n", " H[j+1,j] = np.linalg.norm(v)\n", " Q[:,j+1] = v / H[j+1,j]\n", " \n", " # printing this to see convergence, would be slow to use in practice\n", " print(np.linalg.norm(A @ Q[:,:-1] - Q @ H))\n", " return Q[:,:-1], H[:-1,:]" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "8.59112969133\n", "4.45398729097\n", "0.935693639985\n", "3.36613943339\n", "0.817740180293\n" ] } ], "source": [ "Q, H = arnoldi(A)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Check that H is tri-diagonal:" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 5.62746, 4.05085, -0. , 0. , -0. ],\n", " [ 4.05085, 3.07109, 0.33036, 0. , -0. ],\n", " [ 0. , 0.33036, 0.98297, 0.11172, -0. ],\n", " [ 0. , 0. , 0.11172, 0.29777, 0.07923],\n", " [ 0. , 0. , 0. , 0.07923, 0.06034]])" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "H" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Exercise" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Write code to confirm that:\n", "1. AQ = QH\n", "2. Q is orthonormal" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Answer:" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Exercise:\n", "np.allclose(A @ Q, Q @ H)" ] }, { "cell_type": "code", "execution_count": 456, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 456, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Exercise:\n", "np.allclose(np.eye(len(Q)), Q.T @ Q)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### General Case:" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "**General Matrix**: Now we can do this on our general matrix A (not symmetric). In this case, we are getting a Hessenberg instead of a Tri-diagonal" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.44287067354\n", "1.06234006889\n", "0.689291414367\n", "0.918098818651\n", "4.7124490411e-16\n" ] } ], "source": [ "Q0, H0 = arnoldi(A0)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Check that H is Hessenberg:" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 1.67416, 0.83233, -0.39284, 0.10833, 0.63853],\n", " [ 1.64571, 1.16678, -0.54779, 0.50529, 0.28515],\n", " [ 0. , 0.16654, -0.22314, 0.08577, -0.02334],\n", " [ 0. , 0. , 0.79017, 0.11732, 0.58978],\n", " [ 0. , 0. , 0. , 0.43238, -0.07413]])" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "H0" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(A0 @ Q0, Q0 @ H0)" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(True, True)" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(np.eye(len(Q0)), Q0.T @ Q0), np.allclose(np.eye(len(Q0)), Q0 @ Q0.T)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "## Putting it all together" ] }, { "cell_type": "code", "execution_count": 215, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def eigen(A, max_iter=20):\n", " Q, H = arnoldi(A)\n", " Ak, QQ = practical_qr(H, max_iter)\n", " U = Q @ QQ\n", " D = np.diag(Ak)\n", " return U, D" ] }, { "cell_type": "code", "execution_count": 213, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "n = 10\n", "A0 = np.random.rand(n,n)\n", "A = A0 @ A0.T" ] }, { "cell_type": "code", "execution_count": 242, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "14.897422908\n", "1.57451192745\n", "1.4820012435\n", "0.668164424736\n", "0.438450319682\n", "0.674050723258\n", "1.19470880942\n", "0.217103444634\n", "0.105443975462\n", "3.8162597576e-15\n", "[ 27.34799 1.22613 1.29671 0.70253 0.49651 0.56779 0.60974\n", " 0.70123 0.19209 0.04905]\n", "[ 27.34981 1.85544 1.04793 0.49607 0.44505 0.7106 1.00724\n", " 0.07293 0.16058 0.04411]\n", "[ 27.34981 2.01074 0.96045 0.54926 0.61117 0.8972 0.53424\n", " 0.19564 0.03712 0.04414]\n", "[ 27.34981 2.04342 0.94444 0.61517 0.89717 0.80888 0.25402\n", " 0.19737 0.03535 0.04414]\n", "[ 27.34981 2.04998 0.94362 0.72142 1.04674 0.58643 0.21495\n", " 0.19735 0.03534 0.04414]\n", "[ 27.34981 2.05129 0.94496 0.90506 0.95536 0.49632 0.21015\n", " 0.19732 0.03534 0.04414]\n", "[ 27.34981 2.05156 0.94657 1.09452 0.79382 0.46723 0.20948\n", " 0.1973 0.03534 0.04414]\n", "[ 27.34981 2.05161 0.94863 1.1919 0.70539 0.45628 0.20939\n", " 0.19728 0.03534 0.04414]\n", "[ 27.34981 2.05162 0.95178 1.22253 0.67616 0.45174 0.20939\n", " 0.19727 0.03534 0.04414]\n", "[ 27.34981 2.05162 0.95697 1.22715 0.66828 0.44981 0.2094\n", " 0.19725 0.03534 0.04414]\n", "[ 27.34981 2.05162 0.96563 1.22124 0.66635 0.44899 0.20941\n", " 0.19724 0.03534 0.04414]\n", "[ 27.34981 2.05162 0.97969 1.20796 0.66592 0.44864 0.20942\n", " 0.19723 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.00135 1.18652 0.66585 0.44849 0.20943\n", " 0.19722 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.03207 1.15586 0.66584 0.44843 0.20943\n", " 0.19722 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.07082 1.11714 0.66584 0.4484 0.20944\n", " 0.19721 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.11307 1.07489 0.66585 0.44839 0.20944\n", " 0.1972 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.15241 1.03556 0.66585 0.44839 0.20945\n", " 0.1972 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.18401 1.00396 0.66585 0.44839 0.20945\n", " 0.1972 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.20652 0.98145 0.66585 0.44839 0.20946\n", " 0.19719 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.22121 0.96676 0.66585 0.44839 0.20946\n", " 0.19719 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.23026 0.95771 0.66585 0.44839 0.20946\n", " 0.19719 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.23563 0.95234 0.66585 0.44839 0.20946\n", " 0.19718 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.23876 0.94921 0.66585 0.44839 0.20947\n", " 0.19718 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24056 0.94741 0.66585 0.44839 0.20947\n", " 0.19718 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24158 0.94639 0.66585 0.44839 0.20947\n", " 0.19718 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24216 0.94581 0.66585 0.44839 0.20947\n", " 0.19718 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24249 0.94548 0.66585 0.44839 0.20947\n", " 0.19718 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24268 0.94529 0.66585 0.44839 0.20947\n", " 0.19718 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24278 0.94519 0.66585 0.44839 0.20947\n", " 0.19718 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24284 0.94513 0.66585 0.44839 0.20947\n", " 0.19718 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24288 0.94509 0.66585 0.44839 0.20947\n", " 0.19718 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.2429 0.94507 0.66585 0.44839 0.20947\n", " 0.19717 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24291 0.94506 0.66585 0.44839 0.20947\n", " 0.19717 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24291 0.94506 0.66585 0.44839 0.20947\n", " 0.19717 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24292 0.94505 0.66585 0.44839 0.20947\n", " 0.19717 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24292 0.94505 0.66585 0.44839 0.20947\n", " 0.19717 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24292 0.94505 0.66585 0.44839 0.20948\n", " 0.19717 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24292 0.94505 0.66585 0.44839 0.20948\n", " 0.19717 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24292 0.94505 0.66585 0.44839 0.20948\n", " 0.19717 0.03534 0.04414]\n", "[ 27.34981 2.05162 1.24292 0.94505 0.66585 0.44839 0.20948\n", " 0.19717 0.03534 0.04414]\n" ] } ], "source": [ "U, D = eigen(A, 40)" ] }, { "cell_type": "code", "execution_count": 240, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([ 5.10503, 0.58805, 0.49071, -0.65174, -0.60231, -0.37664,\n", " -0.13165, 0.0778 , -0.10469, -0.29771])" ] }, "execution_count": 240, "metadata": {}, "output_type": "execute_result" } ], "source": [ "D" ] }, { "cell_type": "code", "execution_count": 241, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([ 27.34981, 2.05162, 1.24292, 0.94505, 0.66585, 0.44839,\n", " 0.20948, 0.19717, 0.04414, 0.03534])" ] }, "execution_count": 241, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.eigvals(A)" ] }, { "cell_type": "code", "execution_count": 236, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "0.0008321887107978883" ] }, "execution_count": 236, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.norm(U @ np.diag(D) @ U.T - A)" ] }, { "cell_type": "code", "execution_count": 237, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 237, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(U @ np.diag(D) @ U.T, A, atol=1e-3)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "### Further Reading" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Let's find some eigenvalues!\n", "\n", "\n", "from [Nonsymmetric Eigenvalue Problems](https://sites.math.washington.edu/~morrow/498_13/eigenvalues.pdf) chapter:\n", "\n", "Note that \"direct\" methods must still iterate, since finding eigenvalues is mathematically equivalent to finding zeros of polynomials, for which no noniterative methods can exist. We call a method direct if experience shows that it (nearly) never fails to converge in a\n", "fixed number of iterations.\n", "\n", "Iterative methods typically provide approximations only to a subset of the eigenvalues and eigenvectors and are usually run only long enough to get a few adequately accurate eigenvalues rather than a large number\n", "\n", "our ultimate algorithm: the shifted Hessenberg QR algorithm\n", "\n", "More reading:\n", "- [The Symmetric Eigenproblem and SVD](https://sites.math.washington.edu/~morrow/498_13/eigenvalues2.pdf)\n", "- [Iterative Methods for Eigenvalue Problems](https://sites.math.washington.edu/~morrow/498_13/eigenvalues3.pdf) Rayleigh-Ritz Method, Lanczos algorithm" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "### Coming Up\n", "\n", "We will be coding our own QR decomposition (two different ways!) in the future, but first we are going to see another way that the QR decomposition can be used: to calculate linear regression." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## End" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Miscellaneous Notes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Symmetric matrices come up naturally:\n", "- distance matrices\n", "- relationship matrices (Facebook or LinkedIn)\n", "- ODEs\n", "\n", "We will look at positive definite matrices, since that guarantees that all the eigenvalues are real." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note: in the confusing language of NLA, the QR algorithm is *direct*, because you are making progress on all columns at once. In other math/CS language, the QR algorithm is *iterative*, because it iteratively converges and never reaches an exact solution." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "structured orthogonalization. In the language of NLA, Arnoldi iteration is considered an *iterative* algorithm, because you could stop part way and have a few columns completed.\n", "\n", "a Gram-Schmidt style iteration for transforming a matrix to Hessenberg form" ] }, { "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.6.1" }, "widgets": { "state": { "2987aec2ec494d2b9b31bdf93ba87cb6": { "views": [ { "cell_index": 18 } ] }, "84bffde89e894158860b175e986f4d61": { "views": [ { "cell_index": 14 } ] } }, "version": "1.2.0" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: nbs/8. Implementing QR Factorization.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "You can read an overview of this Numerical Linear Algebra course in [this blog post](http://www.fast.ai/2017/07/17/num-lin-alg/). The course was originally taught in the [University of San Francisco MS in Analytics](https://www.usfca.edu/arts-sciences/graduate-programs/analytics) graduate program. Course lecture videos are [available on YouTube](https://www.youtube.com/playlist?list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY) (note that the notebook numbers and video numbers do not line up, since some notebooks took longer than 1 video to cover).\n", "\n", "You can ask questions about the course on [our fast.ai forums](http://forums.fast.ai/c/lin-alg)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 8. Implementing QR Factorization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We used QR factorization in computing eigenvalues and to compute least squares regression. It is an important building block in numerical linear algebra.\n", "\n", "\"One algorithm in numerical linear algebra is more important than all the others: QR factorization.\" --Trefethen, page 48\n", "\n", "Recall that for any matrix $A$, $A = QR$ where $Q$ is orthogonal and $R$ is upper-triangular." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Reminder**: The *QR algorithm*, which we looked at in the last lesson, uses the *QR decomposition*, but don't confuse the two." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### In Numpy ###" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "\n", "np.set_printoptions(suppress=True, precision=4)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "n = 5\n", "A = np.random.rand(n,n)\n", "npQ, npR = np.linalg.qr(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check that Q is orthogonal:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(True, True)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(np.eye(n), npQ @ npQ.T), np.allclose(np.eye(n), npQ.T @ npQ)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check that R is triangular" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.8524, -0.7872, -1.1163, -1.2248, -0.7587],\n", " [ 0. , -0.9363, -0.2958, -0.7666, -0.632 ],\n", " [ 0. , 0. , 0.4645, -0.1744, -0.3542],\n", " [ 0. , 0. , 0. , 0.4328, -0.2567],\n", " [ 0. , 0. , 0. , 0. , 0.1111]])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "npR" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Gram-Schmidt ##" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Classical Gram-Schmidt (unstable) ###" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For each $j$, calculate a single projection $$v_j = P_ja_j$$ where $P_j$ projects onto the space orthogonal to the span of $q_1,\\ldots,q_{j-1}$." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def cgs(A):\n", " m, n = A.shape\n", " Q = np.zeros([m,n], dtype=np.float64)\n", " R = np.zeros([n,n], dtype=np.float64)\n", " for j in range(n):\n", " v = A[:,j]\n", " for i in range(j):\n", " R[i,j] = np.dot(Q[:,i], A[:,j])\n", " v = v - (R[i,j] * Q[:,i])\n", " R[j,j] = np.linalg.norm(v)\n", " Q[:, j] = v / R[j,j]\n", " return Q, R" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Q, R = cgs(A)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(A, Q @ R)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check if Q is unitary:" ] }, { "cell_type": "code", "execution_count": 109, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 109, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(np.eye(len(Q)), Q.dot(Q.T))" ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 115, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(npQ, -Q)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Gram-Schmidt should remind you a bit of the Arnoldi Iteration (used to transform a matrix to Hessenberg form) since it is also a structured orthogonalization." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Modified Gram-Schmidt ###" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Classical (unstable) Gram-Schmidt: for each $j$, calculate a single projection $$v_j = P_ja_j$$ where $P_j$ projects onto the space orthogonal to the span of $q_1,\\ldots,q_{j-1}$.\n", "\n", "Modified Gram-Schmidt: for each $j$, calculate $j-1$ projections $$P_j = P_{\\perp q_{j-1}\\cdots\\perp q_{2}\\perp q_{1}}$$" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "n = 3\n", "A = np.random.rand(n,n).astype(np.float64)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def mgs(A):\n", " V = A.copy()\n", " m, n = A.shape\n", " Q = np.zeros([m,n], dtype=np.float64)\n", " R = np.zeros([n,n], dtype=np.float64)\n", " for i in range(n):\n", " R[i,i] = np.linalg.norm(V[:,i])\n", " Q[:,i] = V[:,i] / R[i,i]\n", " for j in range(i, n):\n", " R[i,j] = np.dot(Q[:,i],V[:,j])\n", " V[:,j] = V[:,j] - R[i,j]*Q[:,i]\n", " return Q, R" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Q, R = mgs(A)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(np.eye(len(Q)), Q.dot(Q.T.conj()))" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(A, np.matmul(Q,R))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Householder" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Intro" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\begin{array}{ l | l | c }\n", "\\hline\n", "Gram-Schmidt & Triangular\\, Orthogonalization & A R_1 R_2 \\cdots R_n = Q \\\\\n", "Householder & Orthogonal\\, Triangularization & Q_n \\cdots Q_2 Q_1 A = R \\\\\n", "\\hline\n", "\\end{array}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Householder reflections lead to a more nearly orthogonal matrix Q with rounding errors\n", "\n", "Gram-Schmidt can be stopped part-way, leaving a reduced QR of 1st n columns of A" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Initialization" ] }, { "cell_type": "code", "execution_count": 113, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "n = 4\n", "A = np.random.rand(n,n).astype(np.float64)\n", "\n", "Q = np.zeros([n,n], dtype=np.float64)\n", "R = np.zeros([n,n], dtype=np.float64)" ] }, { "cell_type": "code", "execution_count": 114, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.5435, 0.6379, 0.4011, 0.5773],\n", " [ 0.0054, 0.8049, 0.6804, 0.0821],\n", " [ 0.2832, 0.2416, 0.8656, 0.8099],\n", " [ 0.1139, 0.9621, 0.7623, 0.5648]])" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A" ] }, { "cell_type": "code", "execution_count": 115, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from scipy.linalg import block_diag" ] }, { "cell_type": "code", "execution_count": 116, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.set_printoptions(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Algorithm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I added more computations and more info than needed, since it's illustrative of how the algorithm works. This version returns the *Householder Reflectors* as well." ] }, { "cell_type": "code", "execution_count": 117, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def householder_lots(A):\n", " m, n = A.shape\n", " R = np.copy(A)\n", " V = []\n", " Fs = []\n", " for k in range(n):\n", " v = np.copy(R[k:,k])\n", " v = np.reshape(v, (n-k, 1))\n", " v[0] += np.sign(v[0]) * np.linalg.norm(v)\n", " v /= np.linalg.norm(v)\n", " R[k:,k:] = R[k:,k:] - 2*np.matmul(v, np.matmul(v.T, R[k:,k:]))\n", " V.append(v)\n", " F = np.eye(n-k) - 2 * np.matmul(v, v.T)/np.matmul(v.T, v)\n", " Fs.append(F)\n", " return R, V, Fs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check that R is upper triangular:" ] }, { "cell_type": "code", "execution_count": 121, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.62337, -0.84873, -0.88817, -0.97516],\n", " [ 0. , -1.14818, -0.86417, -0.30109],\n", " [ 0. , 0. , -0.64691, -0.45234],\n", " [-0. , 0. , 0. , -0.26191]])" ] }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a check, we will calculate $Q^T$ and $R$ using the block matrices $F$. The matrices $F$ are *the householder reflectors*.\n", "\n", "Note that this is not a computationally efficient way of working with $Q$. In most cases, you do not actually need $Q$. For instance, if you are using QR to solve least squares, you just need $Q^*b$.\n", "\n", "- See page 74 of Trefethen for techniques to implicitly calculate the product $Q^*b$ or $Qx$.\n", "- See [these lecture notes](http://www.cs.cornell.edu/~bindel/class/cs6210-f09/lec18.pdf) for a different implementation of Householder that calculates Q simultaneously as part of R. " ] }, { "cell_type": "code", "execution_count": 175, "metadata": { "collapsed": true }, "outputs": [], "source": [ "QT = np.matmul(block_diag(np.eye(3), F[3]), \n", " np.matmul(block_diag(np.eye(2), F[2]), \n", " np.matmul(block_diag(np.eye(1), F[1]), F[0])))" ] }, { "cell_type": "code", "execution_count": 178, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.69502, 0.10379, -0.71146],\n", " [ 0.10379, 0.99364, 0.04356],\n", " [-0.71146, 0.04356, 0.70138]])" ] }, "execution_count": 178, "metadata": {}, "output_type": "execute_result" } ], "source": [ "F[1]" ] }, { "cell_type": "code", "execution_count": 177, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1. , 0. , 0. , 0. ],\n", " [ 0. , -0.69502, 0.10379, -0.71146],\n", " [ 0. , 0.10379, 0.99364, 0.04356],\n", " [ 0. , -0.71146, 0.04356, 0.70138]])" ] }, "execution_count": 177, "metadata": {}, "output_type": "execute_result" } ], "source": [ "block_diag(np.eye(1), F[1])" ] }, { "cell_type": "code", "execution_count": 176, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.87185, -0.00861, -0.45431, -0.18279],\n", " [ 0.08888, -0.69462, 0.12536, -0.70278],\n", " [-0.46028, 0.10167, 0.88193, -0.00138],\n", " [-0.14187, -0.71211, 0.00913, 0.68753]])" ] }, "execution_count": 176, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.matmul(block_diag(np.eye(1), F[1]), F[0])" ] }, { "cell_type": "code", "execution_count": 123, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.87185, -0.00861, -0.45431, -0.18279],\n", " [ 0.08888, -0.69462, 0.12536, -0.70278],\n", " [ 0.45817, -0.112 , -0.88171, 0.01136],\n", " [ 0.14854, 0.71056, -0.02193, -0.68743]])" ] }, "execution_count": 123, "metadata": {}, "output_type": "execute_result" } ], "source": [ "QT" ] }, { "cell_type": "code", "execution_count": 124, "metadata": { "collapsed": true }, "outputs": [], "source": [ "R2 = np.matmul(block_diag(np.eye(3), F[3]), \n", " np.matmul(block_diag(np.eye(2), F[2]),\n", " np.matmul(block_diag(np.eye(1), F[1]), \n", " np.matmul(F[0], A))))" ] }, { "cell_type": "code", "execution_count": 125, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 125, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(A, np.matmul(np.transpose(QT), R2))" ] }, { "cell_type": "code", "execution_count": 126, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 126, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(R, R2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's a concise version of Householder (although I do create a new R, instead of overwriting A and computing it in place)." ] }, { "cell_type": "code", "execution_count": 179, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def householder(A):\n", " m, n = A.shape\n", " R = np.copy(A)\n", " Q = np.eye(m)\n", " V = []\n", " for k in range(n):\n", " v = np.copy(R[k:,k])\n", " v = np.reshape(v, (n-k, 1))\n", " v[0] += np.sign(v[0]) * np.linalg.norm(v)\n", " v /= np.linalg.norm(v)\n", " R[k:,k:] = R[k:,k:] - 2 * v @ v.T @ R[k:,k:]\n", " V.append(v)\n", " return R, V" ] }, { "cell_type": "code", "execution_count": 157, "metadata": { "collapsed": true }, "outputs": [], "source": [ "RH, VH = householder(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check that R is diagonal:" ] }, { "cell_type": "code", "execution_count": 129, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.62337, -0.84873, -0.88817, -0.97516],\n", " [-0. , -1.14818, -0.86417, -0.30109],\n", " [-0. , -0. , -0.64691, -0.45234],\n", " [-0. , 0. , 0. , -0.26191]])" ] }, "execution_count": 129, "metadata": {}, "output_type": "execute_result" } ], "source": [ "RH" ] }, { "cell_type": "code", "execution_count": 130, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[array([[ 0.96743],\n", " [ 0.00445],\n", " [ 0.2348 ],\n", " [ 0.09447]]), array([[ 0.9206 ],\n", " [-0.05637],\n", " [ 0.38641]]), array([[ 0.99997],\n", " [-0.00726]]), array([[ 1.]])]" ] }, "execution_count": 130, "metadata": {}, "output_type": "execute_result" } ], "source": [ "VH" ] }, { "cell_type": "code", "execution_count": 131, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 131, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(R, RH)" ] }, { "cell_type": "code", "execution_count": 132, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def implicit_Qx(V,x):\n", " n = len(x)\n", " for k in range(n-1,-1,-1):\n", " x[k:n] -= 2*np.matmul(v[-k], np.matmul(v[-k], x[k:n]))" ] }, { "cell_type": "code", "execution_count": 133, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0.54348, 0.63791, 0.40114, 0.57728],\n", " [ 0.00537, 0.80485, 0.68037, 0.0821 ],\n", " [ 0.2832 , 0.24164, 0.86556, 0.80986],\n", " [ 0.11395, 0.96205, 0.76232, 0.56475]])" ] }, "execution_count": 133, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Both classical and modified Gram-Schmidt require $2mn^2$ flops." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Gotchas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some things to be careful about:\n", "- when you've copied values vs. when you have two variables pointing to the same memory location\n", "- the difference between a vector of length n and a 1 x n matrix (np.matmul deals with them differently)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "## Analogy" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "| | $A = QR$ | $A = QHQ^*$ |\n", "|------------------------------|--------------|-------------|\n", "| orthogonal structuring | Householder | Householder |\n", "| structured orthogonalization | Gram-Schmidt | Arnoldi |\n", "\n", "**Gram-Schmidt and Arnoldi**: succession of triangular operations, can be stopped part way and first $n$ columns are correct\n", "\n", "**Householder**: succession of orthogoal operations. Leads to more nearly orthogonal A in presence of rounding errors.\n", "\n", "Note that to compute a Hessenberg reduction $A = QHQ^*$, Householder reflectors are applied to two sides of A, rather than just one." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Examples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following examples are taken from Lecture 9 of Trefethen and Bau, although translated from MATLAB into Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ex: Classical vs Modified Gram-Schmidt ###" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This example is experiment 2 from section 9 of Trefethen. We want to construct a square matrix A with random singular vectors and widely varying singular values spaced by factors of 2 between $2^{-1}$ and $2^{-(n+1)}$" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "from matplotlib import rcParams\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 183, "metadata": { "collapsed": true }, "outputs": [], "source": [ "n = 100\n", "U, X = np.linalg.qr(np.random.randn(n,n)) # set U to a random orthogonal matrix\n", "V, X = np.linalg.qr(np.random.randn(n,n)) # set V to a random orthogonal matrix\n", "S = np.diag(np.power(2,np.arange(-1,-(n+1),-1), dtype=float)) # Set S to a diagonal matrix w/ exp \n", " # values between 2^-1 and 2^-(n+1)" ] }, { "cell_type": "code", "execution_count": 184, "metadata": { "collapsed": true }, "outputs": [], "source": [ "A = np.matmul(U,np.matmul(S,V))" ] }, { "cell_type": "code", "execution_count": 188, "metadata": { "collapsed": true }, "outputs": [], "source": [ "QC, RC = cgs(A)\n", "QM, RM = mgs(A)" ] }, { "cell_type": "code", "execution_count": 189, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nTZvi6enJwYMH+eijj8jNzSUpKcmmTXBvvfUWDz74IO3bt2fYsGEEBATwySef6B8vWsPVsmVL7rnn\nHt555x2uXr1KVFQUO3fuZP369frav5K0aNGCxo0b849//IMzZ87QqFEj9u3bxwcffECLFi346aef\nbPa8QFdrV/iedO/enfr16xvt07NnTyZNmkRcXBwjRozA39+frVu3kp6ebvE0J88//zzr16+na9eu\nPPvss+Tn55OSkmJyMM5rr73Gt99+y/Dhw/nqq6/o3Lkzfn5+ZGdns2HDBurVq8e6desACAkJ4YEH\nHiA6Opp69erx119/sXDhQnx9fenbt2/5XhxHs3T4bEW6OWS6k+KSknRTE4Bum5Tk+BiEEA5j1+lO\nXJSl050UnbakuA8++EDdfvvtqmrVqioiIkK99dZb6ssvvzR53JUrV9Sbb76pWrdurXx9fZWfn59q\n1KiRevrpp9XmzZtLjXfFihVq4MCBKjIyUgUFBakqVaqoOnXqqIceekitWbPGYN+SpjspWlbI3HQl\n33zzjYqOjlbe3t6qTp066sUXX1RbtmxRgHrnnXcM9v3rr79U7969lb+/v/L391c9evRQBw4csHi6\nkz/++EP17t1b1axZU/n6+qp27dqpdevWqVdffVUB6ujRo/p9H3/8ceXt7V3qa2bO8ePHVdWqVRWg\nVq5caXa/DRs2qHbt2ik/Pz9VvXp19eijj6r9+/ebnNrEVJlSute2YcOGqmrVqqphw4YqOTlZrV27\n1mi6E6V008nMnj1b3XnnnapatWr6z8iAAQMMpsqZPHmyuvvuu1VwcLDy8vJSDRo0UE888YT65Zdf\nyvyaWMrW051oqowdO91ZdHS02rFjh2MvKjV2QlQq+/btIzIy0tlhCDeQmprKU089xRdffEGvXr2c\nHY5wMEu+KzRN26mUirbkfNIU6ygyoEIIISq1goICrl27hpeXl77s8uXLJCcn4+3tTefOnZ0Ynago\nJLFzgFmzIK/mJlLPPUP2lWxCfgwhfu9ignJjGdPJfZcFEkIIYbmzZ88SGRlJfHw8jRs3Jicnh08+\n+YQ9e/YwadKkck/aLARIYucQeTU3kTSyJfQLh/AssnaFk5TWknFjlkK3EdI8K4QQlUC1atW4//77\n+fzzzzl27BgATZs2ZdGiRTz77LNOjk5UFJLYOUDquWd0SV3aSoieDzuGQ784UtnFdFmhQgghKgVv\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10,10))\n", "plt.semilogy(np.diag(S), 'r.', basey=2, label=\"True Singular Values\")\n", "plt.semilogy(np.diag(RM), 'go', basey=2, label=\"Modified Gram-Shmidt\")\n", "plt.semilogy(np.diag(RC), 'bx', basey=2, label=\"Classic Gram-Shmidt\")\n", "plt.legend()\n", "rcParams.update({'font.size': 18})" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(numpy.float64, numpy.float64, numpy.float64)" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(A[0,0]), type(RC[0,0]), type(S[0,0])" ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.2204460492503131e-16" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eps = np.finfo(np.float64).eps; eps" ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-52.0, -26.0)" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.log2(eps), np.log2(np.sqrt(eps))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "heading_collapsed": true }, "source": [ "### Ex 9.3: Numerical loss of orthogonality" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "This example is experiment 3 from section 9 of Trefethen." ] }, { "cell_type": "code", "execution_count": 95, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "A = np.array([[0.70000, 0.70711], [0.70001, 0.70711]])" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Gram-Schmidt:" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "Q1, R1 = mgs(A)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Householder:" ] }, { "cell_type": "code", "execution_count": 105, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "R2, V, F = householder_lots(A)\n", "Q2T = np.matmul(block_diag(np.eye(1), F[1]), F[0])" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Numpy's Householder:" ] }, { "cell_type": "code", "execution_count": 106, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "Q3, R3 = np.linalg.qr(A)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Check that all the QR factorizations work:" ] }, { "cell_type": "code", "execution_count": 107, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0.7 , 0.7071],\n", " [ 0.7 , 0.7071]])" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.matmul(Q1, R1)" ] }, { "cell_type": "code", "execution_count": 108, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0.7 , 0.7071],\n", " [ 0.7 , 0.7071]])" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.matmul(Q2T.T, R2)" ] }, { "cell_type": "code", "execution_count": 109, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0.7 , 0.7071],\n", " [ 0.7 , 0.7071]])" ] }, "execution_count": 109, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.matmul(Q3, R3)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Check how close Q is to being perfectly orthonormal:" ] }, { "cell_type": "code", "execution_count": 110, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "3.2547268868202263e-11" ] }, "execution_count": 110, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.norm(np.matmul(Q1.T, Q1) - np.eye(2)) # Modified Gram-Schmidt" ] }, { "cell_type": "code", "execution_count": 111, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "1.1110522984689321e-16" ] }, "execution_count": 111, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.norm(np.matmul(Q2T.T, Q2T) - np.eye(2)) # Our implementation of Householder" ] }, { "cell_type": "code", "execution_count": 112, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "2.5020189909116529e-16" ] }, "execution_count": 112, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.norm(np.matmul(Q3.T, Q3) - np.eye(2)) # Numpy (which uses Householder)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "GS (Q1) is less stable than Householder (Q2T, Q3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# End" ] } ], "metadata": { "anaconda-cloud": {}, "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.6.1" } }, "nbformat": 4, "nbformat_minor": 1 } ================================================ FILE: nbs/Homework 1.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Homework 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is due on Thurs, 6/1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Consider the polynomial $p(x) = (x-2)^9 = x^9 - 18x^8 + 144x^7 - 672x^6 + 2016x^5 - 4032x^4 + 5376x^3 - 4608x^2 + 2304x - 512$\n", "\n", " a. Plot $p(x)$ for $x=1.920,\\,1.921,\\,1.922,\\ldots,2.080$ evaluating $p$ via its coefficients $1,\\,,-18,\\,144,\\ldots$\n", "\n", " b. Plot the same plot again, now evaluating $p$ via the expression $(x-2)^9$.\n", "\n", " c. Explain the difference.\n", " \n", " *(The numpy method linspace will be useful for this)*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2\\. How many different double-precision numbers are there? Express your answer using powers of 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3\\. Using the updated [Numbers Every Programmer Should Know](https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.html), how much longer does a main memory reference take than an L1 cache look-up? How much longer does a disk seek take than a main memory reference?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "4\\. From the Halide Video, what are 4 ways to traverse a 2d array?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "5\\. Using the animations below ([source](https://www.youtube.com/watch?v=3uiEyEKji0M)), explain what the benefits and pitfalls of each approach. Green squares indicate that a value is being read; red indicates a value is being written. Your answers should be longer in length (give more detail) than just two words.\n", "\n", " a. \"Halide\"\n", " \n", " b. \"Halide\"\n", " \n", " c. \"Halide\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "6\\. Prove that if $A = Q B Q^T$ for some orthnogonal matrix $Q$, the $A$ and $B$ have the same singular values." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "7\\. What is the *stochastic* part of *stochastic gradient descent*?" ] } ], "metadata": { "kernelspec": { "display_name": "Python [conda root]", "language": "python", "name": "conda-root-py" }, "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: nbs/Homework 2.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Homework 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This homework covers the material in Lessons 3 & 4. It is due **Thurday, June 15**. Please submit your **answers as a PDF**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1\\. Modify the LU method (without pivoting) to work **in-place**. That is, it should not allocate any new memory for L or U, but instead overwrite A." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def LU(A):\n", " U = np.copy(A)\n", " m, n = A.shape\n", " L = np.eye(n)\n", " for k in range(n-1):\n", " for j in range(k+1,n):\n", " L[j,k] = U[j,k]/U[k,k]\n", " U[j,k:n] -= L[j,k] * U[k,k:n]\n", " return L, U" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2\\. Modify our LU method from class to add pivoting, as described in the lesson. *Hint: the swap method below will be useful* " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def swap(a,b):\n", " temp = np.copy(a)\n", " a[:] = b\n", " b[:] = temp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3\\. For each of the following sets of dimensions, either\n", " - give the dimensions of the output of an operation on A and B, **or** \n", " - answer *incompatible* if the dimensions are incompatible according to the [numpy rules of broadcasting](https://docs.scipy.org/doc/numpy-1.10.0/user/basics.broadcasting.html)." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ " a. A (2d array): 3 x 3\n", " B (1d array): 1\n", "\n", " b. A (2d array): 2 x 1\n", " B (3d array): 6 x 4 x 2\n", "\n", " c. A (2d array): 5 x 4\n", " B (1d array): 4\n", "\n", " d. A (3d array): 32 x 64 x 8\n", " B (3d array): 32 x 1 x 8\n", "\n", " e. A (3d array): 64 x 1\n", " B (3d array): 32 x 1 x 16\n", "\n", " f. A (3d array): 32 x 64 x 2\n", " B (3d array): 32 x 1 x 8" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "4\\. Write how this matrix would be stored in compressed row format:\n", "\n", "\\begin{pmatrix}\n", " 1 & & & & -2 & -3 \\\\\n", " & 3 & & & & -9 \\\\\n", " & & & -7 & 4 & \\\\ \n", " -1 & 2 & & 7 & & \\\\\n", " -3 & & & 26 & &\n", " \\end{pmatrix}" ] } ], "metadata": { "kernelspec": { "display_name": "Python [conda root]", "language": "python", "name": "conda-root-py" }, "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: nbs/Homework 3.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Homework 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1\\. Add shifts to the QR algorithm\n", "\n", "Instead of factoring $A_k$ as $Q_k R_k$ (the way the pure QR algorithm without shifts does), the shifted QR algorithms:\n", "\n", "i. Get the QR factorization $$A_k - s_k I = Q_k R_k$$\n", "ii. Set $$A_{k+1} = R_k Q_k + s_k I$$\n", "\n", "Choose $s_k = A_k(m,m)$, an approximation of an eigenvalue of A. \n", "\n", "The idea of adding shifts to speed up convergence shows up in many algorithms in numerical linear algebra (including the power method, inverse iteration, and Rayleigh quotient iteration). " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def practical_qr(A, iters=10):\n", " # Fill method in\n", " return Ak, Q" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python [conda root]", "language": "python", "name": "conda-root-py" }, "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: nbs/Project_ideas.txt ================================================ Suggestions for Writing Topics: - Algorithms to research and implement: -- Cholesky Factorization -- Gauss-Legendre Quadrature -- Conjugate Gradient -- Rayleigh Quotient Iteration -- Power Method with shifts and deflation -- QR algorithm with Wilkinson shifts -- Golub-Kahan bidiagonalization with Householder reflectors -- Divide-and-conquer eigenvalue algorithm (Cuppen) -- GMRES (generalized minimal residuals) -- Sparse NMF -- Monte Carlo Methods -- Feel free to ask me about additional ideas - Speed up an algorithm of your choice using one or more of...: -- The GPU with PyTorch -- Numba or Cython -- Parallelization -- Randomized projections - Find an interesting paper (related to linear algebra). Summarize it and implement it. Some interesting ideas in: -- https://arxiv.org/abs/1608.04481 - Look at the Matrix Factorization Jungle for ideas: https://sites.google.com/site/igorcarron2/matrixfactorizations ================================================ FILE: nbs/convolution-intro.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Intro to Convolutions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set up" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import math,sys,os,numpy as np\n", "from numpy.linalg import norm\n", "from PIL import Image\n", "from matplotlib import pyplot as plt, rcParams, rc\n", "from scipy.ndimage import imread\n", "from skimage.measure import block_reduce\n", "import pickle as pickle\n", "from scipy.ndimage.filters import correlate, convolve\n", "rc('animation', html='html5')\n", "rcParams['figure.figsize'] = 3, 6\n", "%precision 4\n", "np.set_printoptions(precision=4, linewidth=100)" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def plots(ims, interp=False, titles=None):\n", " ims=np.array(ims)\n", " mn,mx=ims.min(),ims.max()\n", " f = plt.figure(figsize=(12,24))\n", " for i in range(len(ims)):\n", " sp=f.add_subplot(1, len(ims), i+1)\n", " if not titles is None: sp.set_title(titles[i], fontsize=18)\n", " plt.imshow(ims[i], interpolation=None if interp else 'none', vmin=mn,vmax=mx)\n", "\n", "def plot(im, interp=False):\n", " f = plt.figure(figsize=(3,6), frameon=True)\n", " # plt.show(im)\n", " plt.imshow(im, interpolation=None if interp else 'none')\n", "\n", "plt.gray()\n", "plt.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## MNIST Data" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.datasets import fetch_mldata\n", "mnist = fetch_mldata('MNIST original')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys(['DESCR', 'COL_NAMES', 'target', 'data'])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mnist.keys()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((70000, 784), (70000,))" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mnist['data'].shape, mnist['target'].shape" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((70000, 28, 28), (70000,))" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "images = np.reshape(mnist['data'], (70000, 28, 28))\n", "labels = mnist['target'].astype(int)\n", "n=len(images)\n", "images.shape, labels.shape" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": true }, "outputs": [], "source": [ "images = images/255" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [ { "data": { "image/png": "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\ngiVI6GTUAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(images[0])" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "labels[0]" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plots(images[:5], titles=labels[:5])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we can zoom in on part of the image" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(images[0,0:14, 8:22])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Edge Detection" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will look at how to create an Edge detector:" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "top=[[-1,-1,-1],\n", " [ 1, 1, 1],\n", " [ 0, 0, 0]]\n", "\n", "plot(top)" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0. , 0. , 0. , 0. , 0. , 0. , 0.1882, 0.9333, 0.9882, 0.9882],\n", " [ 0. , 0. , 0. , 0. , 0. , 0.149 , 0.6471, 0.9922, 0.9137, 0.8157],\n", " [ 0. , 0. , 0. , 0. , 0.0275, 0.698 , 0.9882, 0.9412, 0.2784, 0.0745],\n", " [ 0. , 0. , 0. , 0. , 0.2235, 0.9882, 0.9882, 0.2471, 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0.7765, 0.9922, 0.7451, 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0.298 , 0.9647, 0.9882, 0.4392, 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0.3333, 0.9882, 0.902 , 0.098 , 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0.3333, 0.9882, 0.8745, 0. , 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0.3333, 0.9882, 0.5686, 0. , 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0.3373, 0.9922, 0.8824, 0. , 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0.3333, 0.9882, 0.9765, 0.5725, 0.1882, 0.1137, 0.3333],\n", " [ 0. , 0. , 0. , 0.3333, 0.9882, 0.9882, 0.9882, 0.898 , 0.8431, 0.9882],\n", " [ 0. , 0. , 0. , 0.1098, 0.7804, 0.9882, 0.9882, 0.9922, 0.9882, 0.9882],\n", " [ 0. , 0. , 0. , 0. , 0.098 , 0.502 , 0.9882, 0.9922, 0.9882, 0.5529],\n", " [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ]])" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dims = np.index_exp[10:28:1,3:13]\n", "images[0][dims]" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": true }, "outputs": [], "source": [ "corrtop = correlate(images[0], top)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0. , 0. , 0. , 0. , 0. , 0.1882, 0.9216, 0.9765, 0.7843, -0.2392],\n", " [ 0. , 0. , 0. , 0. , 0.149 , 0.6078, 0.6667, 0.4431, -0.1882, -0.6196],\n", " [ 0. , 0. , 0. , 0.0275, 0.5765, 0.9176, 0.8392, -0.3451, -1.4275, -1.5961],\n", " [ 0. , 0. , 0. , 0.1961, 0.4863, 0.4863, -0.4039, -0.9725, -1.0471, -0.4627],\n", " [ 0. , 0. , 0. , 0.5529, 0.5569, 0.3137, -0.4863, -0.4902, -0.2471, 0. ],\n", " [ 0. , 0. , 0.298 , 0.4863, 0.4824, -0.1216, -0.3098, -0.3059, 0. , 0. ],\n", " [ 0. , 0. , 0.0353, 0.0588, -0.0275, -0.4039, -0.4275, -0.3412, 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , -0.0275, -0.1255, -0.1255, -0.098 , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , -0.3059, -0.3059, -0.3059, 0. , 0. , 0. ],\n", " [ 0. , 0. , 0.0039, 0.0078, 0.3216, 0.3176, 0.3137, 0. , 0. , 0. ],\n", " [ 0. , 0. , -0.0039, -0.0078, 0.0863, 0.6627, 0.8549, 0.8745, 0.6353, 1.1451],\n", " [ 0. , 0. , 0. , 0. , 0.0118, 0.4275, 1.1373, 1.8549, 2.0941, 1.6745],\n", " [ 0. , 0. , -0.2235, -0.4314, -0.4314, -0.2078, 0.0941, 0.2392, 0.2392, 0.0706],\n", " [ 0. , 0. , -0.1098, -0.7922, -1.2784, -1.1686, -0.4863, 0. , -0.4353, -1.2039],\n", " [ 0. , 0. , 0. , -0.098 , -0.6 , -1.5882, -2.4824, -2.9686, -2.5333, -1.6863],\n", " [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ]])" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "corrtop[dims]" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nx3Kie1BWW248uTtMc3uMnj17Nlk/ePBgsj516tRkPdddnD17drJeL+rrbxVoAIQGCCI0QBChAYII\nDRDUEt2zqNwcqqjcHaPVlttzM7d3Z2dnZ7J+5MiRZH3z5s3Jem9vb7Ke+3O49dZbk/V66zperr5H\nB9QhQgMEERogiNAAQYQGCGqJ7ll0lfsFCxZU5Liff/55Rd4nJzdHa/Hixcn6jBnpRYP27duXrL/x\nxhvJ+vHjx5P1m2++OVnv6elJ1hsVVxogiNAAQYQGCCI0QNB4dg3oNrM3zewjM9ttZj8v6h1mtsXM\neotHlqZFSxhP9+y8pF+6+w4zmy7pPTPbIuknkra5+1ozWyNpjaQnqzfU0kVXuT916lSy3tXVlazn\n1uOaN29e6P3nzJmTrC9ZsiRZz80xy80B27p1a7K+c+fOZL2trS1Zz81hy93p2WzGs2vAYXffUTw/\nIWmPpHmSVknaWLxso6T7qzVIoJ6EfqYxs29JWi7pP5I63f1w8VtHJKWnygJNZtyhMbNpkv4q6Rfu\nfsnceR/5/JP8DMSuAWg24wqNmU3RSGD+7O5/K8pDowuhF4/JbcLYNQDNZjzdM9PI2s173P03Y35r\nk6TVxfPVkl6v/PCA+jOe7tl3Jf1Y0odmNtpmeUrSWkmvmtkjkvokPVidIdZebi/O3MfL3J2PixYt\nStZz64AdPXo0Wd+9e3eonlt/LNdVy83Ny81Vy3XtWsV4dg34t6TcjMd7KjscoP4xIwAIIjRAEKEB\ngggNENQSd27m5nqdPn26Iu+Tu0Nz167Y/r1nzpxJ1gcGBpL1/fv3J+u5LtysWbOS9VyXLzcXrtVx\npQGCCA0QRGiAIEIDBBEaIKglumft7e3Jen9/f7I+PJycsJ3dIzK3rlduL8tcdyvXDct1z3Lrnt15\n553Jeu7OU8RwpQGCCA0QRGiAIEIDBBEaIKglume5rlf0zsr3338/WX/zzTeT9aGhoWQ9Nwds6dKl\nyfodd9yRrOfWVbvqqquSdVQGVxogiNAAQYQGCCI0QFA5uwY8Y2aDZraz+PWj6g8XmHjl7BogSc+5\n+7rqDa+6Jk9On353d3eoft9991VsTKh/41n37LCkw8XzE2Y2umsA0JLK2TVAkh43sw/MbAObOqFV\nlLNrwAuSFkpappEr0bOZ72PXADSVkncNcPchd7/g7hclvShpZep72TUAzabkXQNGt9koPCAptl4R\n0KDK2TXgYTNbppHNnA5JeqwqIwTqTDm7Bmyu/HCA+seMACCI0ABBhAYIIjRAEKEBgggNEERogCBC\nAwQRGiCI0ABB5u61O5jZUUl9xZczJX1as4NPPM63vi1w9/SCdJepaWguObDZu+6+YkIOPgE43+bB\nxzMgiNAAQRMZmvUTeOyJwPk2iQn7mQZoVHw8A4JqHhozu9fM9pnZATNbU+vjV1uxnNWwme0aU+sw\nsy1m1ls8Ns1yV9+wAmvTnnNNQ2NmbZKel/RDSUs1ss5AelOWxvWSpHsvq62RtM3dF0vaVnzdLEZX\nYF0q6TuSflr8nTbtOdf6SrNS0gF3/9jdz0l6RdKqGo+hqtz9bUnHLiuvkrSxeL5R0v01HVQVufth\nd99RPD8haXQF1qY951qHZp6k/jFfD6g1lrjtLJb3laQjkjoncjDVctkKrE17zjQCasxH2pVN17JM\nrMD6P812zrUOzaCksUvvdxW1Zjc0urhi8Tg8weOpqNQKrGric651aLZLWmxmPWbWLukhSZtqPIaJ\nsEnS6uL5akmvT+BYKiq3Aqua+Zxr/Y+bxeZPv5XUJmmDu/+6pgOoMjN7WdLdGpnlOyTpaUl/l/Sq\npPkameX9oLtf3ixoSGZ2l6R/SfpQ0sWi/JRGfq5pznNmRgAQQyMACCI0QBChAYIIDRBEaIAgQgME\nERogiNAAQf8FqjqkxkDdheQAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(corrtop)" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-1, 1, 0],\n", " [-1, 1, 0],\n", " [-1, 1, 0]])" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.rot90(top, 1)" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nx3Kie1BWW248uTtMc3uMnj17Nlk/ePBgsj516tRkPdddnD17drJeL+rrbxVoAIQGCCI0QBChAYII\nDRDUEt2zqNwcqqjcHaPVlttzM7d3Z2dnZ7J+5MiRZH3z5s3Jem9vb7Ke+3O49dZbk/V66zperr5H\nB9QhQgMEERogiNAAQYQGCGqJ7ll0lfsFCxZU5Liff/55Rd4nJzdHa/Hixcn6jBnpRYP27duXrL/x\nxhvJ+vHjx5P1m2++OVnv6elJ1hsVVxogiNAAQYQGCCI0QNB4dg3oNrM3zewjM9ttZj8v6h1mtsXM\neotHlqZFSxhP9+y8pF+6+w4zmy7pPTPbIuknkra5+1ozWyNpjaQnqzfU0kVXuT916lSy3tXVlazn\n1uOaN29e6P3nzJmTrC9ZsiRZz80xy80B27p1a7K+c+fOZL2trS1Zz81hy93p2WzGs2vAYXffUTw/\nIWmPpHmSVknaWLxso6T7qzVIoJ6EfqYxs29JWi7pP5I63f1w8VtHJKWnygJNZtyhMbNpkv4q6Rfu\nfsnceR/5/JP8DMSuAWg24wqNmU3RSGD+7O5/K8pDowuhF4/JbcLYNQDNZjzdM9PI2s173P03Y35r\nk6TVxfPVkl6v/PCA+jOe7tl3Jf1Y0odmNtpmeUrSWkmvmtkjkvokPVidIdZebi/O3MfL3J2PixYt\nStZz64AdPXo0Wd+9e3eonlt/LNdVy83Ny81Vy3XtWsV4dg34t6TcjMd7KjscoP4xIwAIIjRAEKEB\ngggNENQSd27m5nqdPn26Iu+Tu0Nz167Y/r1nzpxJ1gcGBpL1/fv3J+u5LtysWbOS9VyXLzcXrtVx\npQGCCA0QRGiAIEIDBBEaIKglumft7e3Jen9/f7I+PJycsJ3dIzK3rlduL8tcdyvXDct1z3Lrnt15\n553Jeu7OU8RwpQGCCA0QRGiAIEIDBBEaIKglume5rlf0zsr3338/WX/zzTeT9aGhoWQ9Nwds6dKl\nyfodd9yRrOfWVbvqqquSdVQGVxogiNAAQYQGCCI0QFA5uwY8Y2aDZraz+PWj6g8XmHjl7BogSc+5\n+7rqDa+6Jk9On353d3eoft9991VsTKh/41n37LCkw8XzE2Y2umsA0JLK2TVAkh43sw/MbAObOqFV\nlLNrwAuSFkpappEr0bOZ72PXADSVkncNcPchd7/g7hclvShpZep72TUAzabkXQNGt9koPCAptl4R\n0KDK2TXgYTNbppHNnA5JeqwqIwTqTDm7Bmyu/HCA+seMACCI0ABBhAYIIjRAEKEBgggNEERogCBC\nAwQRGiCI0ABB5u61O5jZUUl9xZczJX1as4NPPM63vi1w9/SCdJepaWguObDZu+6+YkIOPgE43+bB\nxzMgiNAAQRMZmvUTeOyJwPk2iQn7mQZoVHw8A4JqHhozu9fM9pnZATNbU+vjV1uxnNWwme0aU+sw\nsy1m1ls8Ns1yV9+wAmvTnnNNQ2NmbZKel/RDSUs1ss5AelOWxvWSpHsvq62RtM3dF0vaVnzdLEZX\nYF0q6TuSflr8nTbtOdf6SrNS0gF3/9jdz0l6RdKqGo+hqtz9bUnHLiuvkrSxeL5R0v01HVQVufth\nd99RPD8haXQF1qY951qHZp6k/jFfD6g1lrjtLJb3laQjkjoncjDVctkKrE17zjQCasxH2pVN17JM\nrMD6P812zrUOzaCksUvvdxW1Zjc0urhi8Tg8weOpqNQKrGric651aLZLWmxmPWbWLukhSZtqPIaJ\nsEnS6uL5akmvT+BYKiq3Aqua+Zxr/Y+bxeZPv5XUJmmDu/+6pgOoMjN7WdLdGpnlOyTpaUl/l/Sq\npPkameX9oLtf3ixoSGZ2l6R/SfpQ0sWi/JRGfq5pznNmRgAQQyMACCI0QBChAYIIDRBEaIAgQgME\nERogiNAAQf8FqjqkxkDdheQAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "convtop = convolve(images[0], np.rot90(top,2))\n", "plot(convtop)\n", "np.allclose(convtop, corrtop)" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAs4AAAC0CAYAAACEyqqiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEAZJREFUeJzt3V2oXed9JvDnP7ZyoTZ1pkhtLNua5EIUSuhHItzQwuCZ\nNiUxAfciDM5FY0JBaUhKC81FaCHGFwO9KjRNicdQYxlK0kLS1mHEhEwp4xQmHX/gupFDWjVpsGRT\np/mwY5QSNP33QtvlcHIkL521dPZ+z/n9YKO91nq13nfrPOfwaJ+996ruDgAAcHX/Yd0LAACAESjO\nAAAwgeIMAAATKM4AADCB4gwAABMozgAAMMGNc/5yVf1wkj9O8oYk/5jkv3X3t3YY949JvpPk/ye5\n1N0n58wLc8kuo5JdRiS37Bdzn3H+cJK/6O4TSf5itX0l/6W7f8o3ARtCdhmV7DIiuWVfmFuc70py\nenX/dJJfmnk+2Cuyy6hklxHJLftCzblyYFV9u7tft7pfSb71yva2cV9N8mIu/+rlf3T3A1c556kk\np1abb9n14mClu2v7vqWzu99y+5a3jP0QnnvuuXUvYbbnn3/+n7v76Pb91zO7hw4desuRI0cWfBQc\nNN/+9rdz8eLF6/4zdzV2X2X32LFj617CLE888cS6lzDbTn1hu1ctzlX1v5O8fodDv53k9NbgV9W3\nuvs/7nCOW7r7QlX9SJLPJfm17n70VRdX5XrgLOHstu3rmt39kNs5/6HeBPfdd9+6lzDL6dOn89Wv\nfvVfkvzDtkPXNbvHjh3r973vfQs8Ag6i06dP59lnn82lS5f29Gdusj+ye++99657CbNc/v/Q2KYU\n51d9qUZ3/0J3v2mH258n+aequjlJVn++cIVzXFj9+UKSP01y+7U8EJhDdhnNPffckyRnZZeR3HPP\nPTl69Kifuexrc1/j/EiSe1b370ny59sHVNUPVNVrX7mf5BeTfHHmvDCX7DIq2WVEcsu+MLc4/06S\nt1XV3yf5hdV2qupYVZ1ZjfnRJH9VVX+T5P8l+Z/d/b9mzgtzyS6jkl1GJLfsC7M+x7m7v5Hk53fY\n/1ySO1f3v5LkJ+fMA0uTXUYlu4xIbtkvXDkQAAAmUJwBAGACxRkAACZQnAEAYALFGQAAJlCcAQBg\nAsUZAAAmUJwBAGACxRkAACZQnAEAYALFGQAAJlCcAQBgAsUZAAAmUJwBAGACxRkAACZYpDhX1dur\n6stVda6qPrzD8aqqj66OP11Vb15iXphLdhmV7DIiuWV0s4tzVd2Q5A+SvCPJjyd5d1X9+LZh70hy\nYnU7leTjc+eFuWSXUckuI5Jb9oMlnnG+Pcm57v5Kd38vySeT3LVtzF1JHu7LvpDkdVV18wJzwxyy\ny6hklxHJLcNbojjfkuTZLdvnV/uudUySpKpOVdXjVfX4AmuDq1ksu3LLHrsu2b148eLiC4Utrltf\nkF32ysa9ObC7H+juk919ct1rgankllFtze7hw4fXvRyYTHZZhyWK84Ukt23ZvnW171rHwF6TXUYl\nu4xIbhneEsX5sSQnquqNVfWaJHcneWTbmEeSvGf1btm3Jnmxu59fYG6YQ3YZlewyIrlleDfOPUF3\nX6qqDyb5bJIbkjzY3Wer6ldXx+9PcibJnUnOJbmY5L1z54W5ZJdRyS4jklv2g9nFOUm6+0wuh33r\nvvu33O8kH1hiLliS7DIq2WVEcsvoNu7NgQAAsIkUZwAAmEBxBgCACRRnAACYQHEGAIAJFGcAAJhA\ncQYAgAkUZwAAmEBxBgCACRRnAACYQHEGAIAJFGcAAJhAcQYAgAkUZwAAmEBxBgCACRRnAACYYJHi\nXFVvr6ovV9W5qvrwDsfvqKoXq+qp1e0jS8wLc8kuo5JdRiS3jO7GuSeoqhuS/EGStyU5n+Sxqnqk\nu5/ZNvTz3f3OufPBUmSXUckuI5Jb9oMlnnG+Pcm57v5Kd38vySeT3LXAeeF6k11GJbuMSG4Z3uxn\nnJPckuTZLdvnk/zMDuN+tqqeTnIhyYe6++xOJ6uqU0lOJcnx48fzta99bYElclCdPHnyaocXy+7W\n3MIeuC7ZPX78eO69997rsFwOis985jNXO3zd+sJNN920q/XCtdqrNwc+meR4d/9Ekt9P8mdXGtjd\nD3T3ye4+efTo0T1aHlzRpOxuze2erg6u7Jqz62cuG2BXfeHw4cN7tkAOtiWK84Ukt23ZvnW17991\n90vd/fLq/pkkh6rqyAJzwxyyy6hklxHJLcNbojg/luREVb2xql6T5O4kj2wdUFWvr6pa3b99Ne83\nFpgb5pBdRiW7jEhuGd7s1zh396Wq+mCSzya5IcmD3X22qn51dfz+JO9K8v6qupTku0nu7u6eOzfM\nIbuMSnYZkdyyHyzx5sBXfp1yZtu++7fc/1iSjy0xFyxJdhmV7DIiuWV0rhwIAAATKM4AADCB4gwA\nABMozgAAMIHiDAAAEyjOAAAwgeIMAAATKM4AADCB4gwAABMozgAAMIHiDAAAEyjOAAAwgeIMAAAT\nKM4AADCB4gwAABMsUpyr6sGqeqGqvniF41VVH62qc1X1dFW9eYl5YQ65ZVSyy6hkl9Et9YzzQ0ne\nfpXj70hyYnU7leTjC80LczwUuWVMD0V2GdNDkV0Gtkhx7u5Hk3zzKkPuSvJwX/aFJK+rqpuXmBt2\nS24ZlewyKtlldHv1Gudbkjy7Zfv8at/3qapTVfV4VT3+9a9/fU8WB1ewq9zuycrg6vzMZVS7yu7F\nixf3ZHGwcW8O7O4Huvtkd588evToupcDk2zN7brXAtfCz1xGtTW7hw8fXvdyOCD2qjhfSHLblu1b\nV/tgk8kto5JdRiW7bLS9Ks6PJHnP6t2yb03yYnc/v0dzw27JLaOSXUYlu2y0G5c4SVV9IskdSY5U\n1fkk9yY5lCTdfX+SM0nuTHIuycUk711iXphDbhmV7DIq2WV0ixTn7n73qxzvJB9YYi5YitwyKtll\nVLLL6DbuzYEAALCJFGcAAJhAcQYAgAkUZwAAmEBxBgCACRRnAACYQHEGAIAJFGcAAJhAcQYAgAkU\nZwAAmEBxBgCACRRnAACYQHEGAIAJFGcAAJhAcQYAgAkWKc5V9WBVvVBVX7zC8Tuq6sWqemp1+8gS\n88IccsuoZJdRyS6ju3Gh8zyU5GNJHr7KmM939zsXmg+W8FDkljE9FNllTA9FdhnYIs84d/ejSb65\nxLlgr8gto5JdRiW7jG6pZ5yn+NmqejrJhSQf6u6zOw2qqlNJTiXJTTfdlPvuu28Pl8h+89xzz809\nxTXnFjbErrJbVXu0PLiiXfUF2At7VZyfTHK8u1+uqjuT/FmSEzsN7O4HkjyQJMeOHes9Wh/sZFe5\nrSq5Zd1kl1HpC2y0PflUje5+qbtfXt0/k+RQVR3Zi7lht+SWUckuo5JdNt2eFOeqen2tfv9XVbev\n5v3GXswNuyW3jEp2GZXssukWealGVX0iyR1JjlTV+ST3JjmUJN19f5J3JXl/VV1K8t0kd3e3X6uw\nVnLLqGSXUckuo1ukOHf3u1/l+Mdy+eNnYGPILaOSXUYlu4zOlQMBAGACxRkAACZQnAEAYALFGQAA\nJlCcAQBgAsUZAAAmUJwBAGACxRkAACZQnAEAYALFGQAAJlCcAQBgAsUZAAAmUJwBAGACxRkAACZQ\nnAEAYALFGQAAJphdnKvqtqr6y6p6pqrOVtWv7zCmquqjVXWuqp6uqjfPnRfmkl1GJbuMSG7ZD25c\n4ByXkvxmdz9ZVa9N8kRVfa67n9ky5h1JTqxuP5Pk46s/YZ1kl1HJLiOSW4Y3+xnn7n6+u59c3f9O\nki8luWXbsLuSPNyXfSHJ66rq5rlzwxyyy6hklxHJLfvBoq9xrqo3JPnpJH+97dAtSZ7dsn0+3//N\n8so5TlXV41X1+MWLF5dcHlzR3Oxuze31WiPsRHYZkb7AqBYrzlX1g0k+leQ3uvul3Z6nux/o7pPd\nffLw4cNLLQ+uaInsbs3tsquDK5NdRqQvMLJFinNVHcrlb4I/6u5P7zDkQpLbtmzfutoHayW7jEp2\nGZHcMrolPlWjkvxhki919+9eYdgjSd6zerfsW5O82N3Pz50b5pBdRiW7jEhu2Q+W+FSNn0vyy0n+\ntqqeWu37rSTHk6S7709yJsmdSc4luZjkvQvMC3PJLqOSXUYktwxvdnHu7r9KUq8yppN8YO5csCTZ\nZVSyy4jklv3AlQMBAGACxRkAACZQnAEAYALFGQAAJlCcAQBgAsUZAAAmUJwBAGACxRkAACZQnAEA\nYALFGQAAJlCcAQBgAsUZAAAmUJwBAGACxRkAACZQnAEAYILZxbmqbquqv6yqZ6rqbFX9+g5j7qiq\nF6vqqdXtI3Pnhblkl1HJLiOSW/aDGxc4x6Ukv9ndT1bVa5M8UVWf6+5nto37fHe/c4H5YCmyy6hk\nlxHJLcOb/Yxzdz/f3U+u7n8nyZeS3DL3vHC9yS6jkl1GJLfsB9Xdy52s6g1JHk3ypu5+acv+O5J8\nOsn5JBeSfKi7z17hHKeSnFpt/liSLy+2wO93JMk/X8fzX2+jrz+5/o/hP3X30VcbNDe7e5zbZPyv\n/ejrT2R3N3zd129f5HY1VnanG339yaZkd6niXFU/mOT/JPnv3f3pbcd+KMm/dvfLVXVnkt/r7hOL\nTDxDVT3e3SfXvY7dGn39yWY8Btnde6OvP9mMxzBadjfh32yu0R/DJqx/tNyu1rX2f7c5Rl9/sjmP\nYZFP1aiqQ0k+leSPtn8TJEl3v9TdL6/un0lyqKqOLDE3zCG7jEp2GZHcMrolPlWjkvxhki919+9e\nYczrV+NSVbev5v3G3LlhDtllVLLLiOSW/WCJT9X4uSS/nORvq+qp1b7fSnI8Sbr7/iTvSvL+qrqU\n5LtJ7u4lX1y9ew+sewEzjb7+ZL2PQXbXZ/T1J7K7G77u6ye3u+Prvn4b8RgWfXMgAADsV64cCAAA\nEyjOAAAwwYEszlX19qr6clWdq6oPr3s916qqHqyqF6rqi+tey25MuewqO5Pd9ZLd3ZPd9ZLd3ZHb\n9drE3B641zhX1Q1J/i7J23L5A9YfS/LuHS75ubGq6j8neTnJw939pnWv51pV1c1Jbt562dUkvzTS\n12AdZHf9ZHd3ZHf9ZPfaye36bWJuD+IzzrcnOdfdX+nu7yX5ZJK71ryma9Ldjyb55rrXsVsuu7pr\nsrtmsrtrsrtmsrsrcrtmm5jbg1icb0ny7Jbt8/HDY23q8mVXfzrJX693JUOQ3Q0iu9dEdjeI7E4m\ntxtkU3J7EIszG2J12dVPJfmN7n5p3euBqWSXUckuI9qk3B7E4nwhyW1btm9d7WMPvdplV9mR7G4A\n2d0V2d0AsnvN5HYDbFpuD2JxfizJiap6Y1W9JsndSR5Z85oOlCmXXWVHsrtmsrtrsrtmsrsrcrtm\nm5jbA1ecu/tSkg8m+Wwuv8j8T7r77HpXdW2q6hNJ/m+SH6uq81X1K+te0zV65bKr/7Wqnlrd7lz3\nojad7G4E2d0F2d0IsnuN5HYjbFxuD9zH0QEAwG4cuGecAQBgNxRnAACYQHEGAIAJFGcAAJhAcQYA\ngAkUZwAAmEBxBgCACf4NIdf5/MfjwlcAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "straights=[np.rot90(top,i) for i in range(4)]\n", "plots(straights)" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAs4AAAC0CAYAAACEyqqiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEJhJREFUeJzt3VGoZed5HuD3qyT7wuNihCa2KmlkXwwxsUkTa1BMUora\nysUWBuXCFPkiDqZwFGNDYuILE4NzJdyrmLoOlgciFEGwW7CbCDrU2CFUDtSpRkJVPHLdDo4szURE\nIzmVfGyDmfbrxWyXw+iMtOasNWfv/8zzwGH22uvX+v895z1L7+yz917V3QEAAF7dP1j3AgAAYASK\nMwAATKA4AwDABIozAABMoDgDAMAEijMAAExw7Zz/uKquT/Lvk7w1ydNJ/lV3//0u455O8sMk/yfJ\n+e4+NmdemEt2GZXsMiK55aCY+4zzJ5P8eXcfTfLnq+1L+Wfd/Ut+CNgQssuoZJcRyS0HwtzifHeS\nP17d/uMkvz7zeLBfZJdRyS4jklsOhJpz5cCq+t/d/abV7Ury9z/bvmjc3yR5KRd+9fLF7j7+Ksfc\nSrKVJK9//etve/Ob37zn9THf4cOH172EWZ5++um88MILdfH9S2d3Z27f8IY33Pb2t799wUex/x57\n7LF1L2GWI0eOrHsJsz3zzDMvdPcrfgCvZHYPwjn3mWeeWfcSZrntttvWvYRZ9uucuxp7oM67586d\nW/cSrmovvvhitre3X5Hdi73ma5yr6htJ3rLLrk/t3OjurqpLtfB/0t1nq+rnkny9qv5Hdz+y28DV\nD8nxJLn11lv7U5/61G7D2CdbW1vrXsKe3XnnnfnRj36Uqvr2RbsWz+7O3B47dqxPnjy5xENYmwv/\nXxvX6OeNz372s0lyaL+zexDOuffee++6lzDLyOeO/Tznro5zoM67x49f8t8I7IP77rtv0rjXfKlG\nd9/Z3e/c5evPkvxdVd2YJKs/n7/EMc6u/nw+yX9McvvExwF79o1vfCPveMc7IruM5uMf/3iSnJJd\nRuKcy9Vg7mucH07ym6vbv5nkzy4eUFVvqKo3/ux2kn+Z5OJ/jcJ+k11GJbuMSG45EOYW53+T5D1V\n9b+S3LnaTlX9o6o6sRrz5iR/WVX/Pcl/S/Kfuvs/z5wX5pJdRiW7jEhuORBmfY5zd7+Y5F/scv/f\nJrlrdft7Sf7xnHlgabLLqGSXEcktB4UrBwIAwASKMwAATKA4AwDABIozAABMoDgDAMAEijMAAEyg\nOAMAwASKMwAATKA4AwDABIozAABMoDgDAMAEijMAAEygOAMAwASKMwAATKA4AwDABIsU56p6b1V9\nt6pOV9Und9lfVfW51f4nq+pdS8wLc8kuo5JdRiS3jG52ca6qa5L8YZL3JfmFJB+sql+4aNj7khxd\nfW0l+cLceWEu2WVUssuI5JaDYIlnnG9Pcrq7v9fdP03y5SR3XzTm7iQP9QXfSvKmqrpxgblhDtll\nVLLLiOSW4S1RnG9K8uyO7TOr+y53TJKkqraq6mRVndze3l5geXBJi2V3Z27PnTu3+ELhIlcku865\nXGFXrC8477JfNu7Ngd19vLuPdfexQ4cOrXs5MMnO3B4+fHjdy4HJnHMZlfMu67BEcT6b5JYd2zev\n7rvcMbDfZJdRyS4jkluGt0RxfjTJ0ap6W1W9Lsk9SR6+aMzDST60erfsu5O81N3PLTA3zCG7jEp2\nGZHcMrxr5x6gu89X1ceSfC3JNUke6O5TVfVbq/33JzmR5K4kp5P8OMmH584Lc8kuo5JdRiS3HASz\ni3OSdPeJXAj7zvvu33G7k3x0iblgSbLLqGSXEckto9u4NwcCAMAmUpwBAGACxRkAACZQnAEAYALF\nGQAAJlCcAQBgAsUZAAAmUJwBAGACxRkAACZQnAEAYALFGQAAJlCcAQBgAsUZAAAmUJwBAGACxRkA\nACZQnAEAYIJFinNVvbeqvltVp6vqk7vsv6OqXqqqJ1Zfn15iXphLdhmV7DIiuWV01849QFVdk+QP\nk7wnyZkkj1bVw9391EVDv9nd7587HyxFdhmV7DIiueUgWOIZ59uTnO7u73X3T5N8OcndCxwXrjTZ\nZVSyy4jkluHNfsY5yU1Jnt2xfSbJr+wy7ler6skkZ5N8ortP7XawqtpKspUk119//QLLW6+tra11\nL2GWqlr3Eq6kxbJ7cW6PHz9+BZa7f7p73UuY5YDnNrlC2U2Se++9d+Gl7q/Rszv6uePcuXOvtvuK\n9YXV9mWvd5PI7hiWKM5TPJ7kSHdvV9VdSf40ydHdBnb38STHk+TWW28dO0UcBJOyK7dsoMvOblXJ\nLuu2p74gu+yXJV6qcTbJLTu2b17d9/9198vdvb26fSLJdVV1wwJzwxyyy6hklxHJLcNbojg/muRo\nVb2tql6X5J4kD+8cUFVvqdXvUKrq9tW8Ly4wN8whu4xKdhmR3DK82S/V6O7zVfWxJF9Lck2SB7r7\nVFX91mr//Uk+kOQjVXU+yU+S3NOjv5iH4ckuo5JdRiS3HASLvMZ59euUExfdd/+O259P8vkl5oIl\nyS6jkl1GJLeMzpUDAQBgAsUZAAAmUJwBAGACxRkAACZQnAEAYALFGQAAJlCcAQBgAsUZAAAmUJwB\nAGACxRkAACZQnAEAYALFGQAAJlCcAQBgAsUZAAAmUJwBAGCCRYpzVT1QVc9X1bcvsb+q6nNVdbqq\nnqyqdy0xL8wht4xKdhmV7DK6pZ5xfjDJe19l//uSHF19bSX5wkLzwhwPRm4Z04ORXcb0YGSXgS1S\nnLv7kSQ/eJUhdyd5qC/4VpI3VdWNS8wNeyW3jEp2GZXsMrr9eo3zTUme3bF9ZnXfK1TVVlWdrKqT\n29vb+7I4uAS5ZVR7yu6+rAxeneyy0TbuzYHdfby7j3X3sUOHDq17OTCJ3DKqndld91rgcsgu67Bf\nxflsklt2bN+8ug82mdwyKtllVLLLRtuv4vxwkg+t3i377iQvdfdz+zQ37JXcMirZZVSyy0a7domD\nVNWXktyR5IaqOpPk95NclyTdfX+SE0nuSnI6yY+TfHiJeWEOuWVUssuoZJfRLVKcu/uDr7G/k3x0\niblgKXLLqGSXUckuo9u4NwcCAMAmUpwBAGACxRkAACZQnAEAYALFGQAAJlCcAQBgAsUZAAAmUJwB\nAGACxRkAACZQnAEAYALFGQAAJlCcAQBgAsUZAAAmUJwBAGACxRkAACZYpDhX1QNV9XxVffsS+++o\nqpeq6onV16eXmBfmkFtGJbuMSnYZ3bULHefBJJ9P8tCrjPlmd79/oflgCQ9GbhnTg5FdxvRgZJeB\nLfKMc3c/kuQHSxwL9ovcMirZZVSyy+iWesZ5il+tqieTnE3yie4+tdugqtpKspUkR44cydbW1j4u\ncXlVte4lzPLFL35x3UuY5b777pt7iMvO7fXXXz93zrU7fvz4upcwS3evewmzLXDu2NM59/vf//7c\neddq9OySZI/n3c985jP7uMTljd4XRj/vTj137NebAx9PcqS7fzHJv0vyp5ca2N3Hu/tYdx87fPjw\nPi0PdrWn3B46dGjfFgiX4JzLqJx32Wj7Upy7++Xu3l7dPpHkuqq6YT/mhr2SW0Ylu4xKdtl0+1Kc\nq+ottfodRFXdvpr3xf2YG/ZKbhmV7DIq2WXTLfIa56r6UpI7ktxQVWeS/H6S65Kku+9P8oEkH6mq\n80l+kuSeHv3FMAxPbhmV7DIq2WV0ixTn7v7ga+z/fC58/AxsDLllVLLLqGSX0blyIAAATKA4AwDA\nBIozAABMoDgDAMAEijMAAEygOAMAwASKMwAATKA4AwDABIozAABMoDgDAMAEijMAAEygOAMAwASK\nMwAATKA4AwDABIozAABMoDgDAMAEs4tzVd1SVX9RVU9V1amq+u1dxlRVfa6qTlfVk1X1rrnzwlyy\ny6hklxHJLQfBtQsc43yS3+3ux6vqjUkeq6qvd/dTO8a8L8nR1devJPnC6k9YJ9llVLLLiOSW4c1+\nxrm7n+vux1e3f5jkO0luumjY3Uke6gu+leRNVXXj3LlhDtllVLLLiOSWg2DR1zhX1VuT/HKSv7po\n101Jnt2xfSav/GH52TG2qupkVZ08d+7cksuDS5qb3Z253d7evlLLhFdYMrvOueyXpfuC8y77ZbHi\nXFWHknwlye9098t7PU53H+/uY9197PDhw0stDy5piezuzO2hQ4eWXSBcwtLZdc5lP1yJvuC8y35Z\npDhX1XW58EPwJ9391V2GnE1yy47tm1f3wVrJLqOSXUYkt4xuiU/VqCR/lOQ73f0Hlxj2cJIPrd4t\n++4kL3X3c3Pnhjlkl1HJLiOSWw6CJT5V49eS/EaSv66qJ1b3/V6SI0nS3fcnOZHkriSnk/w4yYcX\nmBfmkl1GJbuMSG4Z3uzi3N1/maReY0wn+ejcuWBJssuoZJcRyS0HgSsHAgDABIozAABMoDgDAMAE\nijMAAEygOAMAwASKMwAATKA4AwDABIozAABMoDgDAMAEijMAAEygOAMAwASKMwAATKA4AwDABIoz\nAABMoDgDAMAEs4tzVd1SVX9RVU9V1amq+u1dxtxRVS9V1ROrr0/PnRfmkl1GJbuMSG45CK5d4Bjn\nk/xudz9eVW9M8lhVfb27n7po3De7+/0LzAdLkV1GJbuMSG4Z3uxnnLv7ue5+fHX7h0m+k+SmuceF\nK012GZXsMiK55SCo7l7uYFVvTfJIknd298s77r8jyVeTnElyNsknuvvUJY6xlWRrtfnzSb672AJf\n6YYkL1zB419po68/ufKP4dbuPvxag+Zmd59zm4z/vR99/Yns7oXv+/odiNyuxsrudKOvP9mU7C5V\nnKvqUJL/kuS+7v7qRfv+YZL/293bVXVXkn/b3UcXmXiGqjrZ3cfWvY69Gn39yWY8Btndf6OvP9mM\nxzBadjfh72yu0R/DJqx/tNyu1rX2v7c5Rl9/sjmPYZFP1aiq65J8JcmfXPxDkCTd/XJ3b69un0hy\nXVXdsMTcMIfsMirZZURyy+iW+FSNSvJHSb7T3X9wiTFvWY1LVd2+mvfFuXPDHLLLqGSXEcktB8ES\nn6rxa0l+I8lfV9UTq/t+L8mRJOnu+5N8IMlHqup8kp8kuaeXfHH13h1f9wJmGn39yXofg+yuz+jr\nT2R3L3zf109u98b3ff024jEs+uZAAAA4qFw5EAAAJlCcAQBggquyOFfVe6vqu1V1uqo+ue71XK6q\neqCqnq+qb697LXsx5bKr7E5210t2905210t290Zu12sTc3vVvca5qq5J8j+TvCcXPmD90SQf3OWS\nnxurqv5pku0kD3X3O9e9nstVVTcmuXHnZVeT/PpI34N1kN31k929kd31k93LJ7frt4m5vRqfcb49\nyenu/l53/zTJl5PcveY1XZbufiTJD9a9jr1y2dU9k901k909k901k909kds128TcXo3F+aYkz+7Y\nPhMnj7WpC5dd/eUkf7XelQxBdjeI7F4W2d0gsjuZ3G6QTcnt1Vic2RCry65+JcnvdPfL614PTCW7\njEp2GdEm5fZqLM5nk9yyY/vm1X3so9e67Cq7kt0NILt7IrsbQHYvm9xugE3L7dVYnB9NcrSq3lZV\nr0tyT5KH17ymq8qUy66yK9ldM9ndM9ldM9ndE7lds03M7VVXnLv7fJKPJflaLrzI/D9096n1rury\nVNWXkvzXJD9fVWeq6l+ve02X6WeXXf3nVfXE6uuudS9q08nuRpDdPZDdjSC7l0luN8LG5faq+zg6\nAADYi6vuGWcAANgLxRkAACZQnAEAYALFGQAAJlCcAQBgAsUZAAAmUJwBAGCC/wepJTYbNznzsAAA\nAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "br=[[ 0, 0, 1],\n", " [ 0, 1,-1.5],\n", " [ 1,-1.5, 0]]\n", "\n", "diags = [np.rot90(br,i) for i in range(4)]\n", "plots(diags)" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nY4wxxpja8v9i029ma30TLQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "rots = straights + diags\n", "corrs = [correlate(images[0], rot) for rot in rots]\n", "plots(corrs)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": true }, "outputs": [], "source": [ "eights=[images[i] for i in range(n) if labels[i]==8]\n", "ones=[images[i] for i in range(n) if labels[i]==1]" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n0yNcWG6PsNsfLBLsEd60aZPK06ZNU9l9X9q+fbvKdevWDd2/Jj7//HOV//znP6v8+uuvZ32OmuLK\nMAAAALzFZBgAAADeSjsZNsbMMsbsMcasrbLtdGPMq8aYzak/s1v7BSWBWkEU1AmiolYQBXWCbEXp\nGa4QkQdF5H+qbBslIsustZOMMaNS+e7cD6/w6tevH9jmrtPo9taMHTtW5V27doWew/1OcPc7w0VE\nmjZtqrLbT+r2Nn/55Zeh5yyQCvGoVnKtVatWKnfp0kXltWvXiuvll19WuUOHtF/Brri9q/Pnz89o\n/xqqEI/qxP3fWCS4Tvjq1atV/vTTT0OPuWLFCpVr19Zv5VH6f901pX/+85+n3acIKiTBteKu6+32\nCM+dO1flW2+9NeNz7N69W+VJkyap/Oijj6rs9p9W1wvq9qD/9a9/zXhcBVYhCa6TdNw5QnVrCLt1\ncM0116i8devWjM7pfv4MHDgwo/2r07dvX5Xdz69iSntl2Fr7uojsdzZfLyJf3zU2R0R65HhcSCBq\nBVFQJ4iKWkEU1AmyVdOe4WbW2q8vf34sIs3CngyvUSuIgjpBVNQKoqBOEFnWS6tZa60xxn7T48aY\nO0TkjmzPg+QLqxXqBF/jPQVRUSuIgjpBOjW9MrzbGFMmIpL68xsXRLXWzrDWdrDWZtbMiFIRqVao\nE+/xnoKoqBVEQZ0gsppeGV4oIv1FZFLqzwU5G1GRVfflFe4C+OXl5Sq7NywMGTJE5YYNG6o8ZcoU\nld1GdxGR/ft1+9PEiRNVdhdBj7GSrZVca9y4scrLly/P+Tm2bdumsntjzNNPP53zc0ZUsnXifumO\niMjw4cNVdm9ea9u2rcpDhw4NPcfs2bPTjsO9sdf9MocESUytuDeiuTdOul+49O1vfztwjMOHD2c1\nhqNHj6o8ePBglTt37hzY584771Q53U3hMZWYOsmFL774QmX3i3rSadmypco33XRT1mN68cUXVV66\ndGnWx8yXKEurPS0i/ycibYwxHxpjBsiJ4rrcGLNZRC5LZXiOWkEU1AmiolYQBXWCbKW9MmytveUb\nHro0x2NBwlEriII6QVTUCqKgTpAtvoEOAAAA3jJuD1NeTxZyN2dc1K1bN7DtwQcfVNnt7/voo49U\ndvv7pk6dqnLr1q3TjmPYsGEqT58+Pe0+hWatNfk4bhLqpCZ27NihcvPmzXN+jvfee09lt9/9k08+\n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\ndgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n47y6Uq4kae3atV6dkQ/M9UjIqdVek/SepCvN7IiZzVNHuKaa2UFJU0o1IkdWEIKcIBRZQQhygmpV\nPDLsnPv9Oa7K3rm+0FBkBSHICUKRFYQgJ6gW30AHAACAaFV9NglITU1NXr1p06Zu7b9q1aou21pb\nW6tpCRnUq5f/b8/k2nHEK/m5gXfeecerW1pa6tkOgIJ75plnvNrM+76bLmuGt23b1uU+kp+LyTOO\nDAMAACBaDMMAAACIFsMwAAAAosWa4RRMmzbNq6+55pqyt0+uvVm5cmXqPSF7kmuEQ87jCABAtdas\nWePVt99+u1cn34927drl1XfeeWeX+zx16lRK3TUeR4YBAAAQLYZhAAAARIthGAAAANFizXAPJNfa\nPPlk+W95fPfdd7169uzZXn3y5Ml0GgMQhSFDhjS6BWREpfPDIk433HCDVyfnlmHDhpXdf926dV59\n4sSJdBrLKI4MAwAAIFoMwwAAAIgWwzAAAACixZrhAE1NTV69adOmbu3/2WefeXV7e3u1LQGI2IwZ\nMxrdAjKCNcI4m7lz53r18OHDy95+3759Xr158+bUe8oyjgwDAAAgWgzDAAAAiBbDMAAAAKLFmuEA\nS5Ys8eozZ850a/9K5yFGHHr18v/tWSlHN998s1evXr069Z6QTa2trV7d0tLSoE6Qd7t27Wp0C6iD\nxYsXe/W8efO8utLa8qlTp3r1F198kU5jOcGRYQAAAESLYRgAAADRYhgGAABAtFgznDB+/Pgu2269\n9dZu3Ufy/HwHDhyoqicUQ3KNcKU1XHfccYdXNzc3d7nN3r17q28MmXP48OGy1/fu3durR40a5dVt\nbW2p94R8OnToUKNbQMpGjhzZZVtyjXDyMyo//fSTV69fv96rY1sjnMSRYQAAAESLYRgAAADRYhgG\nAABAtBiGAQAAEC0+QJfw1ltvddk2aNCgsvu8//77Xj1nzpw0W0JBvPDCC1599913d2v/+fPnd9mW\nPNE6iuH06dNlrzczrz7//PNr2Q6ABrr88su9esuWLV1uc+WVV5a9j2effdark18mFjuODAMAACBa\nDMMAAACIFsMwAAAAosWa4YQhQ4Z02Zb8soSktWvXevU333yTak8ohv379ze6BeRE8ot7ktkZM2aM\nVyfXjt977721aQy5w3ry/EuuB660PvhszrbOGP+PI8MAAACIVsVh2MxGmlmrme01sz1mdl9p+2Az\n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\nNSiMAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plots(eights[:5])\n", "plots(ones[:5])" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def normalize(arr): return (arr-arr.mean())/arr.std()" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "collapsed": true }, "outputs": [], "source": [ "filts8 = np.array([ims.mean(axis=0) for ims in pool8])\n", "filts8 = normalize(filts8)" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nHzN8h1mcMyu+AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plots(filts8)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pool1 = [np.array([pool(correlate(im, rot)) for im in ones]) for rot in rots]\n", "filts1 = np.array([ims.mean(axis=0) for ims in pool1])\n", "filts1 = normalize(filts1)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plots(filts1)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def pool_corr(im): return np.array([pool(correlate(im, rot)) for rot in rots])" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plots(pool_corr(eights[0]))" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def sse(a,b): return ((a-b)**2).sum()\n", "def is8_n2(im): return 1 if sse(pool_corr(im),filts1) > sse(pool_corr(im),filts8) else 0" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(126.77776, 181.26105)" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sse(pool_corr(eights[0]), filts8), sse(pool_corr(eights[0]), filts1)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[5223, 287]" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[np.array([is8_n2(im) for im in ims]).sum() for ims in [eights,ones]]" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[166, 5892]" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[np.array([(1-is8_n2(im)) for im in ims]).sum() for ims in [eights,ones]]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def n1(a,b): return (np.fabs(a-b)).sum()\n", "def is8_n1(im): return 1 if n1(pool_corr(im),filts1) > n1(pool_corr(im),filts8) else 0" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "[np.array([is8_n1(im) for im in ims]).sum() for ims in [eights,ones]]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "[np.array([(1-is8_n1(im)) for im in ims]).sum() for ims in [eights,ones]]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [conda root]", "language": "python", "name": "conda-root-py" }, "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.6.1" }, "nav_menu": {}, "toc": { "navigate_menu": true, "number_sections": true, "sideBar": true, "threshold": 6, "toc_cell": false, "toc_section_display": "block", "toc_window_display": false }, "widgets": { "state": { "0468b419a96749ec9b4cb1abdd4626f7": { "views": [] }, "2d3eeb645fa442fcb882ae96a9387e3d": { "views": [] }, "32cface5fd2d422480c840a0dbb1852d": { "views": [] }, "3d7fbc924d804aa1b0b751d1c4d9d42a": { "views": [] }, "60b62dbd86494ef0bc136aef4657b05f": { "views": [ { "cell_index": 8 } ] }, "879e65eadeba4a66bd0759b2918fa9f0": { "views": [] }, "8cd5af0fc89d43d4ae9b786c1f886bee": { "views": [] }, "c3a89a0403354dd19a296fd30376a143": { "views": [] }, "c997f4ebd8874aaea6ea7b699afc9a27": { "views": [] }, "ff487921e8134858a58437f0558fd42f": { "views": [] } }, "version": "1.1.2" } }, "nbformat": 4, "nbformat_minor": 1 } ================================================ FILE: nbs/gradient-descent-intro.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "toc": "true" }, "source": [ "# Gradient Descent Intro\n", "

" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import math,sys,os,numpy as np\n", "from numpy.random import random\n", "from matplotlib import pyplot as plt, rcParams, animation, rc\n", "from __future__ import print_function, division\n", "from ipywidgets import interact, interactive, fixed\n", "from ipywidgets.widgets import *\n", "rc('animation', html='html5')\n", "rcParams['figure.figsize'] = 3, 3\n", "%precision 4\n", "np.set_printoptions(precision=4, linewidth=100)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def lin(a,b,x): return a*x+b" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "a=3.\n", "b=8." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "n=30\n", "x = random(n)\n", "y = lin(a,b,x)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.3046, 0.918 , 0.7925, 0.8476, 0.2508, 0.3504, 0.8326, 0.6875, 0.4449, 0.4687,\n", " 0.5901, 0.2757, 0.6629, 0.169 , 0.8677, 0.6612, 0.112 , 0.1669, 0.6226, 0.6174,\n", " 0.3871, 0.4724, 0.3242, 0.7871, 0.0157, 0.8589, 0.7008, 0.2942, 0.3166, 0.5847])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 8.9138, 10.7541, 10.3775, 10.5428, 8.7525, 9.0511, 10.4977, 10.0626, 9.3347,\n", " 9.4062, 9.7704, 8.827 , 9.9888, 8.507 , 10.603 , 9.9836, 8.336 , 8.5006,\n", " 9.8678, 9.8523, 9.1614, 9.4172, 8.9725, 10.3614, 8.0471, 10.5766, 10.1025,\n", " 8.8827, 8.9497, 9.7542])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(x,y)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def sse(y,y_pred): return ((y-y_pred)**2).sum()\n", "def loss(y,a,b,x): return sse(y, lin(a,b,x))\n", "def avg_loss(y,a,b,x): return np.sqrt(loss(y,a,b,x)/n)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9.1074" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a_guess=-1.\n", "b_guess=1.\n", "avg_loss(y, a_guess, b_guess, x)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "lr=0.01\n", "# d[(y-(a*x+b))**2,b] = 2 (b + a x - y) = 2 (y_pred - y)\n", "# d[(y-(a*x+b))**2,a] = 2 x (b + a x - y) = x * dy/db" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def upd():\n", " global a_guess, b_guess\n", " \n", " # make a prediction using the current weights\n", " y_pred = lin(a_guess, b_guess, x)\n", " \n", " # calculate the derivate of the loss\n", " dydb = 2 * (y_pred - y)\n", " dyda = x*dydb\n", " \n", " # update our weights by moving in direction of steepest descent\n", " a_guess -= lr*dyda.mean()\n", " b_guess -= lr*dydb.mean()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fig = plt.figure(dpi=100, figsize=(5, 4))\n", "plt.scatter(x,y)\n", "line, = plt.plot(x,lin(a_guess,b_guess,x))\n", "plt.close()\n", "\n", "def animate(i):\n", " line.set_ydata(lin(a_guess,b_guess,x))\n", " for i in range(10): upd()\n", " return line,\n", "\n", "ani = animation.FuncAnimation(fig, animate, np.arange(0, 40), interval=100)\n", "ani" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python [conda root]", "language": "python", "name": "conda-root-py" }, "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.6.1" }, "nav_menu": {}, "toc": { "navigate_menu": true, "number_sections": true, "sideBar": true, "threshold": 6, "toc_cell": true, "toc_section_display": "block", "toc_window_display": false }, "widgets": { "state": {}, "version": "1.1.2" } }, "nbformat": 4, "nbformat_minor": 1 } ================================================ FILE: nbs/images/AF1QipMKlINdas9JzCH0FUrOj7FyVKhQUAGBSHTLSbK9.url ================================================ [InternetShortcut] URL=https://photos.google.com/photo/AF1QipMKlINdas9JzCH0FUrOj7FyVKhQUAGBSHTLSbK9