nuget server logo nuget api documents
↑

API Docs / Microsoft.VisualBasic.MachineLearning.t-SNE / RandomHelper

RandomHelper

Full name Microsoft.VisualBasic.MachineLearning.tSNE.RandomHelper Assembly Microsoft.VisualBasic.MachineLearning.t-SNE Members 5

01 Syntax

Microsoft.VisualBasic.MachineLearning.tSNE.RandomHelper

02 Methods

NameOverloadsSummary
GaussRandom 1 返回 0 均值单位标准差随机数
randn 1 return random normal number
randn2d 2 utility that returns a contiguous row-major 2d buffer filled with value s

03 Fields

NameOverloadsSummary
mSpare 1 Marsaglia polar 方法成对产出的第二个正态随机数的缓存

04 Members

method GaussRandom #
GaussRandom

返回 0 均值单位标准差随机数

Remarks

这里使用的是 Marsaglia polar 方法,每一次采样会成对地产出两个正态随机数。

原始的 JS 参考实现把第二个数字缓存在 tSNE 实例之上(mRet 与 mVal 字段), 这在并行初始化的场景下会被多个线程互相覆盖,从而产生静默的数值错误。 此处改为把缓存下沉到 RandomHelper 实例自身的字段之上, 由于 InitSolution 保持串行执行,产出的随机序列与改造前逐位一致。

底层的 RandomExtensions.NextDouble 基于 ThreadLocal(Of Random) 实现, 本身即为线程安全的。

method randn #
randn(Double, Double)

return random normal number

Parameters
NameTypeDescription
muDouble

-

stdDouble

-

method randn2d overload 2 #
randn2d(Int32, Int32)

utility that returns a contiguous row-major 2d buffer filled with random normal numbers (mu = 0, sigma = 1e-4)

Remarks

返回的是拉平之后的一维数组(行主序,索引为 i * d + j), 相比改造前的锯齿数组版本减少了 n 次小数组分配,缓存局部性更好。

Parameters
NameTypeDescription
nInt32

-

dInt32

-

method randn2d #
randn2d(Int32, Int32, Double)

utility that returns a contiguous row-major 2d buffer filled with value s

Parameters
NameTypeDescription
nInt32

-

dInt32

-

sDouble

-

field mSpare #
mSpare

Marsaglia polar 方法成对产出的第二个正态随机数的缓存