#Python 2 + NumPy, 122 bytes I admit it. I worked ahead. <!-- language-all: lang-python --> import numpy def f(m):w=len(m);print sum([list(m[::-1,:].diagonal(i)[::(i+w+1)%2*-2+1])for i in range(-w,w+len(m[0]))],[]) Takes a numpy array as input. Outputs a list. [**Try it online**][1] ###Explanation: def f(m): w=len(m) # the height of the matrix, (at one point I thought it was the width) # get the diagonals of the reversed matrix. Reverse them if odd by mapping odd to -1 d=[list(m[::-1,:].diagonal(i)[::(i+w+1)%2*-2+1])for i in range(-w,w+len(m[0]))] # w+len(m[0]) accounts for the width of the matrix. Works if it's too large. print sum(d,[]) # join the lists A lambda is the same length: import numpy lambda m:sum([list(m[::-1,:].diagonal(i)[::(i+len(m)+1)%2*-2+1])for i in range(-len(m),len(m)+len(m[0]))],[]) [1]: http://ideone.com/okHH7F