例如,如果我生成两个随机列表:
N=5
X=20
parent1 = np.random.choice(X, N, replace=True)
parent2 = np.random.choice(X, N, replace=True)
将给出两个列表,例如:
[2,5,1,1,12]
[3,18,4,5,1]
我如何创建一个新列表,该列表是数量相同的两个列表的随机混合?
例如
[2,18,1,5,12]
或
[18,5,1,12,5]
顺序无关紧要。
答案 0 :(得分:4)
继续您的示例,您可以尝试以下操作:
result = np.random.choice(np.concatenate([parent1,parent2]), N, replace=False)
是否选择更换样品是您的选择(参数replace
)。
答案 1 :(得分:0)
从2个列表中获得统一随机选择的几种方法。
。
import random
#### Option 1
for i in range(len(parent1)):
list_number = random.randint(1,3)
output(i) = exec('np.random.choice(parent'+str(list_number)+')')
#### Option 2
output_list = np.random.choice(np.concatenate([parent1,parent2]), N, replace=False)
前者在输出中平均代表每个列表,而不管它们的相对长度如何,后者根据列表的相对长度进行采样。
答案 2 :(得分:0)
如果给定了parent1
和parent2
,则可以使用np.choose
:
which_one = np.random.int(2, size=N).astype(np.bool)
out_array = np.choose(which_one, [parent1, parent2])
但是,请记住,如果parent1
和parent2
都是随机的,那么您可以简单地
out_array = np.random.choice(X, N, replace=True)
答案 3 :(得分:0)
一种方法是:
N=5
select_one = np.random.randint(0,2,N) # Outputs an array of 1 or 0s
mixed_list = select_one*parent1 + (1 - select_one)*parent2
如果您还想随机排列列表元素,则可以使用:
mixed_list = np.random.permutation(rand_fact*parent1 + (1 - rand_fact)*parent2)