## Octave: Unrolling and reshaping

Most optimization functions in Octave such as fminunc expect vectors the parameter to be optimized. However, sometimes (e.g. in the field of neural networks) the vector representation is somewhat unnatural and clumsy to work with. Converting between vector and matrix representation is referred to as unrolling (matrix -> vector) and reshaping (vector -> matrix).

## Unrolling

Unrolling is quite simple. Given a matrix A, you have two different possibilities of addressing the elements of A. Either you address rows and colums separately, i.e., A(i,j) or you use one single index or index range A(k) which indexes A column by column (Remember that the colon stands for the range from 1 to end):

As you can see, A(:) is exactly what we want: A vector representation of the matrix.

## Reshaping

The reverse way, reshaping, is performed by a command called reshape. It takes as arguments the vector to be reshaped and the row and column count of the target matrix. Continuing the example from above, we get the following:

## Unrolling and reshaping with multiple matrices

Say you have multiple matrices,  A,B, and C. Then the described procedure works analogously:

## Debugging in Octave

Short but useful wrapup which helped me much during my first debugging session in Octave!

## Working with files

Load CSV file into a matrix. This command loads file ex2data.txt and stores its contents in a variable named ex2data:

## Matrices and Vectors

Appending to a vector (does not work on matrices as this would break the rectangular shape):

a = [1; 2; 3];
a(end + 1) = 4;

## Plotting

Create empty figure:

Plot XY diagram using “+” markers in black:

Plot multiple datasets in one XY diagram:

## Random

Create a random permutation of the integers 1 to 10:

The same function can be used for drawing without replacement, e.g., out of a number of items 1,2,…,10 take five distinct elements:

## Utility functions

Change default prompt (PS1):

Change/check working directory:

What variables are currently defined/visible:

Continue command in next line by typing three dots

Reading user input from the shell:

x = input(“Please enter the value of x: “);

## Miscellaneous:

• Commands can be concatenated with a comma (produce output) or semicolon (hide output).
• Reverse i search works just like for the Bash