Picking subset in python and changing values of subset

Question:

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?

Asked By: Ralph

||

Answers:

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()
Answered By: Amber
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.