Example #1
0
        public void train(int topN)
        {
            _topN = topN;
            _randomRecommends = ArrayView<string>.Create(primeNumber * topN);
            var isbns = trainData.Select(e => e.ISBN).Distinct().ToArray();

            Parallel.ForEach(Enumerable.Range(0, primeNumber), new ParallelOptions { MaxDegreeOfParallelism = 4 }, seed =>
                {
                    var rand = new Random(seed);
                    var visited = new HashSet<int>();
                    var view = _randomRecommends.SubArray(seed* topN, _topN);
                    var viewIndex = 0;
                    while (viewIndex < topN)
                    {
                        var isbnIndex = rand.Next(isbns.Length);
                        if (!visited.Add(isbnIndex))
                            continue;
                        view[viewIndex++] = isbns[isbnIndex];
                    }
                });
        }