Java 根据位置值从矩阵中随机选择位置
我有一个XxY矩阵(所以它是2D),填充了基于这个公式的值,现在f是200: 随机发生器((f*10)+(f/2))+1 RandomGenerator是Java.util.random类中的随机数生成器 我想从矩阵中随机选取一个位置,如[2;6],并向用户显示输出,但我希望随机性取决于位置的值。如果该值较高,则其被拾取以显示的机会也较高。现在它只是显示一个随机位置Java 根据位置值从矩阵中随机选择位置,java,matrix,random,Java,Matrix,Random,我有一个XxY矩阵(所以它是2D),填充了基于这个公式的值,现在f是200: 随机发生器((f*10)+(f/2))+1 RandomGenerator是Java.util.random类中的随机数生成器 我想从矩阵中随机选取一个位置,如[2;6],并向用户显示输出,但我希望随机性取决于位置的值。如果该值较高,则其被拾取以显示的机会也较高。现在它只是显示一个随机位置 我如何才能做到这一点?这可能会对您有所帮助: 这显示了矩阵是如何创建的,可以帮助您确定随机选择正方形的方法 (假设您使用的是ma
我如何才能做到这一点?这可能会对您有所帮助: 这显示了矩阵是如何创建的,可以帮助您确定随机选择正方形的方法
(假设您使用的是matrix类)解决此问题的标准方法是:
0
到1
2 6 8
归一化矩阵:
0.125 0.375 0.5
因此,通过生成随机值[0-1]
您将选择
position `0` 12.5% of time
position `1` 37.5% of time
position `2` 50% of time
下面是同一个应用程序,它显示了该示例的工作原理:
public static void main(final String[] args) {
final double[] original = new double[] { 2.0, 6.0, 8.0 };
final double[] normalized = getNormalized(original);
final int[] positionPicked = new int[original.length];
final Random rnd = new Random();
for (int i = 0; i < 10000; i++) {
final double d = rnd.nextDouble();
final int position = getPosition(normalized, d);
positionPicked[position]++;
}
for (final int p : positionPicked)
System.out.println(p);
}
static double[] getNormalized(final double[] original) {
double s = 0.0;
for (final double e : original)
s += e;
final double[] normalized = new double[original.length];
for (int i = 0; i < original.length; i++)
normalized[i] = original[i] / s;
return normalized;
}
static int getPosition(final double[] normalized, final double v) {
double s = 0;
for (int i = 0; i < normalized.length; i++) {
s += normalized[i];
if (s >= v)
return i;
}
return normalized.length - 1;
}
让我们假设你有一个数字列表。您可以计算列表和二维矩阵之间的转换 让我们假设选取一个元素的概率是成比例的。 你有这个矩阵
482
759
123
您可以找到一种迭代制作列表的方法,例如4,8,2,7,5,9,1,2,3 迭代生成累积和时
4、12、14、21、26、35、36、38、41 然后在sum*rand()范围内选择一个数字,这里是0-41 累积和中大于随机数的第一项是您选择的单元格
如果你想成反比,那就做1/x值的累积和。你可以这样使用任何有值函数。我没有使用我使用的矩阵类
field=new int[x][y]
我认为这不会是随机的。它总是会上升到最高值,如果我不这样做,它就会停止mistake@BRHSM这将是随机的,它将在最高值之前停止让我测试一下BRBOkey,所以我得到了你,直到你开始用0-1做事情。你能再解释一下吗?在你的最后一步中,我如何使用1-0来获得选择该位置的机会,以及我如何在代码中写出你在矩阵中的数字范围是多少?0到100?按照现在的测试,它的范围是1到2100,f是200位,可能会上升。我不想要这个值。我想要它现在的位置。该值仅与被拾取的机会相似
482
759
123