Exemplo n.º 1
0
        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());
                }
            }
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
 public static Matrix <T> AsMatrix <T>(IMultiIndexable <T> nddata)
 {
     return(new BoxAsMatrix <T>(nddata));
 }
Exemplo n.º 6
0
 public static Vector <T> AsVector <T>(this IMultiIndexable <T> nddata)
 {
     return(new BoxAsVector <T>(nddata));
 }
Exemplo n.º 7
0
 public SelectBox(IMultiIndexable <TSource> source, Func <TSource, TTarget> selector)
 {
     _source   = source;
     _selector = selector;
 }
Exemplo n.º 8
0
 public BoxWrapper(IMultiIndexable <T> nddata)
 {
     _nddata = nddata;
 }
Exemplo n.º 9
0
        public static IEnumerable <T> Enumerate <T>(this IMultiIndexable <T> nddata)
        {
            Contract.Requires <ArgumentNullException>(nddata != null, "nddata");

            return(Serialize(nddata, EnumerateFromLoToHi(nddata.Sizes.ToArray())));
        }
Exemplo n.º 10
0
 public static Box <TTarget> Select <TSource, TTarget>(this IMultiIndexable <TSource> nddata, Func <TSource, TTarget> selector)
 {
     return(new SelectBox <TSource, TTarget>(nddata, selector));
 }
Exemplo n.º 11
0
 public static Box <T> Transpose <T>(this IMultiIndexable <T> nddata, params int[] newDimensions)
 {
     return(new BoxTransposition <T>(nddata, newDimensions));
 }