2010-03-23 2 views
1

각 행에 요소가 들어있는 코드를 테스트하기 위해 NxN 행렬을 생성하고 최대 1 개 (즉 확률 집합의 행)를 추가해야합니다.확률로 행렬 생성

까다로운 부분은 임의로 요소 중 일부가 0이어야한다는 것입니다. 실제로 대부분의 요소는 확률이 아닌 임의의 요소를 제외하고는 0이어야합니다. 나는 1/m이 될 확률이 필요하다. 여기서 m은 단일 행 내에서 0이 아닌 원소의 수이다. 나는 이것을 출력하는 방법을 생각하려고 노력했지만 근본적으로 C++ 배열에 저장해야합니다. 그래서 파일로 출력하더라도 필자는 필자가 필요로하는 배열을 사용하지 않는 문제가 여전히 남아 있습니다. 결국 시장 매트릭스 파일을 생성하기 때문에 배열이 필요합니다. 배열을 가져 와서 시장 매트릭스 파일로 변환하는 C++의 구현을 발견했습니다. 그래서 이것이 제가 발견 한 근거입니다. 나머지 코드에 대한 필자의 의견은이 시장 매트릭스 파일을 사용하므로 출력의 기본 형식이되어야합니다. 언어는 중요하지 않다. 나는 단지 끝에있는 파일을 생성하기를 원한다. (나는 mmwrite와 mmread를 파이썬으로도 찾았다.)

제발 도와 주겠다. 어떻게 구현해야할지 모르겠다.

답변

2
import random 

N = 10 

matrix = [] 

for j in range(N): 
     t = [int(random.random()<0.6) for i in range(N)] 
     ones = t.count(1) 
     row = [float(x)/ones for x in t] if ones else t 
     matrix.append(row) 

for r in matrix: 
     print r 
+0

] 만약 다른 사람이 당신이 0.6^N 시간 안에 충돌하지 않는다면. –

+1

나는 0.6^N의 확률로 충돌하는 것을 의미합니다. 죄송합니다. –

+0

찰스 고마워! 나는 그 문제를 알고 있었지만 당신과 같은 깨끗한 해결책을 찾지 못했습니다;) 이제 끝내십시오. –

0

C 배열이나 C 배열 또는 STL vector<vector< > >을 의미합니까? 후자는 청소기, 그러나 여기에서 C 배열을 사용하는 예제입니다 것입니다 :

#include <stdlib.h> 
#include <stdio.h> 

float* makeProbabilityMatrix(int N, float zeroProbability) 
{ 
    float* matrix = (float*)malloc(N*N*sizeof(float)); 

    for (int ii = 0; ii < N; ii++) 
    { 
     int m = 0; 
     for (int jj = 0; jj < N; jj++) 
     { 
     int val = (rand()/(RAND_MAX*1.0) < zeroProbability) ? 0 : 1; 
     matrix[ii*N+jj] = val; 
     m += val; 
     } 
     for (int jj = 0; jj < N; jj++) 
     { 
     matrix[ii*N+jj] /= m; 
     } 
    } 

    return matrix; 
} 

int main() 
{ 
    srand(234); 
    int N = 10; 

    float* matrix = makeProbabilityMatrix(N, 0.70); 

    for (int ii = 0; ii < N; ii++) 
    {  
     for (int jj = 0; jj < N; jj++) 
     { 
     printf("%.2f ", matrix[ii*N+jj]); 
     } 
     printf("\n"); 
    } 

    free(matrix); 

    return 0; 
}; 

출력 :

당신은 t에서 x의 행 = [플로트 (X)/사람`에 그 라인을 변경해야
0.00 0.20 0.20 0.00 0.00 0.00 0.00 0.20 0.20 0.20 
0.25 0.00 0.00 0.00 0.00 0.25 0.00 0.25 0.25 0.00 
0.00 0.33 0.33 0.33 0.00 0.00 0.00 0.00 0.00 0.00 
0.00 0.00 0.00 0.00 0.00 0.50 0.00 0.00 0.50 0.00 
0.25 0.25 0.00 0.00 0.00 0.00 0.25 0.00 0.25 0.00 
0.00 0.25 0.00 0.00 0.00 0.25 0.25 0.00 0.25 0.00 
0.00 0.00 0.33 0.00 0.33 0.00 0.00 0.00 0.33 0.00 
0.00 0.20 0.20 0.20 0.20 0.00 0.00 0.20 0.00 0.00 
0.20 0.00 0.20 0.00 0.00 0.00 0.00 0.20 0.20 0.20 
0.00 0.00 0.00 0.00 0.00 0.50 0.00 0.50 0.00 0.00 
+0

소년, Python 구현이 확실한가? – Dewb