m3n*_*tat 2 c# arrays random random-access
我有一个双值"vals"数组,我需要随机索引到这个数组并获得一个值.GenRandomNumber()返回0和1,但从来没有0或1.我使用Convert.ToInt32基本上得到一切我小数点左边的数字,但必须有这样做的更有效的方法?
这是我的代码:
public double GetRandomVal()
{
int z = Convert.ToInt32(GenRandomNumber() * (vals.Length));
return vals[z];
}
Run Code Online (Sandbox Code Playgroud)
谢谢
更新
感谢所有回复的人,但我不得不使用提供方法rand.NextDouble()的MersenneTwister随机数实现
更新2
再考虑一下,我需要做的就是生成0和array.length-1之间的随机数,然后使用它随机索引到数组中.vals长度为2 ^ 20 = 1048576,因此生成随机int就足够了.我注意到我的MersenneTwister有一个方法:
public int Next(int maxValue)
Run Code Online (Sandbox Code Playgroud)
如果我把它称为vals [rand.Next(vals.length-1)]那应该做对吗?我也看到MersenneTwister有一个构造函数:
public MersenneTwister(int[] init)
Run Code Online (Sandbox Code Playgroud)
不知道这是为了什么,我可以用它来预先填充我提供0到vals.length数组的可接受的随机数吗?
FYI vals是一个长度为1048576的双重数组,用于划分正态分布曲线.我基本上使用这种机制来尽可能快地创建正态分布的数字,monte carlo模拟每天使用数十亿个正态分布的随机数,所以每一点都有帮助.
请尝试使用随机整数:
Random random = new Random();
int randomNumber = random.Next(0, vals.Length);
return vals[randomNumber];
Run Code Online (Sandbox Code Playgroud)