# Diamondize a Matrix

### J, 7 bytes

```
<@|./.
```

This is an unnamed a monadic verb which takes a matrix and returns a list of antidiagonals:

```
input =. i.3 4
input
0 1 2 3
4 5 6 7
8 9 10 11
<@|./. input
┌─┬───┬─────┬─────┬────┬──┐
│0│4 1│8 5 2│9 6 3│10 7│11│
└─┴───┴─────┴─────┴────┴──┘
```

Test it here.

### Explanation

`/.`

is J's built-in to apply a function to each anti-diagonal. Unfortunately, these anti-diagonals are given in the opposite order of what we want here.- In
`<@|.`

, we first apply`|.`

which reverses the anti-diagonal and then`<`

to box it (which is the only way to return a ragged array in J, since normal arrays are always rectangular, so the antidiagonals would be padded with zeroes).

## Python, 91 bytes

```
e=enumerate
lambda M:[[r[n-i]for i,r in e(M)if-1<n-i<len(r)][::-1]for n,_ in e(M[1:]+M[0])]
```

Test it on Ideone.

## Python + NumPy, 69 bytes

```
import numpy
lambda M:map(M[::-1].diagonal,range(1-len(M),len(M[0])))
```

Expects a 2D NumPy array as input and returns a list of NumPy arrays. Test it on Ideone.

### Jelly, 7 bytes

```
ṚŒDṙZL$
```

Try it online!

### Explanation

```
Ṛ Reverse the matrix vertically.
ŒD Get its diagonals. However these start from
the main diagonal, not the corners.
ZL$ Get the width of the input matrix.
ṙ Rotate the list of diagonals left by that many
places to obtain the correct order.
```