문제

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?

도움이 되었습니까?

해결책

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()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top