2012-12-04 3 views
3

메시지의 오류를 시뮬레이트하고 싶습니다 (예 : 1000010011 => 1010000011). 파이썬에서 이것을 구현할 수있는 방법이 있습니까? 나는 다음을 시도해 보았다 :가우시안 분포를 사용하여 목록을 셔플하는 방법

import random 
a = "1011101101" 
b = [el for el in a] # b = ['1', '0', '1', '1', '1', '0', '1', '1', '0', '1'] 
random.shuffle(b) 
print b # b = ['0', '1', '1', '1', '0', '1', '1', '1', '1', '0'] 
random.shuffle(b, random.random) 
print b # b = ['1', '1', '0', '1', '1', '0', '1', '0', '1', '1'] 

나는 보통/가우스 배포판으로 재주문을하고 싶다. 예는 :

import random 
a = "1011101101" 
b = [el for el in a] # b = ['1', '0', '1', '1', '1', '0', '1', '1', '0', '1'] 
random.shuffle(b,random.gauss(0.5,0.1)) 
print b # b = ['1', '0', '1', '1', '0', '0', '1', '1', '1', '1'] <= assume this is Gaussian distributed... 
# OR 
c = random.gauss(0.5,0.1) 
random.shuffle(b,c) 
print b # b = ['0', '0', '1', '1', '1', '0', '1', '1', '1', '1'] <= assume this is also Gaussian distributed... 

그러나이 작동하지 않습니다, 나는 메시지를 얻을 :/코멘트

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python27\lib\random.py", line 287, in shuffle 
    j = int(random() * (i+1)) 
TypeError: 'float' object is not callable 

어떤 제안을 크게 감상 할 수있다.

감사합니다 : 난 단지 (: 1000010011 => 1010000011 예) 여기에 다시 주문 오류를 요구하고있다. 그러나 나는 또한 시뮬레이션 버스트 에러 계획입니다 (예 : 1000010011 => 1011111011), 단일 이벤트 (예 : 1000010011 => 1000010011) 등

기타 관련 질문 :의 Python: binary string error simulation

+1

'b'에 대한 목록 이해를 간단한 'b = list (a)'로 바꿀 수 있습니다. – Droogans

답변

4

두 번째 인수 random.shuffle은 호출 가능해야하며 float가 아니어야합니다. 시도 :

random.shuffle(b, lambda:random.gauss(0.5,0.1)) 

는 0에서 1까지의 간격에 모자하려면

random.shuffle(b, lambda: max(0.0, min(1.0, random.gauss(0.5,0.1)))) 

(감사 @DSM)를 사용할 수 있습니다 당신은 현학적 인 경우, 위의 캡핑 실제로 1.0 포함 이로 인해 random.shuffle에 오류가 발생합니다. 사실 1.0을 1.0보다 작은 가장 큰 부동 소수점으로 대체해야합니다.

+0

고마워요 @ 실바도 –

+1

매개 변수에 따라 랜덤 결과를 캡핑하여 '[0.0, 1.0]'인지 확인해야 할 수도 있습니다. – DSM

4
c = lambda: random.gauss(0.5,0.1) 
관련 문제