Esempio n. 1
0
        /// <summary>
        /// Returns the sampler for a specified rng, data type and distribution spec
        /// </summary>
        /// <param name="rng">The random stream</param>
        /// <param name="spec">The distribution specifier</param>
        /// <typeparam name="T">The sample point type</typeparam>
        public static ISampler <T> Sampler <T>(this MklRng rng, IDistributionSpec <T> spec)
            where T : unmanaged
        {
            var sampler = default(ISampler <T>);

            switch (spec.DistKind)
            {
            case DistKind.Uniform:
                sampler = rng.UniformSampler <T>(UniformSpec.From(spec));
                break;

            case DistKind.UniformBits:
                sampler = rng.UniformBitsSampler <T>(UniformBitsSpec.From(spec));
                break;

            case DistKind.Bernoulli:
                sampler = rng.BernoulliSampler <T>(BernoulliSpec.From(spec));
                break;

            case DistKind.Gaussian:
                sampler = rng.GaussianSampler <T>(GaussianSpec.From(spec));
                break;

            default:
                throw unsupported <T>();
            }

            return(sampler);
        }
Esempio n. 2
0
        public static ISampler <T> GaussianSampler <T>(this MklRng rng, GaussianSpec <T> spec)
            where T : unmanaged
        {
            var sampler = default(ISampler <T>);

            if (typeof(T) == typeof(float))
            {
                sampler = samplers.gaussian(rng, spec.ToFloat32()) as ISampler <T>;
            }
            else if (typeof(T) == typeof(double))
            {
                sampler = samplers.gaussian(rng, spec.ToFloat64()) as ISampler <T>;
            }
            else
            {
                throw unsupported <T>();
            }
            return(sampler);
        }
Esempio n. 3
0
 public GaussianSampler(MklRng src, GaussianSpec <T> distspec, int?buferLen = null)
     : base(src, distspec, buferLen)
 {
 }