How to install Octave in Mac OS Yosemite ?

I was trying to execute my Octave scripts to recognize digits using a Neural Network. Octave did not work after I upgraded to Yosemite. Now it works after these steps. It may look simple but this wasted several hours.

brew tap homebrew/science

sudo chmod -R 777 /usr/local/share

brew link –overwrite xz

brew install gcc

I thought this prevented the gcc installation from completing.

==> ../configure –build=x86_64-apple-darwin14.3.0 –prefix=/usr/local/Cellar/gcc/5.1.0 –li
Error: Permission denied – /Users/radhakrishnan/Library/Logs/Homebrew/gcc

So I changed the permissions and tried again.

sudo chmod 777 /Users/radhakrishnan/Library/Logs/Homebrew

brew install gcc

sudo chmod -R 777 /usr/local/include/freetype2

brew link freetype

brew install octave –with-x11

Octave code example

This is one of the simpler code tasks I worked on. I use ‘R’ but since this is Octave my first attempt wasn’t generic. The for loop assumes that there are 2 columns in the matrix shown below. There is a way to modify it to be more generic but this an example to show my Octave skills !!

I have a matrix with 2 columns and a vector which has repeating sets of the numbers 3,2 and 1. The task is to calculate the mean of all values in each column of the matrix rows that are grouped by the numbers 3, 2 and 1. So I decided to add the vector as the 3rd column of the matrix.

Matrix

\begin{pmatrix}      0.5403023 & -0.9576595 \\    -0.4161468 & -0.2751633 \\    -0.9899925 &  0.6603167 \\    -0.6536436 &  0.9887046 \\     0.2836622 &  0.4080821 \\     0.9601703 & -0.5477293 \\     0.7539023 & -0.9999608 \\    -0.1455000 & -0.5328330 \\    -0.9111303 &  0.4241790 \\    -0.8390715 &  0.9912028 \\     0.0044257 &  0.6469193 \\     0.8438540 & -0.2921388 \\     0.9074468 & -0.9626059 \\     0.1367372 & -0.7480575 \\    -0.7596879 &  0.1542514  \end{pmatrix}

Vector

\begin{pmatrix}      2 \\     3 \\     1 \\     2 \\     3 \\     1 \\     2 \\     3 \\     1 \\     2 \\     3 \\     1 \\     2 \\     3 \\     1  \end{pmatrix}

Add the vector as the 3rd column.

centroids = zeros(K, n);%Declare matrix to store the result
X(:,end + 1 ) = idx;

\begin{pmatrix}        0.5403023 & -0.9576595 &  2.0000000 \\    -0.4161468 & -0.2751633 &  3.0000000 \\    -0.9899925 &  0.6603167 &  1.0000000 \\    -0.6536436 &  0.9887046 &  2.0000000 \\     0.2836622 &  0.4080821 &  3.0000000 \\     0.9601703 & -0.5477293 &  1.0000000 \\     0.7539023 & -0.9999608 &  2.0000000 \\    -0.1455000 & -0.5328330 &  3.0000000 \\    -0.9111303 &  0.4241790 &  1.0000000 \\    -0.8390715 &  0.9912028 &  2.0000000 \\     0.0044257 &  0.6469193 &  3.0000000 \\     0.8438540 & -0.2921388 &  1.0000000 \\     0.9074468 & -0.9626059 &  2.0000000 \\     0.1367372 & -0.7480575 &  3.0000000 \\    -0.7596879 &  0.1542514 &  1.0000000 \\  \end{pmatrix}

Find the unique values of the 3rd column. The decimals do not matter here.

uidx = unique(X(:,3),"columns");

Vector with unique elements

\begin{pmatrix}   1 \\  2 \\  3  \end{pmatrix}

I use find to get all the row numbers(j) of the values in the matrix where the 3rd column matches each of the unique values(uidx)

for i = 1:size(uidx,1)
 [j,k]=find(X(:,3) == uidx(i) );
 s = X(j,1);
 t = X(j,2);
 centroids(i,:) = [mean(s);mean(t)]
end

Mean of each column for all the grouped rows

\begin{pmatrix}    -0.171357 &  0.079776 \\     0.141787 & -0.188064 \\    -0.027364 & -0.100211    \end{pmatrix}