예제 #1
0
        public void TestConvertWorkout()
        {
            var data = new[] { new TestClass()
                               {
                                   A = 1, B = new int[2] {
                                       1, 4
                                   }
                               },
                               new TestClass()
                               {
                                   A = 2, B = new int[2] {
                                       3, 4
                                   }
                               } };
            var dataView = ML.Data.ReadFromEnumerable(data);
            var pipe     = new TypeConvertingEstimator(Env, columns: new[] { new TypeConvertingTransformer.ColumnInfo("ConvA", DataKind.R4, "A"),
                                                                             new TypeConvertingTransformer.ColumnInfo("ConvB", DataKind.R4, "B") });

            TestEstimatorCore(pipe, dataView);
            var allTypesData = new[]
            {
                new TestPrimitiveClass()
                {
                    AA = new [] { "a", "b" },
                    AB = new [] { false, true },
                    AC = new [] { -1, 1 },
                    AD = new uint[] { 0, 1 },
                    AE = new byte[] { 0, 1 },
                    AF = new sbyte[] { -1, 1 },
                    AG = new short[] { -1, 1 },
                    AH = new ushort[] { 0, 1 },
                    AK = new long[] { -1, 1 },
                    AL = new ulong[] { 0, 1 },
                    AM = new float[] { 1.0f, 1.0f, },
                    AN = new double[] { 1.0d, 1.0d, }
                },
                new TestPrimitiveClass()
                {
                    AA = new [] { "0", "1" },
                    AB = new [] { false, true },
                    AC = new [] { int.MinValue, int.MaxValue },
                    AD = new uint[] { uint.MinValue, uint.MaxValue },
                    AE = new byte[] { byte.MinValue, byte.MaxValue },
                    AF = new sbyte[] { sbyte.MinValue, sbyte.MaxValue },
                    AG = new short[] { short.MinValue, short.MaxValue },
                    AH = new ushort[] { ushort.MinValue, ushort.MaxValue },
                    AK = new long[] { long.MinValue, long.MaxValue },
                    AL = new ulong[] { ulong.MinValue, ulong.MaxValue },
                    AM = new float[] { float.MinValue, float.MaxValue, },
                    AN = new double[] { double.MinValue, double.MaxValue, }
                }
            };

            var allTypesDataView = ML.Data.ReadFromEnumerable(allTypesData);
            var allTypesPipe     = new TypeConvertingEstimator(Env, columns: new[] {
                new TypeConvertingTransformer.ColumnInfo("ConvA", DataKind.R4, "AA"),
                new TypeConvertingTransformer.ColumnInfo("ConvB", DataKind.R4, "AB"),
                new TypeConvertingTransformer.ColumnInfo("ConvC", DataKind.R4, "AC"),
                new TypeConvertingTransformer.ColumnInfo("ConvD", DataKind.R4, "AD"),
                new TypeConvertingTransformer.ColumnInfo("ConvE", DataKind.R4, "AE"),
                new TypeConvertingTransformer.ColumnInfo("ConvF", DataKind.R4, "AF"),
                new TypeConvertingTransformer.ColumnInfo("ConvG", DataKind.R4, "AG"),
                new TypeConvertingTransformer.ColumnInfo("ConvH", DataKind.R4, "AH"),
                new TypeConvertingTransformer.ColumnInfo("ConvK", DataKind.R4, "AK"),
                new TypeConvertingTransformer.ColumnInfo("ConvL", DataKind.R4, "AL"),
                new TypeConvertingTransformer.ColumnInfo("ConvM", DataKind.R4, "AM"),
                new TypeConvertingTransformer.ColumnInfo("ConvN", DataKind.R4, "AN")
            }
                                                               );

            TestEstimatorCore(allTypesPipe, allTypesDataView);

            var outputPath = GetOutputPath("Convert", "Types.tsv");

            using (var ch = Env.Start("save"))
            {
                var saver = new TextSaver(Env, new TextSaver.Arguments {
                    Silent = true
                });
                var savedData = TakeFilter.Create(Env, allTypesPipe.Fit(allTypesDataView).Transform(allTypesDataView), 2);
                using (var fs = File.Create(outputPath))
                    DataSaverUtils.SaveDataView(ch, saver, savedData, fs, keepHidden: true);
            }

            CheckEquality("Convert", "Types.tsv");
            Done();
        }