private DataViewRowCursor GetRowCursor(IEnumerable <DataViewSchema.Column> columnsNeeded, Random rand,
                                                   DelegateGetRowCursor getterCursor)
            {
                int index = SchemaHelper.GetColumnIndex(Source.Schema, _parent.InputName);

                if (columnsNeeded.Where(c => c.Index == index).Any())
                {
                    var newCols = SchemaHelper.ColumnsNeeded(columnsNeeded, Schema, index, Schema.Count);
                    var oldCols = SchemaHelper.ColumnsNeeded(newCols, Source.Schema);
                    var cursor  = getterCursor(oldCols, rand);
                    return(new MemoryCursor <TSrc, TDst>(this, cursor, index));
                }
                else
                {
                    // The new column is not required. We do not need to compute it. But we need to keep the same schema.
                    return(new SameCursor(getterCursor(columnsNeeded, rand), Schema));
                }
            }
예제 #2
0
        private DataViewRowCursor GetRowCursor(IEnumerable <DataViewSchema.Column> columnsNeeded, Random rand,
                                               DelegateGetRowCursor getterCursor)
        {
            ComputeNearestNeighbors();
            _host.AssertValue(_input, "_input");
            var schema = _input.Schema;

            if (columnsNeeded.Where(c => c.Index == _input.Schema.Count).Any())
            {
                var newColumns   = PredicatePropagation(columnsNeeded);
                var oldCols      = SchemaHelper.ColumnsNeeded(newColumns, schema);
                var featureIndex = SchemaHelper.GetColumnIndexDC(Schema, _args.column);
                return(new NearestNeighborsCursor(getterCursor(oldCols, rand), this, newColumns, featureIndex));
            }
            else
            {
                // The new column is not required. We do not need to compute it. But we need to keep the same schema.
                var oldCols = SchemaHelper.ColumnsNeeded(columnsNeeded, schema);
                return(new SameCursor(getterCursor(oldCols, rand), Schema));
            }
        }
            private DataViewRowCursor GetRowCursor(IEnumerable <DataViewSchema.Column> columnsNeeded, Random rand,
                                                   DelegateGetRowCursor getterCursor)
            {
                var kind = _toShake[0].OutputType.IsVector()
                                ? _toShake[0].OutputType.ItemType().RawKind()
                                : _toShake[0].OutputType.RawKind();

                var newCols = PredicatePropagation(columnsNeeded);
                var oldCols = SchemaHelper.ColumnsNeeded(newCols, _input.Schema);

                switch (kind)
                {
                case DataKind.Single:
                    var cursor = getterCursor(oldCols, rand);
                    return(new ShakeInputCursor <TInput, float>(this, cursor, newCols, _args, _inputCol, _toShake, _shakingValues,
                                                                (float x, float y) => { return x + y; }));

                default:
                    throw _host.Except("Not supported RawKind {0}", _toShake[0].OutputType.RawKind());
                }
            }
        private DataViewRowCursor GetRowCursor(IEnumerable <DataViewSchema.Column> columnsNeeded, Random rand,
                                               DelegateGetRowCursor getterCursor)
        {
            int classColumn = -1;

            if (!string.IsNullOrEmpty(_args.column))
            {
                classColumn = SchemaHelper.GetColumnIndex(_input.Schema, _args.column);
            }
            if (_args.cache)
            {
                LoadCache(rand);
            }
            else
            {
                Contracts.Assert(_cacheReplica == null);
            }
            var cursor = getterCursor(columnsNeeded, rand);

            if (classColumn == -1)
            {
                return(new ResampleCursor <float>(this, cursor, columnsNeeded, _args.lambda,
                                                  _args.seed, rand, _cacheReplica, SchemaHelper._dc(classColumn, cursor),
                                                  float.NaN));
            }

            var newColumns = columnsNeeded.ToList();

            newColumns.Add(Schema.Where(c => c.Index == classColumn).First());

            var type = _input.Schema[classColumn].Type;

            switch (type.RawKind())
            {
            case DataKind.Boolean:
                bool clbool;
                if (!bool.TryParse(_args.classValue, out clbool))
                {
                    throw _host.Except("Unable to parse '{0}'.", _args.classValue);
                }
                return(new ResampleCursor <bool>(this, cursor, newColumns,
                                                 _args.lambda, _args.seed, rand, _cacheReplica,
                                                 SchemaHelper._dc(classColumn, cursor), clbool));

            case DataKind.UInt32:
                uint cluint;
                if (!uint.TryParse(_args.classValue, out cluint))
                {
                    throw _host.Except("Unable to parse '{0}'.", _args.classValue);
                }
                return(new ResampleCursor <uint>(this, cursor, newColumns,
                                                 _args.lambda, _args.seed, rand, _cacheReplica,
                                                 SchemaHelper._dc(classColumn, cursor), cluint));

            case DataKind.Single:
                float clfloat;
                if (!float.TryParse(_args.classValue, out clfloat))
                {
                    throw _host.Except("Unable to parse '{0}'.", _args.classValue);
                }
                return(new ResampleCursor <float>(this, cursor, newColumns,
                                                  _args.lambda, _args.seed, rand, _cacheReplica,
                                                  SchemaHelper._dc(classColumn, cursor), clfloat));

            case DataKind.String:
                var cltext = new ReadOnlyMemory <char>(_args.classValue.ToCharArray());
                return(new ResampleCursor <ReadOnlyMemory <char> >(this, cursor, newColumns,
                                                                   _args.lambda, _args.seed, rand, _cacheReplica,
                                                                   SchemaHelper._dc(classColumn, cursor), cltext));

            default:
                throw _host.Except("Unsupported type '{0}'", type);
            }
        }