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)); }
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)); }