Beispiel #1
0
        public Dataset Generate(int length)
        {
            var dataArray = new Data[length];

            for (int i = 0; i < length; i++)
            {
                var input = new ShapedArray <double>(InputShape, () => GRandom.Uniform() < 0.5 ? 0.0 : 1.0);

                int oneCount = 0;

                input.ForEach(X => oneCount += X == 1.0 ? 1 : 0);

                bool isEven = oneCount % 2 == 0;

                double[] outArr;

                if (IsBinary)
                {
                    outArr = isEven ? new double[] { 1.0, 0.0 } : new double[] { 0.0, 1.0 };
                }
                else
                {
                    outArr = isEven ? new double[] { 1.0 } : new double[] { 0.0 };
                }

                dataArray[i] = new Data(input, ShapedArray <double> .FromRef(TargetShape, outArr));
            }

            return(Dataset.FromRef(dataArray));
        }
Beispiel #2
0
        public static ShapedArray <T> PadArray <T>(ShapedArray <T> array, Array <int> paddings, Func <T> padVal)
        {
            if (array.Shape.Rank != paddings.Length)
            {
                throw new RankException(nameof(array));
            }

            Shape paddedShape = array.Shape.Pad(paddings);

            var internalArray = new T[paddedShape.Volume];

            IndexGen.ByStart(array.Shape, paddings).ForEach((idx, i) => internalArray[paddedShape.FlattenIndices(idx)] = array[i]);

            for (int i = 0; i < internalArray.Length; i++)
            {
                internalArray[i] ??= padVal();
            }

            return(ShapedArray <T> .FromRef(paddedShape, internalArray));
        }