public static void ArraySet <[AnyPrimitive] TScalar>( MFullArray <TScalar> array, int index, TScalar value) { Contract.Requires(array != null); if (index < 1) { throw new ArgumentOutOfRangeException("index"); } if (index > array.Count) { // Must resize, only works if the array is empty, a scalar or a vector // - Empty, scalar or row vector: grows in columns // - Column vector: grows in rows // - Otherwise: throws if (array.IsHigherDimensional) { throw new ArgumentOutOfRangeException("index"); } else if (array.RowCount <= 1) { array.Resize(new MArrayShape(1, index)); } else if (array.ColumnCount == 1) { array.Resize(new MArrayShape(index, 1)); } else { throw new ArgumentOutOfRangeException("index"); } } array[index - 1] = value; }
public static void ArraySet <[AnyPrimitive] TScalar>( MFullArray <TScalar> array, int rowIndex, int columnIndex, TScalar value) { // Performance critical method! Contract.Requires(array != null); if (rowIndex < 1) { throw new ArgumentOutOfRangeException("rowIndex"); } if (columnIndex < 1) { throw new ArgumentOutOfRangeException("columnIndex"); } int rowCount = array.shape.RowCount; if (rowIndex > array.RowCount || columnIndex > array.ColumnCount) { // Array needs resizing // TODO: zeros(2, 2, 2) (3, 3) = 5 should work and produce a 3x2x2 matrix if (array.IsHigherDimensional) { throw new ArgumentOutOfRangeException(); } if (rowIndex > rowCount) { rowCount = rowIndex; } int columnCount = Math.Max(array.shape.ColumnCount, columnIndex); array.Resize(new MArrayShape(rowCount, columnCount)); } array.elements[(columnIndex - 1) * rowCount + (rowIndex - 1)] = value; }
public static void ArraySet <[AnyPrimitive] TScalar>( MFullArray <TScalar> array, double rowIndex, double columnIndex, TScalar value) { // Performance critical method! Contract.Requires(array != null); int rowIndexInt = ToInt(rowIndex); if (rowIndexInt < 1) { throw new ArgumentOutOfRangeException("rowIndex"); } int rowCount = array.shape.RowCount; int columnIndexInt = ToInt(columnIndex); if (rowIndexInt > rowCount || columnIndexInt > array.shape.ColumnCount) { if (array.shape.IsHigherDimensional) { throw new ArgumentOutOfRangeException(); } if (rowIndexInt > rowCount) { rowCount = rowIndexInt; } int columnCount = Math.Max(array.shape.ColumnCount, columnIndexInt); array.Resize(new MArrayShape(rowCount, columnCount)); } array.elements[(columnIndexInt - 1) * rowCount + (rowIndexInt - 1)] = value; }