# How-To?¶

#0 **How to quickly try out the latest build?**

This can be achieved by simply pulling Owl’s docker image.

```
docker pull ryanrhymes/owl
docker run -t -i ryanrhymes/owl
```

If you want to run Owl on different platforms such as ARM, please refer [here](https://github.com/ryanrhymes/owl#run-owl-on-different-platforms) for more details.

#1 **How to make toplevel automatically load Owl when it starts?**

You can edit the `.ocamlinit`

file in your home directory by adding the following lines.

```
#use "topfind"
#require "owl"
open Owl
```

If you don’t want to open Owl module, please remove the `open Owl`

. If you use `utop`

rather than OCaml’s default toplevel, remove the redundant `#use "topfind"`

.

#2 **How to check the performance of Linalg module?**

Calling the `Linalg.Generic.peakflops ()`

function will return you the number of float operations per second (flops). This number is derived by calculating the amount of time spent in multiplying two `2000 x 2000`

matrices. Julia provides the same function and you can use this to compare two.

#3 **How to measure the time spent in an operation?**

`Owl.Utils.time`

function can be used to measure the time spent in one operation. It takes a function of type `(unit -> 'a)`

as input and returns a float number represent the time in `ms`

. Here is an example.

```
let x = Mat.uniform 1000 1000 in
let f () = Mat.sum x in
Owl.Utils.time f;;
```

#4 **How to concatenate a list of ndarrays?**

```
Arr.concatenate ~axis:0 [|x; y; z|];;
```

#5 **How to split an ndarray?**

```
Arr.split ~axis:0 [|2;4;2|] x;;
```

#6 **How to make one-hot vectors?**

```
let x = Mat.zeros 4 4;;
Mat.set_index x [| Utils.range 0 3; [|3;2;1;0|] |] [|1.|];;
```

#7 **How to circular shift the columns/rows of a matrix?**

```
Mat.get_slice [ R []; L [1;2;3;0] ] x;;
```

#8 **Save & Load Matrices**

All matrices can be serialised to storage by using `save`

. Later, you can load a matrix using `load`

function.

```
Mat.save x "m0.mat";; (* save x to m0.mat file *)
Mat.load "m0.mat";; (* load m0.mat back to the memory *)
```

There are also corresponding `save_txt`

and `load_txt`

functions for a simple tab-delimited, human-readable format. Note the performance is much worse than the corresponding `save`

and `load`

.