import ndarray;


int main() {

  // create a 3D matrix using generic template
  NDArray!(double,3) x2 = NDArray!(double,3).make(null,3,4,5);

  for (int n2=0; n2<5; n2++) {
    for (int n1=0; n1<4; n1++) {
      for (int n0=0; n0<3; n0++) {
	x2[n0][n1][n2] = 100*n2 + 10*n1 + n0;
      }
    }
  }

  printf(" 3D array");
  // print result as a flat 1D array
  int k;
  for (k=0; k<3*4*5; k++) {
    if (k%(3*4) == 0) printf("\n");
    printf("%.3d ", cast(int)x2.data[k]);
  }


  NDArray!(double,3) y = x2[0..3].by(2)[2][];
  printf("\n Sub-array with %d elements",y.nelems);
  k=0;
  for (int n2=0; n2 < y.length[2]; n2++) {
    for (int n1=0; n1 < y.length[1]; n1++) {
      for (int n0=0; n0 < y.length[0]; n0++,k++) {
	if (k%(y.length[0]*y.length[1]) == 0) printf("\n");
	printf("%.3d ", cast(int)y[n0][n1][n2]);
      }
    }
  }
  printf("\n");
  
  return 0;
}
