subMatrixRow(indices, startColumn, endColumn) {
                if (startColumn === undefined) startColumn = 0;
                if (endColumn === undefined) endColumn = this.columns - 1;
                if ((startColumn > endColumn) || (startColumn < 0) || (startColumn >= this.columns) || (endColumn < 0) || (endColumn >= this.columns)) {
                    throw new RangeError('Argument out of range');
                }

                var newMatrix = new this.constructor[Symbol.species](indices.length, endColumn - startColumn + 1);
                for (var i = 0; i < indices.length; i++) {
                    for (var j = startColumn; j <= endColumn; j++) {
                        if (indices[i] < 0 || indices[i] >= this.rows) {
                            throw new RangeError('Row index out of range: ' + indices[i]);
                        }
                        newMatrix.set(i, j - startColumn, this.get(indices[i], j));
                    }
                }
                return newMatrix;
            }
Returns a subset of the matrix based on an array of row indices
@param {Array} indices - Array containing the row indices
@param {number} [startColumn = 0] - First column index
@param {number} [endColumn = this.columns-1] - Last column index
@return {Matrix}