특정 비중이 이진 임의적입니까 어레이에는 수준들과?

지정하십시오. 효율적인 (아마도 함께 벡터화된 Matlab 용어) 의 비중이 제로 및 sys_memsize 특정 수준들과 난수 생성 방법은? 특별히 함께 누마피?

내 비유하사 1/3 로 대한 특수 ',' 내 코드:

import numpy as np 
a=np.mod(np.multiply(np.random.randomintegers(0,2,size)),3)

하지만 이 기능을 처리할 수 있는 내장현 유지됩니까 페시엔틀리 상황에 대한 더 이상의 자연수 N 이 K 와 K / N '어디서'?

질문에 대한 의견 (12)
해결책

그러나 다른 외곽진입 using 'np.란도맥컬리스':

>>> np.random.choice([0, 1], size=(10,), p=[1./3, 2./3])
array([0, 1, 1, 1, 1, 0, 0, 0, 0, 0])
해설 (1)

간단한 방법으로 생성할 수 있는 '1' 이 약간만이라도 노다레이 비중이 제로 및 수준들과 운영까지도:

>>> import numpy as np
>>> N = 100
>>> K = 30 # K zeros, N-K ones
>>> arr = np.array([0] * K + [1] * (N-K))
>>> arr
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1])

그런 다음 그냥 '유통' 이 어레이에는 무순서 userdic. 무순서:

>>> np.random.shuffle(arr)
>>> arr
array([1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0,
       1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1,
       1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
       0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1,
       1, 1, 1, 0, 1, 1, 1, 1])

참고로 이 외곽진입 부여하느뇨 정확한 비율에 있습니다 의 제로 / 수준들과 달리 요청한 말하도다 외곽진입 이항 증명. # 39, t need don& 경우 정확한 비율을 사용할 경우, 오일러 외곽진입 그냥 그랬다고.

해설 (2)

'' 누마피.란도맥비노미일 사용할 수 있습니다. 예를 들어, '대' 는 e. g. 프라츠 수준들과:

In [50]: frac = 0.15

In [51]: sample = np.random.binomial(1, frac, size=10000)

In [52]: sample.sum()
Out[52]: 1567
해설 (0)

만약 내가 도움을 줄 수 있으나, 문제를 정확히 파악할 수 있는 [누마피.란도메이휴슈플] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.shuffle.html)

>>> def rand_bin_array(K, N):
    arr = np.zeros(N)
    arr[:K]  = 1
    np.random.shuffle(arr)
    return arr

>>> rand_bin_array(5,15)
array([ 0.,  1.,  0.,  1.,  1.,  1.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,
        0.,  0.])
해설 (0)

간단한 한 줄 광고문: 정수 및 확률 분포를 사용하여 피할 수 있습니다, 즉 열거합니다 및 오버킬 직관적이지 않은 것만으로도 이 문제에 대한 내 의견으로는 변환한 후 필요한 경우 int '작업' 부울 최초의 ' (단, 이를 두고' 부울 '어레이입니다 노력해야 할 대부분의 경우).

>>> import numpy as np
>>> np.random.random(9) < 1/3.
array([False,  True,  True,  True,  True, False, False, False, False])   
>>> (np.random.random(9) < 1/3.).astype(int)
array([0, 0, 0, 0, 0, 1, 0, 0, 1])    
해설 (0)

또 다른 방법을 사용해야 하는 정확한 수를 사용하여 인덱스 '는 수준들과 및 제로는 샘플링하려면 교체 없이 np.란도맥컬리스':

arr_len = 30
num_ones = 8

arr = np.zeros(arr_len, dtype=int)
idx = np.random.choice(range(arr_len), num_ones, replace=False)
arr[idx] = 1

아웃해야:

arr

array([0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1,
       0, 0, 0, 0, 0, 1, 0, 0])
해설 (0)