Ndarray iterative creation


#1

I create 2d array where elements depend one ones with lower indexes. I.e. elements can be build up in natural order bit access to previous already created elements is necessary. My code has following structure (simplified):

fn create2d(n1: usize, n2: usize) -> Array2<MyItem> {
  // create array with default values which will be all overwritten later
  let mut arr = Array2::<MyItem>::default((n1, n2));
   // (0,0)
   arr[[0, 0]] = f0();
  // 1st col
  for i in 1..n1 {
    arr[[i, 0]] = f1(arr[[i - 1, 0]]);
  }
  // 1st row
  for j in 1..n2 {
    arr[[0, j]] = f1(arr[[0, j - 1]]);
  }
  // inner 2d area
  for i in 1..n1 {
    for j in 1..n2 {
      arr[[i, j]] = f2(arr[[i, j - 1]], arr[[i - 1, j]], arr[[i - 1, j - 1]]);
    }
  }
  arr
}

Is there any more Rust and ndarray way how to write it? I can not find anything better than this C-like code.
Especially when extending this current way to 3d it would be too annoying.