# Array Math

Subscribe to Tech With Tim!

### Array Math

Another reason that numpy is so useful is because of its extensive implementation for array operations and math. Numpy has tons of functions that save us tons of time and can perform operations very quickly

The following operations are supported on numpy arrays. They perform whats known as element-wise operations.
- subtraction: - or np.subtract()
- multiplication: * or np.multiply()
- division: / or np.divide()
- square root: np.sqrt()

```import numpy as np
x = np.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])

x + y  # -> array([[ 6,  8],
#                  [10, 12]])

x - y  # -> array([[-4, -4],
#                  [-4, -4]])

x * y  # -> array([[ 5, 12],
#                  [21, 32]])

x / y  # -> array([[0.2       , 0.33333333],
#                  [0.42857143, 0.5       ]])

np.sqrt(x)  # -> array([[1.        , 1.41421356],
#                       [1.73205081, 2.        ]])
```

To take the dot product of two arrays we can use .dot().

```import numpy as np
v = np.array([9,10])
w = np.array([11,13])

v.dot(w) # -> 229
w.dot(v) # -> 229

np.dot(v, w) # -> 229
```

When we take the dot product of two arrays of the same size we get a scalar. Otherwise we get what's called an inner product.

To transpose a matrix or array we can use .T.

```import numpy as np
v = np.array([[9,10], [98, 67]])

v.T  # ->  array([[ 9, 98],
#                 [10, 67]])
```

To take the sum of an array we can use np.sum(axis=).

```import numpy as np
v = np.array([[9,10], [98, 67]])

np.sum(v)  # -> 184
np.sum(v, axis=0)  # array([107,  77]), this gives us the sum of the columns stored in an array
```