# Generating Permutation Matrices in Octave / Matlab

I have been doing Gilbert Strang’s linear algebra assignments, some of which require you to write short scripts in MatLab, though I use GNU Octave (which is kind of like a free MatLab). I was trying out this problem:

To solve this quickly, it would have been nice to have a function that would give a list of permutation matrices for every n-sized square matrix, but there was none in Octave, so I wrote a function permMatrices which creates a list of permutation matrices for a square matrix of size n.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
 % function to generate permutation matrices given the size of the desired permutation matrices function x = permMatrices(n) x = zeros(n,n,factorial(n)); permutations = perms(1:n); for i = 1:size(x,3) x(:,:,i) = eye(n)(permutations(i,:),:); end endfunction
view raw permMatrices.m hosted with ❤ by GitHub

For example:

The MatLab / Octave code to solve this problem is shown below:

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
 % Solution for part (a) p = permMatrices(3); n = size(p,3); % number of permutation matrices v = zeros(n,1); % vector of zeros with dimension equalling number of permutation matrices % check for permutation matrices other than identity matrix with 3rd power equalling identity matrix for i = 1:n if p(:,:,i)^3 == eye(3) v(i,1) = 1; end end v(1,1) = 0; % exclude identity matrix ans1 = p(:,:,v == 1) % Solution for part (b) P = permMatrices(4); m = size(P,3); % number of permutation matrices t = zeros(m,1); % vector of zeros with dimension equalling number of permutation matrices % check for permutation matrices with 4th power equalling identity matrix for i = 1:m if P(:,:,i)^4 == eye(4) t(i,1) = 1; end end % print the permutation matrices ans2 = P(:,:,t == 0)
view raw Section2_7_13.m hosted with ❤ by GitHub

Output:

# Getting Started

I have been searching for good MOOCs to get me started with R and Python programming languages. I’ve already begun the Johns Hopkins University Data Science Specialization on Coursera. It consists of 9 courses (including Data Scientist’s Toolbox, R programming, Getting and Cleaning Data, Exploratory Data Analysis, Reproducible Research, Statistical Inference, Regression Models, Practical Machine Learning and Developing Data Products), ending with a 7-week Capstone Project that I’m MOST excited about. I want to get there fast.

The Capstone would consist of :
• Building a predictive data model for analyzing large textual data sets
• Cleaning real-world data and perform complex regressions
• Creating visualizations to communicate data analyses
• Building a final data product in collaboration with SwiftKey, award-winning developer of leading keyboard apps for smartphones

I started with the R programming course where I found the programming assignments to be moderately difficult. They were good practice and also time-consuming for me since I haven’t yet gotten used to the R syntax, which is supposedly unintuitive. Anyway, I completed the course with distinction (90+ marks) scoring 95 on 100, losing 5 because I hadn’t familiarized myself with Git / GitHub. I did this course for a verified certificate, which cost me \$29, and looks like this:

I won’t be paying for any of the remaining courses though, but still will get a certificate of accomplishment for each course I pass. I have alredy begun with Getting and Cleaning Data and Data Scientist’s Toolbox.

I checked today, and it seems Andrew Ng’s Machine Learning course has gone open to all and is self-paced. A lot of people have gone on to participate in Kaggle competitions with what they learnt in his course, so I’d like to experience it — even though it’s taught with Octave / MATLAB. My very short term goal is to start participating in these competitions ASAP.

I will be learning the basics of Git this week and along with that, about reading from MySQL, HDF5, the web and APIs. I intend to start reading Trevor Hastie’s highly recommended book, Introduction to Statistical Learning.