홈>
정수 값
k
가 있습니다
그리고 1에 해당하는 확률 목록입니다.
k
를 구분하는 새 목록을 만들고 싶습니다.
내 목록의 확률에 따라 더 작은 정수로.
문제는 사전에 내 목록의 크기를 알지 못하고 내 목록의 여러 확률이 작고 같을 수 있으므로 새 목록이 항상
k
에 합산되는 것은 아닙니다
.
예 :
> k = 10
> l = [0.12, 0.12, 0.04, 0.04, 0.02, 0.02, 0.03, 0.03, 0.02, 0.02, 0.27, 0.27]
> sum(l)
1.0
> new_l = [int(round(k*v)) for v in a]
> print(new_l)
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3]
> sum(new_l)
8
그
sum(new_l) == k
를 어떻게 시행 할 수 있습니까
?
적어도 내 방법으로는 가능하지 않을 수도 있습니다.
k
경우에도
len(l)
보다 큽니다
k
인 경우
이상하게 작동하지 않는 것 같습니다.
>>> for k in [10, 11, 12, 13, 14, 15, 16, 20, 50, 75, 101, 1001, 1002, 10001, 10002, 100001, 100002]:
... print(k, sum([round(k*v,0) for v in a]))
...
(10, 8.0)
(11, 8.0)
(12, 8.0)
(13, 14.0)
(14, 14.0)
(15, 14.0)
(16, 14.0)
(20, 18.0)
(50, 52.0)
(75, 76.0)
(101, 100.0)
(1001, 1000.0)
(1002, 1002.0)
(10001, 10000.0)
(10002, 10002.0)
(100001, 100000.0)
(100002, 100002.0)
- 답변 # 1
- 답변 # 2
잘못 진행하고 있습니다. 당신이하려는 것은 당신의 목록에서 옵션을 선택하는 것입니다
n
타임스. 이것은numpy.random.choice
를 사용하여 달성 할 수 있습니다 기능.해당 코드는 다음과 같습니다.
from numpy.random import choice from collections import Counter draw = choice(range(12), 100, p=[0.12, 0.12, 0.04, 0.04, 0.02, 0.02, 0.03, 0.03, 0.02, 0.02, 0.27, 0.27]) counter = Counter(draw) print(counter.values()) print(sum(counter.values()))
이것이 출력됩니다 :
dict_values([16, 13, 7, 3, 1, 1, 2, 2, 3, 2, 31, 19]) 100
- 답변 # 3
랜덤 화를 통해이를 수행 할 수 있습니다 :
sl = np.cumsum(l) # cumulative probability b = np.random.rand(10) # a random number for each of your integers new_l = np.zeros(l.shape) for i in range(k): iinsert = np.where(b[i]>sl)[0][0] # first entry where b is larger than the cumumlative prob new_l[iinsert] += 1
관련 자료
- linux - Bash 스크립트를 사용하여 3 개의 폴더에 파일을 무작위로 배포하는 방법은 무엇입니까?
- json - 우편 배달부 테스트에서는 "번호"만 확인할 수 있지만 스키마에 대해 테스트 할 때는 "정수"만 확인할 수있는 이유는 무엇입니까?
- 파이썬에서 임의의 함수로 정수를 선택하는 방법은 무엇입니까?
- datetime - 파이썬에서 정수로 시간 추가
- R을 사용하여 배포판에 일련의 볼륨을 배포하는 방법
- python - 함수의 문자열에서 정수를 추출하는 방법은 무엇입니까?
- algorithm - 정수 배열과 값 N이 주어집니다 배열의 최소 요소 수의 합으로 N을 나타냅니다 이 문제에 접근하는 방법?
- python - 난수 생성기가 목록을 이동할 때 확률을 어떻게 바꿀 수 있습니까?
- r의 정수 벡터에서 n 개의 요소 제거
- applescript - Apple 스크립트에서 정수에 다른 정수를 특정 횟수 곱하기
- java - INTEGER SQLite에 긴 번호 추가
- java - "new Integer (any number)"를 매개 변수로 ArrayList의 remove 메소드에 전달하십시오
- php - 입력 정수, 레벨 크기 및 레벨 당 포인트가 주어지면 획득 한 포인트 수를 계산합니다
- SQL의 모든 정수 배열에서 특정 숫자를 어떻게 얻을 수 있습니까?
- rust - 비트 수를 32 비트 정수로 변환
- c++ - 동일한 값을 가진 n 요소의 배열에 숫자를 균등하게 분배
- exception - int ()는 try 블록 명령문에서 float 숫자를 정수로 변경하지 않습니다
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- JavaScript 변수를 HTML div에 '출력'하는 방법
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 화면에서 찾은 요소를 찾을 수없는 경우 셀레늄
어떻게 :
이것은 가장 큰 정수
n
를 찾는 것으로 시작합니다 그런n
k*v
보다 작습니다 그런 다음sum(new_l) == k
까지 최악의 n을 증가시켜 고정시킵니다. . 완료하는 데 O (len (l)) 이상의 작업이 필요하지 않습니다.