public static IEnumerable <T> Serialize <T>(this IMultiIndexable <T> nddata, IEnumerable <int[]> indexOrder) { int rank = nddata.Sizes.Size; if (rank == 0) { yield return(nddata.GetElement()); } else { var dsindex = new DimSpec[rank]; foreach (var index in indexOrder) { if (index == null) { throw new ArgumentException("index enumeration returned null index"); } if (index.Length != dsindex.Length) { throw new ArgumentException("index enumeration returned index of wrong rank"); } for (int i = 0; i < index.Length; i++) { dsindex[i] = index[i]; } yield return(nddata[dsindex].GetElement()); } } }
public BoxAsMatrix(IMultiIndexable <T> source) { Contract.Requires <ArgumentNullException>(source != null, "source"); Contract.Requires <ArgumentException>(source.Sizes.Size == 2, "source is not rank 2"); _source = source; }
public BoxTransposition(IMultiIndexable <T> source, int[] newDimensions) { Contract.Requires <ArgumentNullException>(source != null, "source"); Contract.Requires <ArgumentNullException>(newDimensions != null, "newDimensions"); Contract.Requires <ArgumentException>(newDimensions.Length >= 1, "newDimensions must contain at least one element."); Contract.Requires <ArgumentOutOfRangeException>( newDimensions.OrderBy(x => x).Equals(Enumerable.Range(0, source.Sizes.Size)), "newDimensions is not a permutation of source rank elements."); _source = source; _newDimensions = (int[])newDimensions.Clone(); }
public static Box <T> AsBox <T>(this IMultiIndexable <T> nddata) { var box = nddata as Box <T>; if (box == null) { return(new BoxWrapper <T>(nddata)); } else { return(box); } }
public static Matrix <T> AsMatrix <T>(IMultiIndexable <T> nddata) { return(new BoxAsMatrix <T>(nddata)); }
public static Vector <T> AsVector <T>(this IMultiIndexable <T> nddata) { return(new BoxAsVector <T>(nddata)); }
public SelectBox(IMultiIndexable <TSource> source, Func <TSource, TTarget> selector) { _source = source; _selector = selector; }
public BoxWrapper(IMultiIndexable <T> nddata) { _nddata = nddata; }
public static IEnumerable <T> Enumerate <T>(this IMultiIndexable <T> nddata) { Contract.Requires <ArgumentNullException>(nddata != null, "nddata"); return(Serialize(nddata, EnumerateFromLoToHi(nddata.Sizes.ToArray()))); }
public static Box <TTarget> Select <TSource, TTarget>(this IMultiIndexable <TSource> nddata, Func <TSource, TTarget> selector) { return(new SelectBox <TSource, TTarget>(nddata, selector)); }
public static Box <T> Transpose <T>(this IMultiIndexable <T> nddata, params int[] newDimensions) { return(new BoxTransposition <T>(nddata, newDimensions)); }