# Matrix and Vector math with pyrr¶

Pyrr has both a procedural and object oriented api.

See pyrr for official docs.

Note

We should probably add some more examples here. Feel free to make an issue or pull request on github.

## Examples¶

Identity

```# procedural
>> m = matrix44.create_identity()
>> print(m)
array([[ 1.,  0.,  0.,  0.],
[ 0.,  1.,  0.,  0.],
[ 0.,  0.,  1.,  0.],
[ 0.,  0.,  0.,  1.]])

# object
>> m = Matrix44.identity()
>> print(m)
array([[ 1.,  0.,  0.,  0.],
[ 0.,  1.,  0.,  0.],
[ 0.,  0.,  1.,  0.],
[ 0.,  0.,  0.,  1.]])
```

Matrices produced by `Matrix44` are also just numpy arrays as the class extends `numpy.ndarray`. We can pretty much use the APIs interchangeably unless we rely on a method in the class. They can both be passed right into shaders as matrix uniforms.

Rotation

```# Short version
mat = Matrix44.from_eulers(Vector3(rotation))

# Long version
rot_x = matrix44.create_from_x_rotation(rotation)
rot_y = matrix44.create_from_y_rotation(rotation)
rot_z = matrix44.create_from_z_rotation(rotation)
mat = matrix44.multiply(x, y)
mat = matrix44.multiply(mat, z)
```

## Covert¶

```# mat4 to mat3
mat3 = Matrix33.from_matrix44(mat)
# mat3 to mat4
mat4 = Matrix44.from_matrix33(mat)
```

## Common Mistakes¶

Matrices and vectors are just numpy arrays. When multiplying matrices, use the `mult` method/function.

```mat = matrix44.mult(mat1, mat2)
```

Using the `*` operator would just make a product of the two arrays.