function iterate (data, depth = 0) {
      const result = Array(data.length)
      if (depth < maxDepth) {
        for (let i = 0; i < data.length; i++) {
          index[depth] = i
          result[i] = iterate(data[i], depth + 1)
        }
      } else {
        for (let i = 0; i < data.length; i++) {
          index[depth] = i
          result[i] = fastCallbackFn(data[i], index.slice(), me)
        }
      }
      return result
    }
Create a new matrix with the results of the callback function executed on
each entry of the matrix.
@memberof DenseMatrix
@param {Function} callback   The callback function is invoked with three
                             parameters: the value of the element, the index
                             of the element, and the Matrix being traversed.
@param {boolean} skipZeros   If true, the callback function is invoked only for non-zero entries
@param {boolean} isUnary     If true, the callback function is invoked with one parameter

@return {DenseMatrix} matrix