Reputation: 265
I have a numeric vector of length x, all values in the vector are currently 0. I want it to randomly assign y of these values to equal 1, and x-y of these values to equal 0. Any fast way to do this? My best guess right now is to have a RNG assign each value to 0 or 1, sum up the string and, if the sum does not equal y, start all over again.
Can I use random.choice(vector,y) and then assign the elements that were picked to equal 1?
Upvotes: 0
Views: 61
Reputation: 527548
There's a function called random.sample()
which, given a sequence of items, will give you back a certain number of them randomly selected.
import random
for index in random.sample(xrange(len(vector)), y): # len(vector) is "x"
vector[index] = 1
Another way to do this would be to combine a list of x
0's and y
1's and shuffle it:
import random
vector = [0]*(x-y) + [1]*y # We can do this because numbers are immutable
vector.shuffle()
Upvotes: 2