internal DenseDoubleMatrixImplementor( int numberOfRows, int numberOfColumns, double[] data, StorageOrder storageOrder) { Debug.Assert(numberOfRows > 0); Debug.Assert(numberOfColumns > 0); Debug.Assert(data is not null); Debug.Assert( (StorageOrder.ColumnMajor == storageOrder) || (StorageOrder.RowMajor == storageOrder)); int matrixLength = numberOfRows * numberOfColumns; Debug.Assert(data.Length == matrixLength); this.storage = new double[matrixLength]; data.CopyTo(this.storage, 0); if (StorageOrder.RowMajor == storageOrder) { ImplementationServices.ConvertStorageToColMajorOrdered( numberOfRows, numberOfColumns, this.storage); } this.numberOfRows = numberOfRows; this.numberOfColumns = numberOfColumns; this.storageOrder = StorageOrder.ColumnMajor; this.storageScheme = StorageScheme.Dense; }
internal DenseDoubleMatrixImplementor( int numberOfRows, int numberOfColumns, IEnumerable <double> data, StorageOrder storageOrder) { Debug.Assert(numberOfRows > 0); Debug.Assert(numberOfColumns > 0); Debug.Assert(data is not null); Debug.Assert( (StorageOrder.ColumnMajor == storageOrder) || (StorageOrder.RowMajor == storageOrder)); int matrixLength = numberOfRows * numberOfColumns; Debug.Assert(data.Count() == matrixLength); double[] dataStorage = new double[matrixLength]; int l = 0; foreach (double d in data) { dataStorage[l] = d; l++; } if (StorageOrder.RowMajor == storageOrder) { ImplementationServices.ConvertStorageToColMajorOrdered( numberOfRows, numberOfColumns, dataStorage); } this.storage = dataStorage; this.numberOfRows = numberOfRows; this.numberOfColumns = numberOfColumns; this.storageOrder = StorageOrder.ColumnMajor; this.storageScheme = StorageScheme.Dense; }