Votre problème est que le contenu de votre variable ARR est écrasé avec chaque itération: le arr[k]
Écrasent ce qui est déjà là-dedans. La variable ARR doit être locale au bloc à la place:
mat = []
2.times do # avoid for... use iterators instead
row = []
2.times do
row << rand.to_s
end
mat << row
end