0

我有这个代码:

import java.util.Random;

public class Vectors {

    public static int[][] vectors() {
        return vectors(200,150,12345);
    }

    // the function creates an array of vectors
    // size is the number of vectors
    // dim is the dimension
    // seed is for the random number generator
    //
    public static int[][] vectors(int size, int dimension, int seed) {

        Random rng = new Random(seed);
        int[][] answer = new int[size][dimension];

        for(int i=0; i<size; i++) {
            for(int j=0; j<dimension; j++) {
                answer[i][j] = rng.nextInt(20) - 10;
            }
        }

        return answer;
    }

}

我必须构建一个 50 列乘 150 行的随机矩阵 M。矩阵中的值为{-1 / √ 50, 1 / √ 50},每个值的概率为 50%。

我怎样才能通过帮助下面的代码来做到这一点?

4

2 回答 2

2

对于您需要生成的每个数字,请执行以下操作:

  • 生成一个介于 0 和 99(含)之间的随机数。
  • 如果数字 < 50,则使用第一个值
  • 否则使用第二个值。

该算法可以应用于所有整数百分比值,并且可以轻松扩展到两个以上的选项。

当然,在您的特定情况下,您可以简化算法以生成介于 0 和 1(含)之间的随机数,因为您只有 2 个等权重的选项,但我在上面显示的选项是更通用的选项(甚至更通用使用 0 到 1 之间的浮点数(不包括)。

于 2013-10-29T09:58:45.880 回答
0
import java.util.Random;
import java.lang.Math;

public class Vectors {

    public static int[][] vectors() {
        return vectors(200,150);
    }

    public static int[][] vectors(int size, int dimension) {

        Random rng = new Random();
        int[][] answer = new int[size][dimension];
        int rand;

        for(int i=0; i<size; i++) {
            for(int j=0; j<dimension; j++) {
                rand = rng.nextInt(2);
                answer[i][j] = (rand == 0) ? (-1.0/Math.sqrt(50)) : (1.0/Math.sqrt(50));
            }
        }

        return answer;
    }
}
于 2013-10-29T10:04:30.413 回答