Besides of the already solved issue - which is fooling a lot of people - it's questionable if there's any advantage of using 2D arrays. The optimization is minimal, if there is one at all - there have been counter examples posted in the past, even the first help file example is faster with a nested array on my machine. IMO it's not worth having the quirk of being forced to think about an extra data type.
If Array2D's .at and .put operations were implemented at the C++ level it would be much better assuming you are doing cache-friendly access. Right now the 4-5 extra sclang bytecodes that have to happen for an array access on Array2D make it barely worth it.
Regards
Daniel
-----------------------------