public void Gaussian( int sampleSize, double[] destinationArray, int destinationIndex, double mu, double sigma) { ProbabilityDistribution.ValidateSampleInput( sampleSize, destinationArray, destinationIndex); if (sigma <= 0) { throw new ArgumentOutOfRangeException(nameof(sigma), ImplementationServices.GetResourceString( "STR_EXCEPT_PAR_MUST_BE_POSITIVE")); } unsafe { fixed(double *destinationPointer = &destinationArray[destinationIndex]) { SafeNativeMethods.VSL.vdRngGaussian( 0, this.descriptor.DangerousGetHandle().ToPointer(), sampleSize, destinationPointer, mu, sigma); } } }
public void Uniform( int sampleSize, double[] destinationArray, int destinationIndex, double lowerBound, double upperBound) { ProbabilityDistribution.ValidateSampleInput( sampleSize, destinationArray, destinationIndex); UniformDistribution.ValidateBounds( lowerBound, upperBound); unsafe { fixed(double *destinationPointer = &destinationArray[destinationIndex]) { SafeNativeMethods.VSL.vdRngUniform( 0, this.descriptor.DangerousGetHandle().ToPointer(), sampleSize, destinationPointer, lowerBound, upperBound); } } }
internal static void ValidateSampleInput( int sampleSize, int[] destinationArray, int destinationIndex) { ProbabilityDistribution.ValidateSampleInput(sampleSize); if (destinationArray is null) { throw new ArgumentNullException(nameof(destinationArray)); } if (destinationIndex < 0) { throw new ArgumentOutOfRangeException(nameof(destinationIndex), ImplementationServices.GetResourceString( "STR_EXCEPT_PAR_MUST_BE_NON_NEGATIVE")); } int length = destinationArray.Length; if (sampleSize > (length - destinationIndex)) { throw new ArgumentException( string.Format( CultureInfo.InvariantCulture, ImplementationServices.GetResourceString( "STR_EXCEPT_PDF_SAMPLESIZE_ARRAYLENGTH_MISMATCH"), nameof(sampleSize), nameof(destinationArray), nameof(destinationIndex)), nameof(sampleSize)); } }
/// <summary> /// Draws a sample from this instance having the specified size /// and returns it /// in a destination array. /// </summary> /// <param name="sampleSize">The sample size.</param> /// <param name="destinationArray">The destination array that /// receives the sampled data.</param> /// <param name="destinationIndex">The index in /// <paramref name="destinationArray"/> at which storing /// begins.</param> /// <exception cref="ArgumentNullException"> /// <paramref name="destinationArray"/> is <b>null</b>. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="sampleSize"/> is not positive.<br/> /// -or-<br/> /// <paramref name="destinationIndex"/> is negative. /// </exception> /// <exception cref="ArgumentException"> /// Parameter <paramref name="sampleSize"/> must be less than or /// equal to the /// difference between the length of /// parameter <paramref name="destinationArray"/> and /// <paramref name="destinationIndex"/>. /// </exception> public void Sample( int sampleSize, double[] destinationArray, int destinationIndex) { ProbabilityDistribution.ValidateSampleInput( sampleSize, destinationArray, destinationIndex); this.OnSample(sampleSize, destinationArray, destinationIndex); }
/// <summary> /// Draws a sample from this instance having the specified size /// and returns it as a matrix. /// </summary> /// <param name="sampleSize">The sample size.</param> /// <returns>The matrix whose entries store the sample.</returns> /// <remarks> /// <para> /// The returned matrix has one column and a number of rows /// equal to <paramref name="sampleSize"/>. /// </para> /// </remarks> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="sampleSize"/> is not positive. /// </exception> public DoubleMatrix Sample(int sampleSize) { ProbabilityDistribution.ValidateSampleInput(sampleSize); DoubleMatrix results = DoubleMatrix.Dense( sampleSize, 1); double[] resultsArray = results.GetStorage(); this.OnSample(sampleSize, resultsArray, 0); return(results); }
public void DefaultUniform( int sampleSize, double[] destinationArray, int destinationIndex) { ProbabilityDistribution.ValidateSampleInput( sampleSize, destinationArray, destinationIndex); unsafe { fixed(double *destinationPointer = &destinationArray[destinationIndex]) { SafeNativeMethods.VSL.vdRngUniform( 0, this.descriptor.DangerousGetHandle().ToPointer(), sampleSize, destinationPointer, 0.0, 1.0); } } }