# Numpy generating array from repeated function

## Question:

I’m trying to generate an numpy array with randomly generated elements (it’s similar like bernouilli distribution. The thing is I want to achieve it without using `numpy.random.binomial` function). Only function that fits after searching documentation and some forums is `numpy.fromfunction`. But I encountered a problem that this function doesn’t generate n elements, but one.

I expect output something like:

``````[0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1]
``````

This function generates 1 element only, no matter what shape is in tuple:

``````np.fromfunction(lambda i : np.random.choice([0, 1], p=[0.1, 0.9]), (20, ))
``````

#returns 1 or 0

``````np.fromfunction(lambda i ,j : np.random.choice([0, 1], p=[0.1, 0.9]), (20, 1))
``````

#still returns 1 or 0

Though I tried implementing "i" into the output stupidest way possible but.. it changed something, but still didn’t help:

``````np.fromfunction(lambda i : i*0 + np.random.choice([0, 1], p=[0.1, 0.9]), (20, ))
``````

#returns

``````array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
``````

It’s closer to the shape I want, but this ones or zeros are just repeated on all the array, so nothing’s changed really.

To sum up: I have a function `f()` that generates randomly with some probability 0 and 1, and is there any other function in numpy that can repeat function `f()` on array, or maybe some way to repair the example above?

Sure, `np.random.choice([0, 1], p=[0.1, 0.9], size=(20,))` or also there is `np.random.randint(low=0, high=2, size=(20,))`.
As @paime said in the comments, `np.fromfunction` is called once with the argument passed to it being an array. You can just use `np.random.choice` and specify size in it
``````In [1]: np.random.choice([0, 1], p=[0.1, 0.9], size=(20,))