public RowCursor(IChannelProvider provider, Bindings bindings, IRowCursor input, bool[] active) : base(provider, input) { Ch.CheckValue(bindings, nameof(bindings)); Ch.CheckValue(input, nameof(input)); Ch.CheckParam(active == null || active.Length == bindings.ColumnCount, nameof(active)); _bindings = bindings; _active = active; var length = _bindings.InfoCount; _getters = new Delegate[length]; _values = new Float[length]; _rngs = new TauswortheHybrid[length]; _lastCounters = new long[length]; for (int iinfo = 0; iinfo < length; iinfo++) { _getters[iinfo] = _bindings.UseCounter[iinfo] ? MakeGetter() : (Delegate)MakeGetter(iinfo); if (!_bindings.UseCounter[iinfo] && IsColumnActive(_bindings.MapIinfoToCol(iinfo))) { _rngs[iinfo] = new TauswortheHybrid(_bindings.States[iinfo]); _lastCounters[iinfo] = -1; } } }
public TransformInfo(IHostEnvironment env, ModelLoadContext ctx, string directoryName) { env.AssertValue(env); // *** Binary format *** // int: d (number of untransformed features) // int: NewDim (number of transformed features) // bool: UseSin // uint[4]: the seeds for the pseudo random number generator. SrcDim = ctx.Reader.ReadInt32(); NewDim = ctx.Reader.ReadInt32(); env.CheckDecode(NewDim > 0); _useSin = ctx.Reader.ReadBoolByte(); var length = ctx.Reader.ReadInt32(); env.CheckDecode(length == 4); _state = TauswortheHybrid.State.Load(ctx.Reader); _rand = new TauswortheHybrid(_state); env.CheckDecode(ctx.Repository != null && ctx.LoadModelOrNull <IFourierDistributionSampler, SignatureLoadModel>(env, out _matrixGenerator, directoryName)); // initialize the transform matrix int roundedUpD = RoundUp(NewDim, _cfltAlign); int roundedUpNumFeatures = RoundUp(SrcDim, _cfltAlign); RndFourierVectors = new AlignedArray(roundedUpD * roundedUpNumFeatures, CpuMathUtils.GetVectorAlignment()); RotationTerms = _useSin ? null : new AlignedArray(roundedUpD, CpuMathUtils.GetVectorAlignment()); InitializeFourierCoefficients(roundedUpNumFeatures, roundedUpD); }
public TransformInfo(IHost host, ColumnInfo column, int d, float avgDist) { Contracts.AssertValue(host); SrcDim = d; NewDim = column.NewDim; host.CheckUserArg(NewDim > 0, nameof(column.NewDim)); _useSin = column.UseSin; var seed = column.Seed; _rand = seed.HasValue ? RandomUtils.Create(seed) : RandomUtils.Create(host.Rand); _state = _rand.GetState(); var generator = column.Generator; _matrixGenerator = generator.CreateComponent(host, avgDist); int roundedUpD = RoundUp(NewDim, _cfltAlign); int roundedUpNumFeatures = RoundUp(SrcDim, _cfltAlign); RndFourierVectors = new AlignedArray(roundedUpD * roundedUpNumFeatures, CpuMathUtils.GetVectorAlignment()); RotationTerms = _useSin ? null : new AlignedArray(roundedUpD, CpuMathUtils.GetVectorAlignment()); InitializeFourierCoefficients(roundedUpNumFeatures, roundedUpD); }
public TransformInfo(IHost host, Column item, Arguments args, int d, Float avgDist) { Contracts.AssertValue(host); SrcDim = d; NewDim = item.NewDim ?? args.NewDim; host.CheckUserArg(NewDim > 0, nameof(item.NewDim)); _useSin = item.UseSin ?? args.UseSin; var seed = item.Seed ?? args.Seed; _rand = seed.HasValue ? RandomUtils.Create(seed) : RandomUtils.Create(host.Rand); _state = _rand.GetState(); var sub = item.MatrixGenerator; if (!sub.IsGood()) { sub = args.MatrixGenerator; } _matrixGenerator = sub.CreateInstance(host, avgDist); int roundedUpD = RoundUp(NewDim, CfltAlign); int roundedUpNumFeatures = RoundUp(SrcDim, CfltAlign); RndFourierVectors = new AlignedArray(roundedUpD * roundedUpNumFeatures, CpuMathUtils.Vector128Alignment); RotationTerms = _useSin ? null : new AlignedArray(roundedUpD, CpuMathUtils.Vector128Alignment); InitializeFourierCoefficients(roundedUpNumFeatures, roundedUpD); }
private void EnsureValue(ref long lastCounter, ref Float value, TauswortheHybrid rng) { Ch.Assert(lastCounter <= Input.Position); while (lastCounter < Input.Position) { value = rng.NextSingle(); lastCounter++; } }
protected override IRowCursor GetRowCursorCore(Func <int, bool> predicate, IRandom rand = null) { // We do not use the input random because this cursor does not support shuffling. var rgen = new TauswortheHybrid(_state); var input = Source.GetRowCursor(predicate, _shuffleInput ? new TauswortheHybrid(rgen) : null); IRowCursor cursor = new RowCursor(this, input, rgen); if (_poolSize > 1) { cursor = ShuffleTransform.GetShuffledCursor(Host, _poolSize, cursor, new TauswortheHybrid(rgen)); } return(cursor); }
protected override DataViewRowCursor GetRowCursorCore(IEnumerable <DataViewSchema.Column> columnsNeeded, Random rand = null) { // We do not use the input random because this cursor does not support shuffling. var rgen = new TauswortheHybrid(_state); var input = Source.GetRowCursor(columnsNeeded, _shuffleInput ? new TauswortheHybrid(rgen) : null); DataViewRowCursor cursor = new Cursor(this, input, rgen); if (_poolSize > 1) { cursor = RowShufflingTransformer.GetShuffledCursor(Host, _poolSize, cursor, new TauswortheHybrid(rgen)); } return(cursor); }