code: function _Matrix(numRows, numColumns, data) {
    if(!Number.isInteger(numRows))
      throw new TypeError("/numRows/ must be an integer.");
    if(!Number.isInteger(numColumns))
        throw new TypeError("/numColumns/ must be an integer.");
  
    var _values;
    var _numValues = numRows * numColumns;
    if (!data || data === undefined)
      _values = [];
    else if (!util.isNumberArray(data))
      throw new TypeError('Invalid values for vector.');
    else
      _values = data;
  
    // Make sure the matrix has numRows * numColumns values
    if (_values.length < _numValues) {
      var zeros = Array(_numValues - _values.length).fill(0);
      _values = _values.concat(zeros);
    } else if (_values.length > _numValues) {
      _values = _values.slice(0, _numValues);
    }
  
    var size = {"rows": numRows, "columns": numColumns};
    readonly(this, "size", size);
    readonly(this, "values", _values);
    readonly(this, "rows", _getRows(this));
    readonly(this, "columns", _getColumns(this));
  }
docs: @class
  A matrix with arbitrary number of rows and columns
  
  @param {Number} numRows
  @param {Number} numColumns
  @param {Array} data: one-dimensional array for the values