2013-07-19 2 views
0

길이가 x 인 숫자 벡터가 있습니다. 벡터의 모든 값은 현재 0입니다.이 값의 y를 임의로 1로 지정하고이 값의 xy를 이 일을하는 빠른 방법? 지금 당장 가장 좋은 방법은 RNG에 각 값을 0 또는 1로 지정하고 문자열을 합한 다음 합계가 y와 같지 않으면 다시 시작하는 것입니다.파이썬에서 서브셋을 선택하고 서브 세트의 값을 변경합니다.

random.choice (vector, y)를 사용하여 선택한 요소를 1로 지정할 수 있습니까?

답변

2

random.sample()이라는 함수가 있는데, 주어진 일련의 항목은 무작위로 선택된 특정 수의 항목을 돌려 줄 것입니다.

import random 
for index in random.sample(xrange(len(vector)), y): # len(vector) is "x" 
    vector[index] = 1 

x 0과 y 일의 목록을 결합하고 셔플하는 것이 작업을 수행하는 또 다른 방법 : 난 그냥 두 번째 대답을 게시 거라고

import random 
vector = [0]*(x-y) + [1]*y # We can do this because numbers are immutable 
vector.shuffle() 
+0

. 테스트가 더 빨랐으며, len 10 ~ 1000의 벡터에 대해 셔플 승수가 약 30 %로 나타났습니다. 그 이상으로 테스트하지 않았습니다. – sberry

+0

@sberry 아마도 x와 y의 비율에 따라 달라집니다. – Amber

+0

y/x는 약 1.2이다. 감사! – Ralph