2013-10-29 119 views
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; 
    } 

} 

我具有由150行構建50列的隨機矩陣M。矩陣中的值爲{-1/√ 50, 1/√ 50},每個值的概率爲50%。

我如何通過幫助下面的代碼來做到這一點?

+3

我的家庭作業感是刺痛的。 – christopher

+0

我的太..有時它讓我咬。 – Maroun

回答

2

對於每一個你需要生成執行此號碼:

  • 生成0到99之間(含)一個randum數。
  • 如果編號爲< 50,則使用第一個值
  • 否則使用第二個值。

該算法可以應用於所有整數百分比值,並可以很容易地擴展到兩個以上的選項。

當然,在您的特定情況下,您可以簡化算法以生成介於0和1(含)之間的隨機數,因爲您只有2個等權重選項,但上面顯示的選項是更一般的選項更一般的情況是使用0到1之間的浮點數(獨佔))。

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; 
    } 
} 
+0

非常感謝,接下來的事情是: –

+0

變形的一對點xi,xj是: | 1 - (| | xi-xj | | 2/| | xi'-xj'| | 2)| 找到具有最大扭曲的點對,並打印出扭曲。我可以在java中實現嗎? –