Пример #1
0
 private void GetKeyNames(int col, ref VBuffer <ReadOnlyMemory <char> > dst)
 {
     Contracts.Assert(col == 0);
     Contracts.AssertValue(_keyNamesType);
     _keyNames.CopyTo(ref dst);
 }
Пример #2
0
 private void GetKeyNames(int col, ref VBuffer <DvText> dst)
 {
     Contracts.Assert(col == 0);
     Contracts.AssertValue(_keyNamesType);
     _keyNames.CopyTo(ref dst);
 }
Пример #3
0
 protected override void Copy(ref VBuffer <T> src, ref VBuffer <T> dst)
 {
     src.CopyTo(ref dst);
 }
        public override Delegate[] CreateGetters(IRow input, Func <int, bool> activeOutput, out Action disposer)
        {
            disposer = null;

            var getters = new Delegate[3];

            if (!activeOutput(ClusterIdCol) && !activeOutput(SortedClusterCol) && !activeOutput(SortedClusterScoreCol))
            {
                return(getters);
            }

            long             cachedPosition = -1;
            VBuffer <Single> scores         = default(VBuffer <Single>);
            var scoresArr = new Single[_numClusters];

            int[] sortedIndices = new int[_numClusters];

            var    scoreGetter         = input.GetGetter <VBuffer <Single> >(ScoreIndex);
            Action updateCacheIfNeeded =
                () =>
            {
                if (cachedPosition != input.Position)
                {
                    scoreGetter(ref scores);
                    scores.CopyTo(scoresArr);
                    int j = 0;
                    foreach (var index in Enumerable.Range(0, scoresArr.Length).OrderBy(i => scoresArr[i]))
                    {
                        sortedIndices[j++] = index;
                    }
                    cachedPosition = input.Position;
                }
            };

            if (activeOutput(ClusterIdCol))
            {
                ValueGetter <uint> assignedFn =
                    (ref uint dst) =>
                {
                    updateCacheIfNeeded();
                    dst = (uint)sortedIndices[0] + 1;
                };
                getters[ClusterIdCol] = assignedFn;
            }

            if (activeOutput(SortedClusterScoreCol))
            {
                ValueGetter <VBuffer <Single> > topKScoresFn =
                    (ref VBuffer <Single> dst) =>
                {
                    updateCacheIfNeeded();
                    var values = dst.Values;
                    if (Utils.Size(values) < _numClusters)
                    {
                        values = new Single[_numClusters];
                    }
                    for (int i = 0; i < _numClusters; i++)
                    {
                        values[i] = scores.GetItemOrDefault(sortedIndices[i]);
                    }
                    dst = new VBuffer <Single>(_numClusters, values);
                };
                getters[SortedClusterScoreCol] = topKScoresFn;
            }

            if (activeOutput(SortedClusterCol))
            {
                ValueGetter <VBuffer <uint> > topKClassesFn =
                    (ref VBuffer <uint> dst) =>
                {
                    updateCacheIfNeeded();
                    var values = dst.Values;
                    if (Utils.Size(values) < _numClusters)
                    {
                        values = new uint[_numClusters];
                    }
                    for (int i = 0; i < _numClusters; i++)
                    {
                        values[i] = (uint)sortedIndices[i] + 1;
                    }
                    dst = new VBuffer <uint>(_numClusters, values);
                };
                getters[SortedClusterCol] = topKClassesFn;
            }
            return(getters);
        }
 protected override void CopyValue(ref VBuffer <TItem> src, ref VBuffer <TItem> dst)
 {
     src.CopyTo(ref dst);
 }
Пример #6
0
 private void Getter(ref VBuffer <T> val)
 {
     _value.CopyTo(ref val);
 }
Пример #7
0
 public static void Copy(ref VBuffer <T> src, ref VBuffer <T> dst)
 {
     src.CopyTo(ref dst);
 }
Пример #8
0
                private void StddevMetadataGetter(int col, ref VBuffer <TFloat> dst)
                {
                    var src = new VBuffer <TFloat>(Stddev.Length, Stddev);

                    src.CopyTo(ref dst);
                }
Пример #9
0
                private void MeanMetadataGetter(int col, ref VBuffer <TFloat> dst)
                {
                    var src = new VBuffer <TFloat>(Mean.Length, Mean);

                    src.CopyTo(ref dst);
                }
Пример #10
0
                private void ScaleMetadataGetter(int col, ref VBuffer <TFloat> dst)
                {
                    var src = new VBuffer <TFloat>(Scale.Length, Scale);

                    src.CopyTo(ref dst);
                }