diamond = ...
@(a)cellfun(@(x)x(x>0)',num2cell(spdiags(flipud(a)),1),'un',0)
d = diamond([1 2 3; 4 5 6])
%slightly nicer display
disp("\nd =");
celldisp(d)
ZGlhbW9uZCA9IC4uLgpAKGEpY2VsbGZ1bihAKHgpeCh4PjApJyxudW0yY2VsbChzcGRpYWdzKGZsaXB1ZChhKSksMSksJ3VuJywwKQoKZCA9IGRpYW1vbmQoWzEgMiAzOyA0IDUgNl0pCiVzbGlnaHRseSBuaWNlciBkaXNwbGF5CmRpc3AoIlxuZCA9Iik7CmNlbGxkaXNwKGQpCg==
diamond =
@(a) cellfun (@(x) x (x > 0)', num2cell (spdiags (flipud (a)), 1), 'un', 0)
d =
{
[1,1] = 1
[1,2] =
4 2
[1,3] =
5 3
[1,4] = 6
}
d =
d{1} =
1
d{2} =
4 2
d{3} =
5 3
d{4} =
6