# 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.

ṚŒ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.