2017-02-10 3 views
0

Я хочу, чтобы создать numpy массив, где каждый элемент является количество 1 с другим numpy массив размера x, созданного с np.random.randint.Использование np.random.randint в fill_value

>>> x = 10 
>>> np.random.randint(2, size=x) 
array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1]) 
>>> sum(array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1])) 
5 

и использовать его как это приводит к тому же массиву используется, вместо того, чтобы генерировать новый случайный пароль каждый раз

>>> np.full((5,), sum(np.random.randint(2, size=10)), dtype="int") 
array([5, 5, 5, 5, 5]) 

Как я могу сделать это, или есть лучший способ сделать это? Я также пробовал следующее:

>>> a = np.random.rand(10) 
>>> len(a[a < 0.5]) 
7 
>>> np.full((5,), len(np.random.rand(10)[np.random.rand(10) < 0.5]), dtype="int") 
array([7, 7, 7, 7, 7]) 

, но, как вы можете видеть, это также привело к тем же номерам. Проблема в том, что я не хочу использовать для циклов, а вместо этого найду способ сделать это быстро, используя numpy.

+0

Почему именно вы хотите иметь другой массив и считать те, что там есть? Не можете ли вы просто создать случайное число для целевого массива напрямую, используя соответствующий дистрибутив? Поэтому, возможно, просто сгенерируйте массив, используя биномиальное распределение. – languitar

+0

@languitar потому что я хочу симулировать доску Galton (imagine 0 означает, что мяч уходит влево, 1 означает, что мяч идет справа). – user5368737

+0

Конечно, но если ваши решения влево/вправо являются в основном независимыми монетами, то результат подсчета направления должен в основном быть образцом, взятым из биномиального распределения. – languitar

ответ

1

Вы можете просто сгенерировать матрицу, которая представляет собой N массивы размером x из случайных целых чисел. Затем суммируем по каждому массиву,

import numpy as np 
x = 10 
N = 5 
a = np.sum(np.random.randint(2, size=[N,x]),0) 

Я совершенно уверен, np.full не то, что вы хотите здесь, как это для массива инициализации к одному значению.

+0

Это сумма '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Я хочу суммировать количество '1' в каждом массиве. – user5368737

+0

'a = np.sum (np.random.randint (2, size = [N, x]), 1)' then? – otterb

0

Используя биномиальное распределение, как описано выше:

In [13]: np.random.binomial(10, 0.5, 5) 
Out[13]: array([7, 4, 6, 7, 4]) 

Это предполагает, что есть 10 различных влево/вправо решения, каждый из которых имеет 0,5 вероятности.

Смежные вопросы