Now that we know several ways of inputting arrays, we should take a look at how we can operate with them.

## Matrix multiplication

Two dimensional arrays (or matrices) are a fundamental part of Julia. For example, you can resort to a Matlab-style syntax for matrix-matrix multiplication:

```
A * B
```

A Matrix and a Vector can be also multiplied with the * operator.

```
A * v
```

## Element-wise multiplication

In case you need to multiply the elements of an n-dimensional array on an element-wise fashion, you can resort to the dot operator, which will *broadcast* the scalar multiplication operator on an element-wise fashion, just as we discussed in the previous post of this tutorial series:

```
A .* B
```

## Dot product

You can do dot products by calling the `dot`

function

```
v = rand(1000)
w = rand(1000)
z = dot(v,w)
```

Alternatively, you can resort to a typical linear algebra notation:

```
z = v'w
```

## Backslash operator

Just like in Matlab, Julia has a built-in operator to solve matrices. For square matrices, it will try to solve the linear system, while for rectangular matrices, it will seek for the least squares solution.

One **‘gotcha’** that you will probably encounter sooner or later is that, as **1xN matrices are not the same as N-element vectors**. We have to be careful and always employ vectors in the right-hand side of an equation.

```
b1 = [4.0, 5, 6] # 3-element Vector{Float64}
b2 = [4.0; 5; 6] # 3-element Vector{Float64}
m1 = [4.0 5 6] # 1×3 Matrix{Float64}
x=A\b1 # Solves A*x=b
x=A\b2 # Solves A*x=b
x=A\m1 # Error!!
```