2014-11-24 4 views
1

명시 적으로 무엇을 하려는지 문제가있어 정교하게 처리 할 것입니다. 나는 행렬 A (n은 n)를 가지고, 오직 0과 1을 갖는다. 이제 내가하려는 것은 무작위로 열 중 하나를 선택하는 것입니다 (1에서 n까지).하지만 열에 더 많은 열이있을수록 그 열을 선택해야 할 가능성이 커집니다. 내가값의 가중치에 따라 임의로 열 인덱스를 선택하십시오.

나에게 0 1.이 N에 공을 것보다 그게 쉽게 확실하지만, 확인되지 않음에에서 무게를 제공
weight = sum(A,1); 
weight = weight/sum(weight); 

으로 가중치를 정의에 따라서, 시작합니다. 여기에 내가 갇혀 얻을 .. 어디 어떻게 지금 무작위로 실제 가치에 따라 이러한 N 개의 값 중 하나를 선택합니까? 솔직히 말해서 나는 정말로 모른다. 당신이 무게를 지정할 수 있습니다

+0

나는 내가 CDF를 계산 한 다음 임의의 숫자의 무리를 생성하고 그들에 빠지다 어떤 간격 볼 필요가 생각하고 있어요. 하지만 어떻게해야하는지 완전히 확신 할 수는 없습니다. – user129412

+0

그건 좋은 접근 방법이지만,'randsample'은 당신을 위해 그런 일을합니다. (내 대답을보십시오) –

답변

3

사용 randsample (통계 도구 상자) :

col = randsample(1:size(A,2), 1, true, weight); 

다음 열은 A(:,col)입니다.

당신은 통계 도구 상자가없는 경우 :

col = sum(rand<cumsum(weight)); 
+0

때로는 얼마나 많은 강력한 inbuilt 함수가 있고, 발견 능력이 부족한가에 놀라곤합니다. 대단히 감사합니다. 이것은 기본적으로 필요한 전부입니다. – user129412

+0

@ user129412 환영합니다! 이것은 실제로 내장되어 있지 않습니다. 그것은 도구 상자의 일부입니다. 그들은 그걸 알기가 더 어렵습니다! –

관련 문제