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 列 x 150 行のランダム行列 M を作成する必要があります。行列の値は で、{-1 / √ 50, 1 / √ 50}各値の確率は 50% です。

以下のコードを使用して、どうすればそれを行うことができますか?

4

2 に答える 2

2

生成する必要がある数値ごとに、これを実行します。

  • 0 から 99 (両端を含む) の間の乱数を生成します。
  • 数値が 50 未満の場合は、最初の値を使用します
  • それ以外の場合は、2 番目の値を使用します。

このアルゴリズムは、すべての整数パーセント値に適用でき、3 つ以上のオプションに簡単に拡張できます。

もちろん、あなたの特定のケースでは、アルゴリズムを単純化して 0 から 1 までの乱数を生成することができます。 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 に答える