BasicArray middleRows(int start, int n) {
   BasicArray out;
   out.resize(n, m_nCol);
   for (int i = start; i < start + n; ++i) {
     for (int j = 0; j < m_nCol; ++j) {
       out(i, j) = at(i, j);
     }
   }
   return out;
 }
 BasicArray block(int startRow, int startCol, int nRow, int nCol) const {
   BasicArray out;
   out.resize(nRow, nCol);
   for (int iRow = 0; iRow < nRow; ++iRow) {
     for (int iCol = 0; iCol < nCol; ++iCol) {
       out(iRow, iCol) = at(iRow + startRow, iCol + startCol);
     }
   }
   return out;
 }